From: "Alexey I. Froloff" <raorn@altlinux.org> To: ALT Devel discussion list <devel@lists.altlinux.org> Subject: [devel] git.alt и zsh Date: Mon, 13 Apr 2009 00:22:52 +0400 Message-ID: <20090412202251.GI9102@altlinux.org> (raw) [-- Attachment #1.1: Type: text/plain, Size: 873 bytes --] Здравствуйте, мои юные любители футбола! Сегодня я покажу вам несколько футбольных хитростей, а поможет мне в этом мой шелл zsh. 1. Настраиваем в .ssh/config хост "git.alt" как описано в Руководстве Мантейнера. 2. Кладём в $PATH скрипт "git.alt" следующего содержания: #!/bin/sh exec ssh git.alt "$@" 3. Кладём в $fpath приаттаченый файл. 4. ? 5. PROFIT! Дополняются имена пакетов и тегов из git.alt:packages/ИМЯПАКЕТА.git. Дополняются номера тасков (task ls без --all). "Binary repositories" захардкодены с описаниями (можно доставать через git.alt acl --list, но тогда не будет красивых описаний). НЕ дополняются логины мантейнеров, группы и пакеты в "бинарных репозитариях". Заточено на наличие скрипта (не алиаса) git.alt и хоста git.alt в .ssh/config. Known bugs: криво дополняется acl nmu add/del. -- Regards, Sir Raorn. [-- Attachment #1.2: _git_alt --] [-- Type: text/plain, Size: 7418 bytes --] #compdef git.alt local context state line local curcontext=$curcontext ret=1 declare -A opt_args local -a git_alt_commands local -a git_alt_repositories git_alt_commands=( 'help:show git.alt command reference' 'charset:set default character encoding for repository' 'clone:clone repository' 'find-package:search repository' 'init-db:create new repository' 'ls:list git.alt directory' 'mv-db:rename/move repository' 'quota:show user quota information' 'rm-db:delete repository' 'task:manage tasks' 'build:build package' 'acl:manage package access control lists' ) git_alt_repositories=( 'sisyphus:Sisyphus' '5.0:branch/5.0' '4.1:branch/4.1' '4.0:branch/4.0' ) __git_alt_commands() { _describe -t git.alt-commands 'git.alt command' git_alt_commands && ret=0 } __git_alt_repositories() { _describe -t git.alt-repositories 'binary repository' git_alt_repositories && ret=0 } __git_alt_package_repository() { local -a repos repos=( ${${${${${${${${${(f)"$(_call_program package-repos git.alt ls packages)"}:#total *}##[^ ]## ##}##[^ ]## ##}##[^ ]## ##}##[^ ]## ##}##[^ ]## ##}##[^ ]## ##}%.git} ) _describe -t git.alt-package-repos 'package repository' repos && ret=0 } __git_alt_package_tag() { local -a tags tags=( ${(M)${${${${(f)"$(_call_program package-tags git ls-remote -t git.alt:packages/${words[(( CURRENT - 1 ))]}.git)"}:#*\^\{\}}##* }#refs/tags/}:#*-alt*} ) _describe -t git.alt-package-tags 'tag' tags && ret=0 } __git_alt_task_id() { local -a tasks tasks=(${${${${(f)"$(_call_program tasks git.alt task ls)"}#\#}//:/\\:}/ /:}) _describe -t git.alt-tasks 'task id' tasks && ret=0 } __git_alt_subtask_id() { _guard "[[:digit:]]#" "subtask id" && ret=0 } __git_alt-help() { _message 'no more options' && ret=0 } __git_alt-charset() { _arguments \ ':repository:' \ ':character set:' && ret=0 } __git_alt-clone() { _arguments \ ':source:' \ '::destination:' && ret=0 } __git_alt-find-package() { _arguments \ ':pattern:' && ret=0 } __git_alt-init-db() { _arguments \ ':repository:' && ret=0 } __git_alt-ls() { _arguments \ '::directory:' && ret=0 } __git_alt-mv-db() { _arguments \ ':source:' \ ':destination:' && ret=0 } __git_alt-quota() { _message 'no more options' && ret=0 } __git_alt-rm-db() { _arguments \ ':repository:' && ret=0 } __git_alt-task() { local -a task_commands task_commands=( 'ls:list tasks' 'show:show task' 'new:create task' 'add:add subtask' 'delsub:delete subtask' 'run:run task' 'share:make task shared' 'approve:approve task' 'rm:delete task' ) __git_alt-task-ls() { _arguments \ '(:)--help[show help]' \ '--all[show all tasks]' && ret=0 } __git_alt-task-show() { _arguments \ '(:)--help[show help]' \ '::task id:__git_alt_task_id' && ret=0 } __git_alt-task-new() { _arguments \ '(:)--help[show help]' \ ':binary repository:__git_alt_repositories' && ret=0 } __git_alt-task-add() { local -a task_add_commands task_add_commands=( 'repo:build from git repository' 'del:delete package' 'copy:copy from another repository' ) __git_alt-task-add-repo() { _arguments \ ':package:__git_alt_package_repository' \ ':tag:__git_alt_package_tag' && ret=0 } __git_alt-task-add-del() { _arguments \ ':package:' && ret=0 } __git_alt-task-add-copy() { _arguments \ ':package:' \ '::binary repository:__git_alt_repositories' && ret=0 } _arguments -A -C \ '(:)--help[show help]' \ '::task id:__git_alt_task_id' \ '*::git.alt task add command:->git-alt-task-add-command' && ret=0 case $state in (git-alt-task-add-command) if (( CURRENT == 1 )); then _describe -t git.alt-task-add-commands 'git.alt task add command' task_add_commands && ret=0 else curcontext="${curcontext%:*:*}:git-alt-task-add-$words[1]:" _call_function ret __git_alt-task-add-$words[1] fi ;; esac } __git_alt-task-delsub() { _arguments \ '(:)--help[show help]' \ ':task id:__git_alt_task_id' \ ':subtask id:__git_alt_subtask_id' && ret=0 } __git_alt-task-run() { _arguments \ '(:)--help[show help]' \ '::task id:__git_alt_task_id' && ret=0 } __git_alt-task-share() { _arguments \ '(:)--help[show help]' \ ':task id:__git_alt_task_id' \ ':command:((status\:"show status" enabled\:"share task" disabled\:"unshare task"))' && ret=0 } __git_alt-task-approve() { _arguments \ '(:)--help[show help]' \ ':task id:__git_alt_task_id' \ ':subtask id:__git_alt_subtask_id' && ret=0 } __git_alt-task-rm() { _arguments \ '(- :)--help[show help]' \ '::task id:__git_alt_task_id' && ret=0 } _arguments -A -C \ '(:)--help[show help]' \ '*::git.alt task command:->git-alt-task-command' && ret=0 case $state in (git-alt-task-command) if (( CURRENT == 1 )); then _describe -t git.alt-task-commands 'git.alt task command' task_commands && ret=0 else curcontext="${curcontext%:*:*}:git-alt-task-$words[1]:" _call_function ret __git_alt-task-$words[1] fi ;; esac } __git_alt-build() { _arguments -A -C \ '(- :)--help[show help]' \ '-b[binary repository name]:binary repository:__git_alt_repositories' \ '*::package-or-tag:->package-or-tag' && ret=0 case $state in (package-or-tag) if (( CURRENT % 2 == 0)); then _call_function ret __git_alt_package_tag else _call_function ret __git_alt_package_repository fi ;; esac } __git_alt-acl() { local -a acl_package_commands local -a acl_group_commands local -a acl_commands acl_group_commands=( 'check' 'show' 'add' 'del' 'leader' 'replace' ) acl_package_commands=( 'nmu' ) __git_alt-acl-check() { _message 'no more options' && ret=0 } __git_alt-acl-show() { } __git_alt-acl-add() { _message 'no more options' && ret=0 } _arguments -A -C \ '(- :)--help[show help]' \ '(- :)--list[list repositories]' \ ':binary repository:__git_alt_repositories' \ ':package:' \ '*:git.alt acl command:->git-alt-acl-command' && ret=0 if (( CURRENT == 4 )); then case $words[(( CURRENT - 1 ))] in (@*) acl_commands=( $acl_group_commands ) ;; (*) acl_commands=( $acl_group_commands $acl_package_commands ) ;; esac _describe -t git.alt-acl-commands 'git.alt acl command' acl_commands && ret=0 else curcontext="${curcontext%:*:*}:git-alt-acl-$words[4]:" case $words[4] in (check|show) _message 'no more options' && ret=0 ;; (add|del|leader|replace) _arguments \ '*:login or @group:' && ret=0 ;; (nmu) if (( CURRENT == 5 )); then local -a acl_nmu_commands acl_nmu_commands=( 'show' 'add' 'del' ) _describe -t git.alt-acl-nmu-commands 'git.alt acl nmu command' acl_nmu_commands && ret=0 else curcontext="${curcontext%:*:*}:git-alt-acl-nmu-$words[5]:" case $words[5] in (show) _message 'no more options' && ret=0 ;; (add|del) _arguments \ ':login:' \ ':start date:' \ ':end date:' && ret=0 ;; esac fi ;; esac fi } _arguments \ '*::git.alt command:->git-alt-command' && return case $state in (git-alt-command) if (( CURRENT == 1 )); then __git_alt_commands else curcontext="${curcontext%:*:*}:git-alt-$words[1]:" _call_function ret __git_alt-$words[1] fi ;; esac return ret # vim:set ts=4 sw=4: [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 197 bytes --]
next reply other threads:[~2009-04-12 20:22 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2009-04-12 20:22 Alexey I. Froloff [this message] 2009-04-12 20:26 ` Afanasov Dmitry 2009-04-14 10:11 ` George V. Kouryachy 2009-04-15 17:28 ` Michael Shigorin 2009-04-15 18:27 ` Michael Shigorin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20090412202251.GI9102@altlinux.org \ --to=raorn@altlinux.org \ --cc=devel@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git