Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -1109,9 +1109,9 @@ Commit: Jack <[email protected]>
## git standup

Recall what you did or find what someone else did in a given range of time.
For instance, recall John's commits since last week:
For instance, recall John's commits since last week(7 days ago):
```
git standup John "last week"
git standup -a John -d 7
```

## git touch
Expand Down
214 changes: 172 additions & 42 deletions bin/git-standup
Original file line number Diff line number Diff line change
Expand Up @@ -2,53 +2,148 @@

# Code modified from https://github.com/kamranahmedse/git-standup,
# under the MIT LICENSE.
if [[ $# -gt 3 ]] ; then
>&2 printf "Usage: $0 [fullname] [since] [until]\nExample: $0 \"John Doe\" \"last Mon\" yesterday\n"
exit 1
fi
usage() {
cat <<EOS
Usage:
git standup [-a <author name>] [-w <weekstart-weekend>] [-d <days-ago>] [-m <max-dir-depth>] [-g] [-h] [-f]

-a - Specify author to restrict search to
-w - Specify weekday range to limit search to
-m - Specify the depth of recursive directory search
-L - Toggle inclusion of symbolic links in recursive directory search
-d - Specify the number of days back to include
-D - Specify the date format for "git log" (default: relative)
-h - Display this help screen
-g - Show if commit is GPG signed (G) or not (N)
-f - Fetch the latest commits beforehand

Examples:
git standup -a "John Doe" -w "MON-FRI" -m 3
EOS
}

warn() {
>&2 echo "${BOLD}${RED}WARNING: $1${NORMAL}"
}

git rev-parse --show-toplevel > /dev/null 2>&1
in_git_repo=$?

# Use colors, but only if connected to a terminal, and that terminal
# supports them.
if which tput >/dev/null 2>&1; then
ncolors=$(tput colors)
ncolors=$(tput colors)
fi
if [[ -t 1 ]] && [[ -n "$ncolors" ]] && [[ "$ncolors" -ge 8 ]] ; then
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
YELLOW="$(tput setaf 3)"
BLUE="$(tput setaf 4)"
BOLD="$(tput bold)"
NORMAL="$(tput sgr0)"
BOLD=$(tput bold)
UNDERLINE=$(tput smul)
NORMAL=$(tput sgr0)
RED="$(tput setaf 1)"
GREEN="$(tput setaf 2)"
YELLOW="$(tput setaf 3)"
BOLD="$(tput bold)"
NORMAL="$(tput sgr0)"
BOLD=$(tput bold)
UNDERLINE=$(tput smul)
NORMAL=$(tput sgr0)
else
RED=""
GREEN=""
YELLOW=""
BLUE=""
BOLD=""
NORMAL=""
BOLD=""
UNDERLINE=""
NORMAL=""
RED=""
GREEN=""
YELLOW=""
BOLD=""
NORMAL=""
BOLD=""
UNDERLINE=""
NORMAL=""
fi

# Only enable exit-on-error after the non-critical colorization stuff,
# which may fail on systems lacking tput or terminfo
set -e

AUTHOR=${1:-"$(git config user.name)"}
SINCE=${2:-yesterday}
UNTIL=${3:-today}
while getopts "hgfd:a:w:m:D:L" opt; do
case $opt in
h)
usage
exit 0
;;
a)
if [[ "$OPTARG" = 'all' ]] ; then
AUTHOR=".*"
else
AUTHOR="$OPTARG"
fi
;;
d)
test -n "$SINCE" && warn "-d option is conflict with -w"
if [ "$OPTARG" -lt 1 ]; then
>&2 echo "Specify days less than one is invalid"
exit 1
fi
SINCE="$OPTARG days ago"
;;
w)
if [ -n "$SINCE" ]; then
warn "-w option is conflict with -d"
continue
fi

week_range=${OPTARG}
week_start="${week_range%%-*}"
week_start="${week_start:="Mon"}"
week_end="${week_range##*-}"
week_end=${week_end:="Fri"}

## In case it is the start of week, we need to
## show the commits since the last weekend
shopt -s nocasematch
if [[ "$week_start" == "$(LC_ALL=C date +%a)" ]] ; then
SINCE="last $week_end";
fi
;;
f)
FETCH_LAST_COMMIT=true
;;
m)
MAXDEPTH=$((OPTARG + 1))
if [ "$MAXDEPTH" -lt 1 ]; then
>&2 echo "Specify depth less than one is invalid"
exit 1
fi
;;
L)
INCLUDE_LINKS=-L
;;
D)
GIT_DATE_FORMAT=${OPTARG}
;;
g)
GIT_PRETTY_FORMAT="%C(yellow)gpg: %G?%Creset"
;;
\?)
usage
exit 1
;;
esac
done

## In case it is the start of week, we need to
## show the commits since the last weekend
shopt -s nocasematch
shift $((OPTIND-1))

if [[ $# -gt 0 ]]; then
warn "please upgrate to new-style interface. Run 'git help standup' to get more info."
if [[ $# -gt 3 ]] ; then
usage
exit 1
fi
AUTHOR=$1
SINCE=$2
UNTIL=$3
fi

AUTHOR=${AUTHOR:="$(git config user.name)"}
SINCE=${SINCE:=yesterday}
UNTIL=${UNTIL:=today}
FETCH_LAST_COMMIT=${FETCH_LAST_COMMIT:=false}
MAXDEPTH=${MAXDEPTH:=2}
GIT_PRETTY_FORMAT="%Cred%h%Creset - %s %Cgreen(%cd) %C(bold blue)<%an>%Creset $GIT_PRETTY_FORMAT"
GIT_DATE_FORMAT=${GIT_DATE_FORMAT:=relative}

GIT_LOG_COMMAND="git --no-pager log \
--all
Expand All @@ -58,33 +153,68 @@ GIT_LOG_COMMAND="git --no-pager log \
--author=\"$AUTHOR\"
--abbrev-commit
--oneline
--pretty=format:'%Cred%h%Creset - %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
--pretty=format:'$GIT_PRETTY_FORMAT'
--date='$GIT_DATE_FORMAT'"

## For when the command has been run in a non-repo directory
if [[ $in_git_repo != 0 ]]; then
## Set delimiter to newline for the loop
IFS=$'\n'
## Recursively search for git repositories
PROJECT_DIRS=$(find $INCLUDE_LINKS . -maxdepth "$MAXDEPTH" -mindepth 0 -name .git)

# Fetch the latest commits, if required
if [ "$FETCH_LAST_COMMIT" = true ]; then

## Iterate through all the top level directories inside
## and look for any git repositories.
for DIR in */ ; do
echo "${BOLD}${GREEN}Fetching commits ..${NORMAL}"

# Foreach of the project directories, fetch the commits
for DIR in $PROJECT_DIRS; do
DIR="$(dirname "$DIR")"
pushd "$DIR" > /dev/null

if [[ -d ".git" ]] ; then
echo " ${YELLOW}$(basename "$DIR")${NORMAL}"
git fetch --all > /dev/null 2>&1
fi

cd "$DIR"
popd > /dev/null
done
fi

# Get the standup details for each of the projects
for DIR in $PROJECT_DIRS; do
DIR="$(dirname "$DIR")"
pushd "$DIR" > /dev/null
## Show the detail only if it is a git repository
if [[ -d ".git" ]] ; then
if [[ -d ".git" || -f ".git" ]] ; then
if GITOUT=$(eval ${GIT_LOG_COMMAND}); then
## Only output if there is some activity
## Only output if there is some activities
if [[ ! -z "$GITOUT" ]] ; then
echo "${BOLD}${UNDERLINE}${YELLOW}$DIR${NORMAL}"
echo "${BOLD}${UNDERLINE}${YELLOW}$(basename "$DIR")${NORMAL}"
echo "$GITOUT"
fi
else
echo "Repository under $DIR could not be queried. Missing initial commit?" >&2
echo "Repository under $DIR could not be queried." >&2
fi
fi

cd ..
popd > /dev/null
done
else
eval ${GIT_LOG_COMMAND}
echo "" ## To avoid that ugly # icon representing the end of line
if [ "$FETCH_LAST_COMMIT" = true ]; then
echo "${GREEN}Fetching commits ..${NORMAL}"
git fetch --all > /dev/null 2>&1
fi

if GITOUT=$(eval ${GIT_LOG_COMMAND}); then
if [[ ! -z "$GITOUT" ]] ; then
echo "$GITOUT"
else
if [[ $AUTHOR = '.*' ]] ; then
AUTHOR="all the contributors"
fi

echo "${YELLOW}Seems like $AUTHOR did nothing!${NORMAL}"
fi
fi
fi
12 changes: 12 additions & 0 deletions etc/git-extras-completion.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,18 @@ _git-stamp() {
'(--replace -r)'{--replace,-r}'[replace stamps with same id]'
}

_git-standup() {
_arguments -C \
'-a[Specify the author of commits. Use "all" to specify all authors.]' \
'-d[Show history since N days ago]' \
'-D[Specify the date format displayed in commit history]' \
'-f[Fetch commits before showing history]' \
'-g[Display GPG signed info]' \
'-h[Display help message]' \
'-L[Enable the inclusion of symbolic links]' \
'-m[The depth of recursive directory search]'
}

_git-summary() {
_arguments '--line[summarize with lines rather than commits]'
__gitex_commits
Expand Down
56 changes: 46 additions & 10 deletions man/git-standup.1
Original file line number Diff line number Diff line change
@@ -1,34 +1,70 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GIT\-STANDUP" "1" "April 2016" "" ""
.TH "GIT\-STANDUP" "1" "April 2017" "" ""
.
.SH "NAME"
\fBgit\-standup\fR \- Recall the commit history
.
.SH "SYNOPSIS"
\fBgit\-standup\fR [<full name>] [<since>] [<until>]
\fBgit\-standup\fR [\-a author] [\-m depth] [\-d days ago] [\-D date format] [\-g] [\-L] [\-f]
.
.P
\fBgit\-standup\fR \-h
.
.SH "DESCRIPTION"
Recall what you did on the last working day \.\.or be nosy and find what someone else did\.
.
.SH "OPTIONS"
<full name>
\-a author
.
.P
The author of commits\. Use "all" means specifying "all authors"\. Defaults to \fB$(git config user\.name)\fR\.
.
.P
\-m depth
.
.P
The depth of recursive directory search\. Defaults to 1\.
.
.P
\-L
.
.P
Enable the inclusion of symbolic links in recursive directory search\.
.
.P
\-d 1
.
.P
The start of commit history\. Defaults to 1, means "1 days ago"\.
.
.P
\-D relative
.
.P
The date format displayed in commit history\. Defaults to "relative"\.
.
.P
\-h
.
.P
Display help message\.
.
.P
The author of commits\. Defaults to \fB$(git config user\.name)\fR\.
\-g
.
.P
<since>
Display if commit is GPG signed (G) or not (N) in commit message\.
.
.P
The start of commit history\. Defaults to \fByesterday\fR\.
\-f
.
.P
<until>
Fetch the latest commits before showing commit history\.
.
.P
The end of commit history\. Defaults to \fBtoday\fR\.
The former version of \fBgit standup\fR accepted \fB<author> <since> <until>\fR as options\. This interface is deprecated now, and please avoid to use it!
.
.SH "EXAMPLES"
This shows your commits since yesterday:
Expand All @@ -52,7 +88,7 @@ This shows the author\'s commits since last week:
.
.nf

$ git standup spacewander "last week"
$ git standup \-a spacewander \-d 7

a26d1f9 \- add profile hook (70 minutes ago) <spacewander>
4e19859 \- fix getTotalSize return value error (6 days ago) <spacewander>
Expand All @@ -72,7 +108,7 @@ If current directory is not a git repo, git\-standup will fetch data from all to
.nf

$ cd \.\.
$ git standup spacewander "last week" yesterday
$ git standup \-a spacewander \-d 7

someProject/
4e19859 \- fix getTotalSize return value error (6 days ago) <spacewander>
Expand Down
Loading