Skip to content

Commit

Permalink
Add summary fields (#1013)
Browse files Browse the repository at this point in the history
Co-authored-by: guenthgr <[email protected]>
  • Loading branch information
guenhter and guenhter authored Jan 4, 2023
1 parent aea25d2 commit cd348da
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 71 deletions.
14 changes: 8 additions & 6 deletions Commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,12 +151,14 @@ Outputs a repo or path summary:
```bash
$ git summary

project : git-extras
repo age : 10 months ago
commits : 163
active : 60 days
files : 93
authors :
project : git-extras
repo age : 10 months ago
last active : 3 weeks ago
active on : 93 days
commits : 163
files : 93
uncommitted : 3
authors :
97 Tj Holowaychuk 59.5%
37 Jonhnny Weslley 22.7%
8 Kenneth Reitz 4.9%
Expand Down
39 changes: 22 additions & 17 deletions bin/git-summary
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ project=${PWD##*/}
#
# get date for the given <commit>
#

date() {
# the $1 can be empty
# shellcheck disable=SC2086
Expand All @@ -62,7 +61,6 @@ date() {
#
# get active days for the given <commit>
#

active_days() {
# shellcheck disable=SC2086
date $1 | sort -r | uniq | awk '
Expand All @@ -74,7 +72,6 @@ active_days() {
#
# get the commit total
#

commit_count() {
# shellcheck disable=SC2086
git log $MERGES_ARG --oneline $commit | wc -l | tr -d ' '
Expand All @@ -83,15 +80,13 @@ commit_count() {
#
# total file count
#

file_count() {
git ls-files | wc -l | tr -d ' '
}

#
# remove duplicate authors who belong to the same email address
#

dedup_by_email() {
# in:
# 27 luo zexuan <[email protected]>
Expand Down Expand Up @@ -132,7 +127,6 @@ dedup_by_email() {
#
# list authors
#

format_authors() {
# a rare unicode character is used as separator to avoid conflicting with
# author name. However, Linux column utility will escape tab if separator
Expand All @@ -150,9 +144,15 @@ format_authors() {
#
# fetch repository age from oldest commit
#

repository_age() {
git log --reverse --pretty=oneline --format="%ar" | head -n 1 | LC_ALL=C sed 's/ago//'
git log --reverse --pretty=oneline --format="%ar" -n 1 | LC_ALL=C sed 's/ago//'
}

#
# fetch repository age of the latest commit
#
last_active() {
git log --pretty=oneline --format="%ar" -n 1
}

#
Expand Down Expand Up @@ -181,27 +181,32 @@ line_count() {
lines "$@" | wc -l
}

# summary
uncommitted_changes_count() {
git status --porcelain | wc -l
}

# summary
echo
echo " project : $project"
echo " project : $project"

if [ -n "$SUMMARY_BY_LINE" ]; then
echo " lines : $(line_count "${paths[@]}")"
echo " authors :"
echo " lines : $(line_count "${paths[@]}")"
echo " authors :"
lines "${paths[@]}" | sort | uniq -c | sort -rn | format_authors
else
echo " repo age : $(repository_age)"
echo " repo age : $(repository_age)"
echo " last active : $(last_active)"
# shellcheck disable=SC2086
echo " active : $(active_days $commit) days"
echo " active on : $(active_days $commit) days"
# shellcheck disable=SC2086
echo " commits : $(commit_count $commit)"
echo " commits : $(commit_count $commit)"

# The file count doesn't support passing a git ref so ignore it if a ref is given
if [ "$commit" == "HEAD" ]; then
echo " files : $(file_count)"
echo " files : $(file_count)"
fi
echo " authors : "
echo " uncommitted : $(uncommitted_changes_count)"
echo " authors : "
if [ -n "$DEDUP_BY_EMAIL" ]; then
# the $commit can be empty
# shellcheck disable=SC2086
Expand Down
76 changes: 63 additions & 13 deletions man/git-summary.1
Original file line number Diff line number Diff line change
@@ -1,60 +1,87 @@
.\" generated with Ronn-NG/v0.9.1
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
.TH "GIT\-SUMMARY" "1" "August 2021" "" "Git Extras"
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GIT\-SUMMARY" "1" "December 2022" "" "Git Extras"
.
.SH "NAME"
\fBgit\-summary\fR \- Show repository summary
.
.SH "SYNOPSIS"
\fBgit\-summary\fR [\-\-dedup\-by\-email] [\-\-no\-merges] [<committish>]
.
.br
\fBgit\-summary\fR \-\-line [<path>]
.
.SH "DESCRIPTION"
Shows a summary of the repository or a path within it\.
.
.SH "OPTIONS"
<committish>
.
.P
Summarize only the range of commits included in the <committish>\.
.
.P
<path>
.
.P
Summarize only the range of files included in the <path>\.
.
.P
\-\-dedup\-by\-email
.
.P
Remove duplicate authors who belong to the same email address\. For example,
.
.IP "" 4
.
.nf

$ git summary
\|\.\|\.\|\.
\.\.\.
133 TJ Holowaychuk 9\.9%
115 Tj Holowaychuk 8\.5%

$ git summary \-\-dedup\-by\-email
\|\.\|\.\|\.
\.\.\.
248 TJ Holowaychuk 18\.4%
.
.fi
.
.IP "" 0
.
.P
\-\-no\-merges
.
.P
Exclude merge commits\.
.
.P
\-\-line
.
.P
Summarize with lines other than commits\. When \fB\-\-line\fR is specified, the last argument is treated as <path>\.
.
.P
This option can not be used together with \fB\-\-dedup\-by\-email\fR or \fB\-\-no\-merges\fR\.
.
.SH "EXAMPLES"
Outputs a repo summary:
.
.IP "" 4
.
.nf

$ git summary

project : express
repo age : 10 months ago
commits : 1893
active : 93 days
files : 111
authors :
project : express
repo age : 10 months ago
last active : 3 weeks ago
active on : 93 days
commits : 1893
files : 111
uncommitted : 3
authors :
1285 visionmedia
478 Tj Holowaychuk
48 Aaron Heckmann
Expand All @@ -73,42 +100,65 @@ authors :
1 ewoudj
1 isaacs
1 Matt Colyer
.
.fi
.
.IP "" 0
.
.P
This command can also take a committish, and will print a summary for the range of commits included in the committish:
.
.IP "" 4
.
.nf

$ git summary v42\.\.
.
.fi
.
.IP "" 0
.
.P
Outputs a repo summary by line:
.
.IP "" 4
.
.nf

$ git summary \-\-line

project : git\-extras
lines : 26820
authors :
\|\.\|\.\|\.
\.\.\.
.
.fi
.
.IP "" 0
.
.P
Filter with the path:
.
.IP "" 4
.
.nf

$ git summary \-\-line bin/

project : git\-extras
lines : 4420
authors :
\|\.\|\.\|\.
\.\.\.
.
.fi
.
.IP "" 0
.
.SH "AUTHOR"
Written by Tj Holowaychuk <\fItj@vision\-media\.ca\fR>
.
.SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR>
Loading

0 comments on commit cd348da

Please sign in to comment.