diff options
Diffstat (limited to 'plugins/git-extras')
| -rw-r--r-- | plugins/git-extras/git-extras.plugin.zsh | 194 | 
1 files changed, 120 insertions, 74 deletions
| diff --git a/plugins/git-extras/git-extras.plugin.zsh b/plugins/git-extras/git-extras.plugin.zsh index 8419166ab..d91c1af81 100644 --- a/plugins/git-extras/git-extras.plugin.zsh +++ b/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' | 
