summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Unix/Command/_git108
2 files changed, 109 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index ae43c1979..044b38ca2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2021-08-29  Oliver Kiddle  <opk@zsh.org>
 
+	* 49327: Completion/Unix/Command/_git: complete for new git
+	maintenance, for-each-repo, sparse-checkout and bugreport commands
+
 	* 49319: Completion/...: completion options update
 
 	* 49317: Completion/Unix/Command/_transmission,
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index d27b43098..a82b70e83 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -641,6 +641,7 @@ _git-clone () {
     '(-4 --ipv4 -6 --ipv6)'{-6,--ipv6}'[use IPv6 addresses only]' \
     '--filter=[object filtering]:filter:_git_rev-list_filters' \
     '--remote-submodules[any cloned submodules will use their remote-tracking branch]' \
+    '--sparse[initialize the sparse-checkout file to start with only the top-level files]' \
     ': :->repository' \
     ': :_directories' && ret=0
 
@@ -1215,6 +1216,46 @@ _git-log () {
   return ret
 }
 
+(( $+functions[_git-maintenance] )) ||
+_git-maintenance() {
+  local curcontext="$curcontext" state state_descr line ret=1
+  local -A opt_args
+
+  _arguments -C \
+    ': :->command' \
+    '*::: := ->option-or-argument' && ret=0
+
+  case $state in
+    (command)
+      local -a commands
+
+      commands=(
+        register:'initialize config values to run maintenance on this repository'
+        run:'run one or more maintenance tasks'
+        start:'start running maintenance on the current repository'
+        stop:'halt the background maintenance schedule'
+        unregister:'remove the current repository from background maintenance'
+      )
+
+      _describe -t commands command commands && ret=0
+    ;;
+    (option-or-argument)
+      curcontext=${curcontext%:*}-$line[1]:
+      case $line[1] in
+        (run)
+          _arguments -S $endopt \
+            '--auto[run tasks based on the state of the repository]' \
+            '--schedule=[run tasks based on frequency]:frequency (seconds)' \
+            "--quiet[don't report progress or other information to stderr]" \
+            '*--task=[run a specific task]:task:(gc commit-graph prefetch loose-objects incremental-repack pack-refs)' && ret=0
+        ;;
+      esac
+    ;;
+  esac
+
+  return ret
+}
+
 (( $+functions[_git-merge] )) ||
 _git-merge () {
   local -a merge_options
@@ -1732,6 +1773,50 @@ _git-show () {
   return ret
 }
 
+(( $+functions[_git-sparse-checkout] )) ||
+_git-sparse-checkout() {
+  local curcontext="$curcontext" state state_descr line ret=1
+  local -A opt_args
+
+  _arguments -C \
+    ': :->command' \
+    '*::: := ->option-or-argument' && ret=0
+
+  case $state in
+    (command)
+      local -a commands
+
+      commands=(
+        list:'describe the patterns in the sparse-checkout file'
+        init:'enable the core.sparseCheckout setting'
+        set:'write a set of patterns to the sparse-checkout file'
+        add:'update the sparse-checkout file to include additional patterns'
+        reapply:'reapply the sparsity pattern rules to paths in the working tree'
+        disable:'disable the config setting, and restore all files in the working directory'
+      )
+
+      _describe -t commands command commands && ret=0
+    ;;
+    (option-or-argument)
+      curcontext=${curcontext%:*}-$line[1]:
+      case $line[1] in
+        init)
+          _arguments \
+            '--cone[allow for better performance with a limited set of patterns]' \
+            '--no-sparse-index[rewrite index to not be sparse]'
+        ;;
+        set|add)
+          _arguments -S \
+            '--stdin[read patterns from input]' \
+            '*:pattern:_files' && ret=0
+        ;;
+      esac
+    ;;
+  esac
+
+  return ret
+}
+
 (( $+functions[_git-stash] )) ||
 _git-stash () {
   local curcontext=$curcontext state line ret=1
@@ -4001,6 +4086,13 @@ _git-blame () {
   return ret
 }
 
+(( $+functions[_git-bugreport] )) ||
+_git-bugreport() {
+  _arguments \
+    '(-o --output-directory)'{-o+,--output-directory=}'[specify a destination for the bugreport file]:directory:_directories' \
+    '(-s --suffix)'{-s+,--suffix=}'[specify a strftime format suffix for the filename]:format:_date_formats'
+}
+
 (( $+functions[_git-cherry] )) ||
 _git-cherry () {
   # TODO: --abbrev is undocumented.
@@ -4916,7 +5008,7 @@ _git-merge-index () {
 
 (( $+functions[_git-mktag] )) ||
 _git-mktag () {
-  _message 'no arguments allowed; only accepts tags on standard input'
+  _arguments --no-strict
 }
 
 (( $+functions[_git-mktree] )) ||
@@ -5264,6 +5356,14 @@ _git-for-each-ref () {
     ':: :_guard "([^-]?#|)" pattern'
 }
 
+(( $+functions[_git-for-each-repo] )) ||
+_git-for-each-repo() {
+  _arguments -S \
+    '(-C --config)'{-C,--config=}'[specify config variable for list of paths]:config variable' \
+    ':git command:_git_commands' \
+    '*:: := _git'
+}
+
 (( $+functions[_git-ls-files] )) ||
 _git-ls-files () {
   local no_empty_directory_opt=
@@ -5965,6 +6065,7 @@ _git_commands () {
     gui:'run portable graphical interface to git'
     init:'create empty git repository or re-initialize an existing one'
     log:'show commit logs'
+    maintenance:'run tasks to optimize Git repository data'
     merge:'join two or more development histories together'
     mv:'move or rename file, directory, or symlink'
     notes:'add or inspect object notes'
@@ -5978,6 +6079,7 @@ _git_commands () {
     rm:'remove files from the working tree and from the index'
     shortlog:'summarize git log output'
     show:'show various types of objects'
+    sparse-checkout:'initialize and modify the sparse-checkout'
     stash:'stash away changes to dirty working directory'
     status:'show working-tree status'
     submodule:'initialize, update, or inspect submodules'
@@ -6001,6 +6103,7 @@ _git_commands () {
 
   ancillary_interrogator_commands=(
     blame:'show what revision and author last modified each line of a file'
+    bugreport:'collect information for user to file a bug report'
     count-objects:'count unpacked objects and display their disk consumption'
     difftool:'show changes using common diff tools'
     fsck:'verify connectivity and validity of objects in database'
@@ -6035,7 +6138,7 @@ _git_commands () {
     index-pack:'build pack index file for an existing packed archive'
     merge-file:'run a three-way file merge'
     merge-index:'run merge for files needing merging'
-    mktag:'create tag object'
+    mktag:'create tag object with extra validation'
     mktree:'build tree-object from git ls-tree formatted text'
     multi-pack-index:'write and verify multi-pack-indexes'
     pack-objects:'create packed archive of objects'
@@ -6054,6 +6157,7 @@ _git_commands () {
     diff-index:'compare content and mode of blobs between index and repository'
     diff-tree:'compare content and mode of blobs found via two tree objects'
     for-each-ref:'output information on each ref'
+    for-each-repo:'run a git command on a list of repositories'
     get-tar-commit-id:'extract commit ID from an archive created using git archive'
     ls-files:'information about files in index/working directory'
     ls-remote:'show references in a remote repository'