mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Add Bash and Zsh completion scripts (#22646)
This PR adds contrib scripts for bash and zsh completion. Simply call: ```bash source contrib/autocompletion/bash_autocomplete ``` or for Zsh: ```bash source contrib/autocompletion/zsh_autocomplete ``` Signed-off-by: Andrew Thornton <art27@cantab.net> --------- Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: a1012112796 <1012112796@qq.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		@@ -64,5 +64,7 @@ CMD ["/bin/s6-svscan", "/etc/s6"]
 | 
				
			|||||||
COPY docker/root /
 | 
					COPY docker/root /
 | 
				
			||||||
COPY --from=build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
 | 
					COPY --from=build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
 | 
				
			||||||
COPY --from=build-env /go/src/code.gitea.io/gitea/environment-to-ini /usr/local/bin/environment-to-ini
 | 
					COPY --from=build-env /go/src/code.gitea.io/gitea/environment-to-ini /usr/local/bin/environment-to-ini
 | 
				
			||||||
 | 
					COPY --from=build-env /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_autocomplete /etc/profile.d/gitea_bash_autocomplete.sh
 | 
				
			||||||
RUN chmod 755 /usr/bin/entrypoint /app/gitea/gitea /usr/local/bin/gitea /usr/local/bin/environment-to-ini
 | 
					RUN chmod 755 /usr/bin/entrypoint /app/gitea/gitea /usr/local/bin/gitea /usr/local/bin/environment-to-ini
 | 
				
			||||||
RUN chmod 755 /etc/s6/gitea/* /etc/s6/openssh/* /etc/s6/.s6-svscan/*
 | 
					RUN chmod 755 /etc/s6/gitea/* /etc/s6/openssh/* /etc/s6/.s6-svscan/*
 | 
				
			||||||
 | 
					RUN chmod 644 /etc/profile.d/gitea_bash_autocomplete.sh
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,7 +54,9 @@ RUN chown git:git /var/lib/gitea /etc/gitea
 | 
				
			|||||||
COPY docker/rootless /
 | 
					COPY docker/rootless /
 | 
				
			||||||
COPY --from=build-env --chown=root:root /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
 | 
					COPY --from=build-env --chown=root:root /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea
 | 
				
			||||||
COPY --from=build-env --chown=root:root /go/src/code.gitea.io/gitea/environment-to-ini /usr/local/bin/environment-to-ini
 | 
					COPY --from=build-env --chown=root:root /go/src/code.gitea.io/gitea/environment-to-ini /usr/local/bin/environment-to-ini
 | 
				
			||||||
 | 
					COPY --from=build-env /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_autocomplete /etc/profile.d/gitea_bash_autocomplete.sh
 | 
				
			||||||
RUN chmod 755 /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-setup.sh /app/gitea/gitea /usr/local/bin/gitea /usr/local/bin/environment-to-ini
 | 
					RUN chmod 755 /usr/local/bin/docker-entrypoint.sh /usr/local/bin/docker-setup.sh /app/gitea/gitea /usr/local/bin/gitea /usr/local/bin/environment-to-ini
 | 
				
			||||||
 | 
					RUN chmod 644 /etc/profile.d/gitea_bash_autocomplete.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#git:git
 | 
					#git:git
 | 
				
			||||||
USER 1000:1000
 | 
					USER 1000:1000
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										17
									
								
								contrib/autocompletion/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								contrib/autocompletion/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					Bash and Zsh completion
 | 
				
			||||||
 | 
					=======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					From within the gitea root run:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					source contrib/autocompletion/bash_autocomplete
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or for zsh run:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					source contrib/autocompletion/zsh_autocomplete
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These scripts will check if gitea is on the path and if so add autocompletion for `gitea`. Or if not autocompletion will work for `./gitea`.
 | 
				
			||||||
 | 
					If gitea has been installed as a different program pass in the `PROG` environment variable to set the correct program name.
 | 
				
			||||||
							
								
								
									
										30
									
								
								contrib/autocompletion/bash_autocomplete
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								contrib/autocompletion/bash_autocomplete
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					#! /bin/bash
 | 
				
			||||||
 | 
					# Heavily inspired by https://github.com/urfave/cli
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_cli_bash_autocomplete() {
 | 
				
			||||||
 | 
					  if [[ "${COMP_WORDS[0]}" != "source" ]]; then
 | 
				
			||||||
 | 
					    local cur opts base
 | 
				
			||||||
 | 
					    COMPREPLY=()
 | 
				
			||||||
 | 
					    cur="${COMP_WORDS[COMP_CWORD]}"
 | 
				
			||||||
 | 
					    if [[ "$cur" == "-"* ]]; then
 | 
				
			||||||
 | 
					      opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} ${cur} --generate-bash-completion )
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion )
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z "$PROG" ] && [ ! "$(command -v gitea &> /dev/null)" ] ; then
 | 
				
			||||||
 | 
					  complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete gitea
 | 
				
			||||||
 | 
					elif [ -z "$PROG" ]; then
 | 
				
			||||||
 | 
					  complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete ./gitea
 | 
				
			||||||
 | 
					  complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete "$PWD/gitea"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete "$PROG"
 | 
				
			||||||
 | 
					  unset PROG
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										30
									
								
								contrib/autocompletion/zsh_autocomplete
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								contrib/autocompletion/zsh_autocomplete
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					#compdef ${PROG:=gitea}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Heavily inspired by https://github.com/urfave/cli
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_cli_zsh_autocomplete() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local -a opts
 | 
				
			||||||
 | 
					  local cur
 | 
				
			||||||
 | 
					  cur=${words[-1]}
 | 
				
			||||||
 | 
					  if [[ "$cur" == "-"* ]]; then
 | 
				
			||||||
 | 
					    opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} ${cur} --generate-bash-completion)}")
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} --generate-bash-completion)}")
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ "${opts[1]}" != "" ]]; then
 | 
				
			||||||
 | 
					    _describe 'values' opts
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    _files
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -z $PROG ] ; then
 | 
				
			||||||
 | 
					  compdef _cli_zsh_autocomplete gitea
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  compdef _cli_zsh_autocomplete $(basename $PROG)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
@@ -129,6 +129,16 @@ export GITEA_WORK_DIR=/var/lib/gitea/
 | 
				
			|||||||
cp gitea /usr/local/bin/gitea
 | 
					cp gitea /usr/local/bin/gitea
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Adding bash/zsh autocompletion (from 1.19)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A script to enable bash-completion can be found at [`contrib/autocompletion/bash_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/bash_autocomplete). This can be copied to `/usr/share/bash-completion/completions/gitea`
 | 
				
			||||||
 | 
					or sourced within your `.bashrc`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Similarly a script for zsh-completion can be found at [`contrib/autocompletion/zsh_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/zsh_autocomplete). This can be copied to `/usr/share/zsh/_gitea` or sourced within your
 | 
				
			||||||
 | 
					`.zshrc`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					YMMV and these scripts may need further improvement.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Running Gitea
 | 
					## Running Gitea
 | 
				
			||||||
 | 
					
 | 
				
			||||||
After you complete the above steps, you can run Gitea two ways:
 | 
					After you complete the above steps, you can run Gitea two ways:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -193,3 +193,13 @@ LDFLAGS="-linkmode external -extldflags '-static' $LDFLAGS" TAGS="netgo osusergo
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This can be combined with `CC`, `GOOS`, and `GOARCH` as above.
 | 
					This can be combined with `CC`, `GOOS`, and `GOARCH` as above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Adding bash/zsh autocompletion (from 1.19)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A script to enable bash-completion can be found at [`contrib/autocompletion/bash_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/bash_autocomplete). This should be altered as appropriate and can be `source` in your `.bashrc`
 | 
				
			||||||
 | 
					or copied as `/usr/share/bash-completion/completions/gitea`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Similary a script for zsh-completion can be found at [`contrib/autocompletion/zsh_autocomplete`](https://raw.githubusercontent.com/go-gitea/gitea/main/contrib/autocompletion/zsh_autocomplete). This can be copied to `/usr/share/zsh/_gitea` or sourced within your
 | 
				
			||||||
 | 
					`.zshrc`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					YMMV and these scripts may need further improvement.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.go
									
									
									
									
									
								
							@@ -113,6 +113,8 @@ arguments - which can alternatively be run by running the subcommand web.`
 | 
				
			|||||||
		setFlagsAndBeforeOnSubcommands(&app.Commands[i], defaultFlags, establishCustomPath)
 | 
							setFlagsAndBeforeOnSubcommands(&app.Commands[i], defaultFlags, establishCustomPath)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						app.EnableBashCompletion = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := app.Run(os.Args)
 | 
						err := app.Run(os.Args)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal("Failed to run app with %s: %v", os.Args, err)
 | 
							log.Fatal("Failed to run app with %s: %v", os.Args, err)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user