mirror of
https://github.com/arzzen/git-quick-stats.git
synced 2026-09-14 17:46:19 -04:00
Add non interactive request for detailed stats by branch
This commit is contained in:
parent
3d86fa9664
commit
2422a010c6
150
git-quick-stats
150
git-quick-stats
|
|
@ -165,73 +165,89 @@ function option_picked() {
|
|||
# OUTS: None
|
||||
################################################################################
|
||||
function detailedGitStats() {
|
||||
option_picked "Contribution stats (by author):"
|
||||
git -c log.showSignature=false log --use-mailmap --no-merges --numstat \
|
||||
--pretty="format:commit %H%nAuthor: %aN <%aE>%nDate: %ad%n%n%w(0,4,4)%B%n" \
|
||||
$_since $_until $_pathspec | LC_ALL=C awk '
|
||||
function printStats(author) {
|
||||
printf "\t%s:\n", author
|
||||
local branch="${1:-}"
|
||||
local _branch=""
|
||||
|
||||
if(more["total"] > 0) {
|
||||
printf "\t insertions: %d (%.0f%%)\n", more[author], \
|
||||
(more[author] / more["total"] * 100)
|
||||
}
|
||||
if [[ -z "${branch}" ]]; then
|
||||
option_picked "Contribution stats (by author):"
|
||||
else
|
||||
option_picked "Contribution stats (by author) on ${branch} branch:"
|
||||
_branch="${branch}"
|
||||
fi
|
||||
|
||||
if(less["total"] > 0) {
|
||||
printf "\t deletions: %d (%.0f%%)\n", less[author], \
|
||||
(less[author] / less["total"] * 100)
|
||||
}
|
||||
{
|
||||
|
||||
git -c log.showSignature=false log ${branch} --use-mailmap --no-merges --numstat \
|
||||
--pretty="format:commit %H%nAuthor: %aN <%aE>%nDate: %ad%n%n%w(0,4,4)%B%n" \
|
||||
$_since $_until $_pathspec | LC_ALL=C awk '
|
||||
function printStats(author) {
|
||||
printf "\t%s:\n", author
|
||||
|
||||
if(file["total"] > 0) {
|
||||
printf "\t files: %d (%.0f%%)\n", file[author], \
|
||||
(file[author] / file["total"] * 100)
|
||||
}
|
||||
|
||||
if(commits["total"] > 0) {
|
||||
printf "\t commits: %d (%.0f%%)\n", commits[author], \
|
||||
(commits[author] / commits["total"] * 100)
|
||||
}
|
||||
|
||||
if (first[author] != "") {
|
||||
printf "\t lines changed: %s\n", more[author] + less[author]
|
||||
printf "\t first commit: %s\n", first[author]
|
||||
printf "\t last commit: %s\n", last[author]
|
||||
}
|
||||
|
||||
printf "\n"
|
||||
}
|
||||
|
||||
/^Author:/ {
|
||||
$1 = ""
|
||||
author = $0
|
||||
commits[author] += 1
|
||||
commits["total"] += 1
|
||||
}
|
||||
|
||||
/^Date:/ {
|
||||
$1="";
|
||||
first[author] = substr($0, 2)
|
||||
if(last[author] == "" ) { last[author] = first[author] }
|
||||
}
|
||||
|
||||
/^[0-9]/ {
|
||||
more[author] += $1
|
||||
less[author] += $2
|
||||
file[author] += 1
|
||||
|
||||
more["total"] += $1
|
||||
less["total"] += $2
|
||||
file["total"] += 1
|
||||
}
|
||||
|
||||
END {
|
||||
for (author in commits) {
|
||||
if (author != "total") {
|
||||
printStats(author)
|
||||
if(more["total"] > 0) {
|
||||
printf "\t insertions: %d (%.0f%%)\n", more[author], \
|
||||
(more[author] / more["total"] * 100)
|
||||
}
|
||||
}
|
||||
printStats("total")
|
||||
}'
|
||||
|
||||
if(less["total"] > 0) {
|
||||
printf "\t deletions: %d (%.0f%%)\n", less[author], \
|
||||
(less[author] / less["total"] * 100)
|
||||
}
|
||||
|
||||
if(file["total"] > 0) {
|
||||
printf "\t files: %d (%.0f%%)\n", file[author], \
|
||||
(file[author] / file["total"] * 100)
|
||||
}
|
||||
|
||||
if(commits["total"] > 0) {
|
||||
printf "\t commits: %d (%.0f%%)\n", commits[author], \
|
||||
(commits[author] / commits["total"] * 100)
|
||||
}
|
||||
|
||||
if (first[author] != "") {
|
||||
printf "\t lines changed: %s\n", more[author] + less[author]
|
||||
printf "\t first commit: %s\n", first[author]
|
||||
printf "\t last commit: %s\n", last[author]
|
||||
}
|
||||
|
||||
printf "\n"
|
||||
}
|
||||
|
||||
/^Author:/ {
|
||||
$1 = ""
|
||||
author = $0
|
||||
commits[author] += 1
|
||||
commits["total"] += 1
|
||||
}
|
||||
|
||||
/^Date:/ {
|
||||
$1="";
|
||||
first[author] = substr($0, 2)
|
||||
if(last[author] == "" ) { last[author] = first[author] }
|
||||
}
|
||||
|
||||
/^[0-9]/ {
|
||||
more[author] += $1
|
||||
less[author] += $2
|
||||
file[author] += 1
|
||||
|
||||
more["total"] += $1
|
||||
less["total"] += $2
|
||||
file["total"] += 1
|
||||
}
|
||||
|
||||
END {
|
||||
for (author in commits) {
|
||||
if (author != "total") {
|
||||
printStats(author)
|
||||
}
|
||||
}
|
||||
printStats("total")
|
||||
}'
|
||||
} || {
|
||||
# If branch does not exist
|
||||
echo "Branch does not exist";
|
||||
show_menu
|
||||
}
|
||||
}
|
||||
|
||||
################################################################################
|
||||
|
|
@ -492,6 +508,14 @@ if [[ "$#" -eq 1 ]]; then
|
|||
case "$1" in
|
||||
-r|--suggest-reviewers) suggestReviewers;;
|
||||
-T|--detailed-git-stats) detailedGitStats;;
|
||||
# TODO
|
||||
-R|--git-stats-by-branch)
|
||||
branch=""
|
||||
while [[ -z "${branch}" ]]; do
|
||||
read -r -p "Which branch? " branch
|
||||
done
|
||||
detailedGitStats "${branch}";;
|
||||
# END TODO
|
||||
-b|--branch-tree) branchTree;;
|
||||
-d|--commits-per-day) commitsPerDay;;
|
||||
-a|--commits-per-author) commitsPerAuthor;;
|
||||
|
|
|
|||
Loading…
Reference in a new issue