Browse Source

update git-extras plugin

spacewander 9 years ago
parent
commit
0c77e4ba6f
1 changed files with 120 additions and 74 deletions
  1. 120 74
      plugins/git-extras/git-extras.plugin.zsh

+ 120 - 74
plugins/git-extras/git-extras.plugin.zsh

@@ -3,19 +3,20 @@
 # Description
 # -----------
 #
-#  Completion script for git-extras (http://github.com/visionmedia/git-extras).
+#  Completion script for git-extras (http://github.com/tj/git-extras).
 #
 # ------------------------------------------------------------------------------
 # Authors
 # -------
 #
 #  * Alexis GRIMALDI (https://github.com/agrimaldi)
+#  * spacewander (https://github.com/spacewander)
 #
 # ------------------------------------------------------------------------------
 # Inspirations
 # -----------
 #
-#  * git-extras (http://github.com/visionmedia/git-extras)
+#  * git-extras (http://github.com/tj/git-extras)
 #  * git-flow-completion (http://github.com/bobthecow/git-flow-completion)
 #
 # ------------------------------------------------------------------------------
@@ -30,10 +31,21 @@ __git_command_successful () {
 }
 
 
+__git_commits() {
+    declare -A commits
+    git log --oneline -15 | sed 's/\([[:alnum:]]\{7\}\) /\1:/' | while read commit
+    do
+        hash=$(echo $commit | cut -d':' -f1)
+        commits[$hash]="$commit"
+    done
+    local ret=1
+    _describe -t commits commit commits && ret=0
+}
+
 __git_tag_names() {
     local expl
     declare -a tag_names
-    tag_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/tags 2>/dev/null)"}#refs/tags/})
+    tag_names=(${${(f)"$(_call_program tags git for-each-ref --format='"%(refname)"' refs/tags 2>/dev/null)"}#refs/tags/})
     __git_command_successful || return
     _wanted tag-names expl tag-name compadd $* - $tag_names
 }
@@ -47,31 +59,27 @@ __git_branch_names() {
     _wanted branch-names expl branch-name compadd $* - $branch_names
 }
 
-
-__git_feature_branch_names() {
+__git_specific_branch_names() {
     local expl
     declare -a branch_names
-    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/feature 2>/dev/null)"}#refs/heads/feature/})
+    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/"$1" 2>/dev/null)"}#refs/heads/$1/})
     __git_command_successful || return
     _wanted branch-names expl branch-name compadd $* - $branch_names
 }
 
 
+__git_feature_branch_names() {
+    __git_specific_branch_names 'feature'
+}
+
+
 __git_refactor_branch_names() {
-    local expl
-    declare -a branch_names
-    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/refactor 2>/dev/null)"}#refs/heads/refactor/})
-    __git_command_successful || return
-    _wanted branch-names expl branch-name compadd $* - $branch_names
+    __git_specific_branch_names 'refactor'
 }
 
 
 __git_bug_branch_names() {
-    local expl
-    declare -a branch_names
-    branch_names=(${${(f)"$(_call_program branchrefs git for-each-ref --format='"%(refname)"' refs/heads/bug 2>/dev/null)"}#refs/heads/bug/})
-    __git_command_successful || return
-    _wanted branch-names expl branch-name compadd $* - $branch_names
+    __git_specific_branch_names 'bug'
 }
 
 
@@ -92,19 +100,43 @@ __git_author_names() {
     _wanted author-names expl author-name compadd $* - $author_names
 }
 
+# subcommands
 
-_git-changelog() {
-    _arguments \
-        '(-l --list)'{-l,--list}'[list commits]' \
+_git-bug() {
+    local curcontext=$curcontext state line ret=1
+    declare -A opt_args
+
+    _arguments -C \
+        ': :->command' \
+        '*:: :->option-or-argument' && ret=0
+
+    case $state in
+        (command)
+            declare -a commands
+            commands=(
+                'finish:merge bug into the current branch'
+            )
+            _describe -t commands command commands && ret=0
+            ;;
+        (option-or-argument)
+            curcontext=${curcontext%:*}-$line[1]:
+            case $line[1] in
+                (finish)
+                    _arguments -C \
+                        ':branch-name:__git_bug_branch_names'
+                    ;;
+            esac
+    esac
 }
 
 
-_git-effort() {
+_git-changelog() {
     _arguments \
-        '--above[ignore file with less than x commits]' \
+        '(-l --list)'{-l,--list}'[list commits]' \
 }
 
 
+
 _git-contrib() {
     _arguments \
         ':author:__git_author_names'
@@ -135,6 +167,11 @@ _git-delete-tag() {
 }
 
 
+_git-effort() {
+    _arguments \
+        '--above[ignore file with less than x commits]'
+}
+
 _git-extras() {
     local curcontext=$curcontext state line ret=1
     declare -A opt_args
@@ -154,20 +191,7 @@ _git-extras() {
     esac
 
     _arguments \
-        '(-v --version)'{-v,--version}'[show current version]' \
-}
-
-
-_git-graft() {
-    _arguments \
-        ':src-branch-name:__git_branch_names' \
-        ':dest-branch-name:__git_branch_names'
-}
-
-
-_git-squash() {
-    _arguments \
-        ':branch-name:__git_branch_names'
+        '(-v --version)'{-v,--version}'[show current version]'
 }
 
 
@@ -199,6 +223,25 @@ _git-feature() {
 }
 
 
+_git-graft() {
+    _arguments \
+        ':src-branch-name:__git_branch_names' \
+        ':dest-branch-name:__git_branch_names'
+}
+
+
+_git-ignore() {
+    _arguments  -C \
+        '(--local -l)'{--local,-l}'[show local gitignore]' \
+        '(--global -g)'{--global,-g}'[show global gitignore]'
+}
+
+_git-missing() {
+    _arguments \
+        ':first-branch-name:__git_branch_names' \
+        ':second-branch-name:__git_branch_names'
+}
+
 _git-refactor() {
     local curcontext=$curcontext state line ret=1
     declare -A opt_args
@@ -227,59 +270,62 @@ _git-refactor() {
 }
 
 
-_git-bug() {
-    local curcontext=$curcontext state line ret=1
-    declare -A opt_args
-
-    _arguments -C \
-        ': :->command' \
-        '*:: :->option-or-argument' && ret=0
+_git-squash() {
+    _arguments \
+        ':branch-name:__git_branch_names'
+}
 
-    case $state in
-        (command)
-            declare -a commands
-            commands=(
-                'finish:merge bug into the current branch'
-            )
-            _describe -t commands command commands && ret=0
-            ;;
-        (option-or-argument)
-            curcontext=${curcontext%:*}-$line[1]:
-            case $line[1] in
-                (finish)
-                    _arguments -C \
-                        ':branch-name:__git_bug_branch_names'
-                    ;;
-            esac
-    esac
+_git-summary() {
+    _arguments '--line[summarize with lines other than commits]'
+    __git_commits
 }
 
 
+_git-undo(){
+    _arguments  -C \
+        '(--soft -s)'{--soft,-s}'[only rolls back the commit but changes remain un-staged]' \
+        '(--hard -h)'{--hard,-h}'[wipes your commit(s)]'
+}
+
 zstyle ':completion:*:*:git:*' user-commands \
+    alias:'define, search and show aliases' \
+    archive-file:'export the current HEAD of the git repository to a archive' \
+    back:'undo and stage latest commits' \
+    bug:'create a bug branch' \
     changelog:'populate changelog file with commits since the previous tag' \
+    commits-since:'list commits since a given date' \
     contrib:'display author contributions' \
     count:'count commits' \
+    create-branch:'create local and remote branch' \
     delete-branch:'delete local and remote branch' \
+    delete-merged-brancees:'delete merged branches'\
     delete-submodule:'delete submodule' \
     delete-tag:'delete local and remote tag' \
+    effort:'display effort statistics' \
     extras:'git-extras' \
-    graft:'merge commits from source branch to destination branch' \
-    squash:'merge commits from source branch into the current one as a single commit' \
     feature:'create a feature branch' \
-    refactor:'create a refactor branch' \
-    bug:'create a bug branch' \
-    summary:'repository summary' \
-    effort:'display effort statistics' \
-    repl:'read-eval-print-loop' \
-    commits-since:'list commits since a given date' \
-    release:'release commit with the given tag' \
-    alias:'define, search and show aliases' \
+    fork:'fork a repo on github' \
+    fresh-branch:'create empty local branch' \
+    gh-pages:'create the GitHub Pages branch' \
+    graft:'merge commits from source branch to destination branch' \
     ignore:'add patterns to .gitignore' \
     info:'show info about the repository' \
-    create-branch:'create local and remote branch' \
-    fresh-branch:'create empty local branch' \
-    undo:'remove the latest commit' \
+    local-commits:'list unpushed commits on the local branch' \
+    lock:'lock a file excluded from version control' \
+    locked:'ls files that have been locked' \
+    missing:'show commits missing from another branch' \
+    pr:'checks out a pull request locally' \
+    rebase-patch:'rebases a patch' \
+    refactor:'create a refactor branch' \
+    release:'commit, tag and push changes to the repository' \
+    rename-tag:'rename a tag' \
+    repl:'read-eval-print-loop' \
+    reset-file:'reset one file' \
+    root:'show path of root' \
     setup:'setup a git repository' \
+    show-tree:'show branch tree of commit history' \
+    squash:'merge commits from source branch into the current one as a single commit' \
+    summary:'repository summary' \
     touch:'one step creation of new files' \
-    obliterate:'Completely remove a file from the repository, including past commits and tags' \
-    local-commits:'list unpushed commits on the local branch' \
+    undo:'remove the latest commit' \
+    unlock:'unlock a file excluded from version control'