diff --git a/Commands.md b/Commands.md index fac3a3ae9..614f9d7e8 100644 --- a/Commands.md +++ b/Commands.md @@ -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% diff --git a/bin/git-summary b/bin/git-summary index 65303c90e..6916c489e 100755 --- a/bin/git-summary +++ b/bin/git-summary @@ -52,7 +52,6 @@ project=${PWD##*/} # # get date for the given # - date() { # the $1 can be empty # shellcheck disable=SC2086 @@ -62,7 +61,6 @@ date() { # # get active days for the given # - active_days() { # shellcheck disable=SC2086 date $1 | sort -r | uniq | awk ' @@ -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 ' ' @@ -83,7 +80,6 @@ commit_count() { # # total file count # - file_count() { git ls-files | wc -l | tr -d ' ' } @@ -91,7 +87,6 @@ file_count() { # # remove duplicate authors who belong to the same email address # - dedup_by_email() { # in: # 27 luo zexuan @@ -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 @@ -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 } # @@ -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 diff --git a/man/git-summary.1 b/man/git-summary.1 index 4820f8cb2..5f2ecf483 100644 --- a/man/git-summary.1 +++ b/man/git-summary.1 @@ -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] [] +. .br \fBgit\-summary\fR \-\-line [] +. .SH "DESCRIPTION" Shows a summary of the repository or a path within it\. +. .SH "OPTIONS" +. .P Summarize only the range of commits included in the \. +. .P +. .P Summarize only the range of files included in the \. +. .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 \. +. .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 @@ -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> diff --git a/man/git-summary.html b/man/git-summary.html index 39e180273..6e488f802 100644 --- a/man/git-summary.html +++ b/man/git-summary.html @@ -1,8 +1,8 @@ - - + + git-summary(1) - Show repository summary