1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-11-16 00:56:12 +01:00
github.com_openSUSE_osc/contrib/osc.zsh
Björn Bidar dc5eae0a09 Import zsh completition made by Holger Macht
Right now the zsh completition is packaged inside the zsh package on
OpenSUSE.
Several distributions either package it or the user has to import it
themselves.

It is better if it is stored here so any can pick it up in there zsh
package and put fixes in here.

The file was imported from the OpenSUSE zsh package plus a few spelling fixes.

Signed-off-by: Björn Bidar <bjorn.bidar@jolla.com>
2023-09-09 01:57:29 +03:00

150 lines
4.0 KiB
Bash

#compdef osc
#
# Copyright (C) 2009,2010 Holger Macht <holger@homac.de>
#
# This file is released under the GPLv2.
#
# Based on the zsh guide from http://zsh.dotsrc.org/Guide/zshguide06.html
#
# Toggle verbose completions: zstyle ':completion:*:osc:*' verbose no
# zstyle ':completion:*:osc-subcommand:*' verbose no
#
# Use the variables $ZSH_OSC_BUILD_TARGETS_EXTRA and $ZSH_OSC_PROJECTS_EXTRA to
# extend the list of possible completions in your ~/.zshrc like that:
# export OSC_PROJECTS_EXTRA="Base:System Base:shells"
#
# version 0.2
#
OSC_BUILD_TARGETS="openSUSE_13.1 openSUSE_13.2 openSUSE_Tumbleweed openSUSE_Factory SLE_11_SP3 SLE_12"
OSC_PROJECTS="openSUSE:Factory openSUSE:Tumbleweed openSUSE:13.2 openSUSE:13.1"
# user defined variables $OSC_BUILD_TARGETS_EXTRA and
# $OSC_PROJECTS_EXTRA can add to the project/build target list
OSC_BUILD_TARGETS="$OSC_BUILD_TARGETS $ZSH_OSC_BUILD_TARGETS_EXTRA"
OSC_PROJECTS="$OSC_PROJECTS $ZSH_OSC_PROJECTS_EXTRA"
# Main dispatcher
_osc() {
if (( CURRENT > 2 )) && [[ ${words[2]} != "help" ]]; then
# Remember the subcommand name
local cmd=${words[2]}
# Set the context for the subcommand.
curcontext="${curcontext%:*:*}:osc-subcommand"
# Narrow the range of words we are looking at to exclude `osc'
(( CURRENT-- ))
shift words
# Run the completion for the subcommand
if [ "$cmd" = "submitreq" -o "$cmd" = "sr" ]; then
_osc_cmd_submitreq
elif [ "$cmd" = "getbinaries" ]; then
_osc_cmd_getbinaries
elif [ "$cmd" = "checkout" -o "$cmd" = "co" -o "$cmd" = "branch" ]; then
_osc_cmd_checkout
elif [ "$cmd" = "buildlog" -o "$cmd" = "buildinfo" -o "$cmd" = "bl" ]; then
_osc_cmd_buildlog
else
_osc_cmd_do $cmd
fi
else
local hline
local -a cmdlist
local tag=0
_call_program help-commands osc help | while read -A hline; do
# start parsing with "commands:"
[[ $hline[1] = "commands:" ]] && tag=1
# stop parsing at the line starting with "For"
[[ $hline[1] = "For" ]] && tag=0
[[ $tag = 0 ]] && continue
# all commands have to start with lower case letters
[[ $hline[1] =~ ^[A-Z] ]] && continue
(( ${#hline} < 2 )) && continue
# ${hline[1]%,} truncates the last ','
cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
done
_describe -t osc-commands 'osc command' cmdlist
fi
}
_osc_cmd_getbinaries() {
_arguments \
'1:PROJECT:( `echo $OSC_PROJECTS` )' \
'2:PACKAGE:(PACKAGE)' \
'3:REPOSITORY:( `echo $OSC_BUILD_TARGETS` )' \
'4:ARCHITECTURE:(i586 x86_64)'
}
_osc_cmd_checkout() {
_arguments \
'1:PROJECT:( `echo $OSC_PROJECTS` )' \
'2:PACKAGE:(PACKAGE)'
}
_osc_cmd_buildlog() {
_arguments \
'1:REPOSITORY:( `echo $OSC_BUILD_TARGETS` )' \
'2:ARCHITECTURE:(i586 x86_64)'
}
_osc_cmd_submitreq() {
local hline
local -a cmdlist
local tag=0
_call_program help-commands osc help $cmd | while read -A hline; do
# start parsing from "usage:"
[[ $hline[1] = "usage:" ]] && tag=1
[[ $tag = 0 ]] && continue
if [[ $hline[1] =~ ^osc ]]; then
shift hline; shift hline
elif ! [[ $hline[1] =~ ^- ]]; then
# Option has to start with a '-' or 'osc submitrequest'
continue
fi
(( ${#hline} < 2 )) && continue
cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
done
_describe -t osc-commands 'osc command' cmdlist
}
_osc_cmd_do() {
local hline
local -a cmdlist
local tag=0
# only start completion if there's some '-' on the line
if ! [ "$words[2]" = "-" ]; then
_complete
return
fi
_call_program help-commands osc help $cmd | while read -A hline; do
# start parsing from "Options:"
[[ $hline[1] = "Options:" ]] && tag=1
[[ $tag = 0 ]] && continue
# Option has to start with a '-'
[[ $hline[1] =~ ^- ]] || continue
(( ${#hline} < 2 )) && continue
cmdlist=($cmdlist "${hline[1]%,}:${hline[2,-1]}")
done
if [ -n "$cmdlist" ]; then
_describe -t osc-commands 'osc command' cmdlist
else
_complete
fi
}
# Code to make sure _osc is run when we load it
_osc "$@"