1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/usr/bin/env bash
#
# @license Apache-2.0
#
# Copyright (c) 2017 The Stdlib Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Prints summary statistics for merged pull requests.
#
# <month> <day> <year> <num_files> <additions> <deletions>
# shellcheck disable=SC2034
# FUNCTIONS #
# Computes summary statistics.
sum() {
local sadd=0
local sdel=0
local i=0
while read -r add del file
do
i=$((i + 1))
sadd=$((sadd + add))
sdel=$((sdel + del))
done
echo "${i} ${sadd} ${sdel}"
}
# MAIN #
# * `git log --reverse --merges`
# - Show commit logs in reverse order.
# * `grep 'Merge pull request #'`
# - Filter for commit messages which explicitly state that a commit merges a pull request.
# * `while read`
# - Read stdin line-by-line.
# * `git show --numstat`
# - Given a commit hash, print each line along with the associated number of additions and deletions.
# * `sum`
# - Compute summary statistics over the list of files.
# * `while read`
# - Print summarized output.
git log --reverse --merges --format=format:"%ad %H %s" --date=format:"%b %d %Y" | grep 'Merge pull request #' | \
while IFS=" " read -r mon day year hash msg
do
git show "${hash}" --format=tformat: --numstat | sum | \
while read -r n add del
do
echo "${mon} ${day} ${year} ${n} ${add} ${del}"
done
done
|