diff --git a/Commands.md b/Commands.md index b78bb19..f661285 100644 --- a/Commands.md +++ b/Commands.md @@ -5,6 +5,7 @@ - [`git back`](#git-back) - [`git bug`](#git-featurerefactorbugchore) - [`git bulk`](#git-bulk) + - [`git brv`](#git-brv) - [`git changelog`](#git-changelog) - [`git chore`](#git-featurerefactorbugchore) - [`git clear`](#git-clear) @@ -331,6 +332,17 @@ $ git bulk --removeworkspace personal $ git bulk --purge ``` +## git brv + +Pretty listing of branches sorted by the date of their last commit. + +```bash +$ git brv +2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv +2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec +``` + + ## git repl Git read-eval-print-loop. Lets you run `git` commands without typing 'git'. diff --git a/bin/git-brv b/bin/git-brv new file mode 100755 index 0000000..f2d83ab --- /dev/null +++ b/bin/git-brv @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# A sorted prettier branch -vv + +if ! (( BASH_VERSINFO[0] > 4 || + BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 2 )); then + printf >&2 'This script requires bash 4.2 or newer\n' + exit 1 +fi + +if [[ -t 1 ]]; then + shopt -s checkwinsize + COLUMNS=$(tput cols) + color_branch_local=$(git config --get-color color.branch.local normal) + color_branch_current=$(git config --get-color color.branch.current green) + color_diff_commit=$(git config --get-color color.diff.commit yellow) + color_branch_upstream=$(git config --get-color color.branch.upstream blue) + reset=$(tput sgr0) +fi + + +declare -A upstream date hash message +eval "$( + git for-each-ref --format='upstream[%(refname:short)]=%(upstream:short)' \ + --shell 'refs/heads/**' +)" + +for b in "${!upstream[@]}"; do + blen=${#b} ulen=${#upstream[$b]} + (( bwidth = blen > bwidth ? blen : bwidth )) + (( uwidth = ulen > uwidth ? ulen : uwidth )) + IFS=/ read -r 'date[$b]' 'hash[$b]' 'message[$b]' < <( + git log --no-walk=unsorted --format=%ct/%h/%s "$b" -- + ) + hlen=${#hash[$b]} + (( hwidth = hlen > hwidth ? hlen : hwidth )) +done + +mapfile -t ordered < <( + for b in "${!date[@]}"; do + printf '%d\t%s\n' "${date[$b]}" "$b" + done | sort -rn | cut -f2- +) + +current=$(git symbolic-ref -q --short HEAD) + +for b in "${ordered[@]}"; do + branch_color=$color_branch_local + if [[ $b = "$current" ]]; then + branch_color=$color_branch_current + fi + if [[ -t 1 ]]; then + msg=${message[$b]:0:COLUMNS-bwidth-uwidth-hwidth-14} + else + msg=${message[$b]} + fi + printf '%(%Y-%m-%d)T %s%*s%s %s%*s%s %s%*s%s %s\n' \ + "${date[$b]}" \ + "$branch_color" "-$bwidth" "$b" "$reset" \ + "$color_branch_upstream" "-$uwidth" "${upstream[$b]}" "$reset" \ + "$color_diff_commit" "-$hwidth" "${hash[$b]}" "$reset" \ + "$msg" +done \ No newline at end of file diff --git a/etc/git-extras-completion.zsh b/etc/git-extras-completion.zsh index f115f47..0aa6eb5 100644 --- a/etc/git-extras-completion.zsh +++ b/etc/git-extras-completion.zsh @@ -456,6 +456,7 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \ back:'undo and stage latest commits' \ bug:'create bug branch' \ bulk:'run bulk commands' \ + brv:'list branches sorted by their last commit date'\ changelog:'generate a changelog report' \ chore:'create chore branch' \ clear-soft:'soft clean up a repository' \ diff --git a/man/git-brv.1 b/man/git-brv.1 new file mode 100644 index 0000000..d49494c --- /dev/null +++ b/man/git-brv.1 @@ -0,0 +1,37 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "GIT\-BRV" "1" "January 2020" "" "Git Extras" +. +.SH "NAME" +\fBgit\-brv\fR \- List branches sorted by their last commit date +. +.SH "SYNOPSIS" +\fBgit\-brv\fR +. +.SH "DESCRIPTION" +Pretty listing of branches sorted by the date of their last commit\. +. +.SH "EXAMPLES" +Simply run \fBgit brv\fR +. +.IP "" 4 +. +.nf + +$ git brv +2020\-01\-14 adds\-git\-brv fork/adds\-git\-brv 1ca0d76 Fixes #700: Adds git\-brv +2020\-01\-08 master origin/master 265b03e Merge pull request #816 from spacewander/git\-sed\-pathspec +. +.fi +. +.IP "" 0 +. +.SH "AUTHOR" +Written by Øsse <\fIhttps://github\.com/Osse\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-brv.html b/man/git-brv.html new file mode 100644 index 0000000..8e265d9 --- /dev/null +++ b/man/git-brv.html @@ -0,0 +1,114 @@ + + +
+ + +
+ git-brv - List branches sorted by their last commit date
+
git-brv
Pretty listing of branches sorted by the date of their last commit.
+ + Simply run git brv
$ git brv
+2020-01-14 adds-git-brv fork/adds-git-brv 1ca0d76 Fixes #700: Adds git-brv
+2020-01-08 master origin/master 265b03e Merge pull request #816 from spacewander/git-sed-pathspec
+
+
+Written by Øsse <https://github.com/Osse>
+ +<https://github.com/tj/git-extras/issues>
+ +<https://github.com/tj/git-extras>
+ + +