* [devel] git.alt и zsh
@ 2009-04-12 20:22 Alexey I. Froloff
2009-04-12 20:26 ` Afanasov Dmitry
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Alexey I. Froloff @ 2009-04-12 20:22 UTC (permalink / raw)
To: ALT Devel discussion list
[-- 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 --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [devel] git.alt и zsh
2009-04-12 20:22 [devel] git.alt и zsh Alexey I. Froloff
@ 2009-04-12 20:26 ` Afanasov Dmitry
2009-04-14 10:11 ` George V. Kouryachy
2009-04-15 18:27 ` Michael Shigorin
2 siblings, 0 replies; 5+ messages in thread
From: Afanasov Dmitry @ 2009-04-12 20:26 UTC (permalink / raw)
To: ALT Linux Team development discussions
13.04.09, Alexey I. Froloff<raorn@altlinux.org> написал(а):
> Здравствуйте, мои юные любители футбола! Сегодня я покажу вам
> несколько футбольных хитростей, а поможет мне в этом мой шелл
> zsh.
от спасибо, мил-человек!
--
С уважением
Афанасов Дмитрий
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [devel] git.alt и zsh
2009-04-12 20:22 [devel] git.alt и zsh Alexey I. Froloff
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
2 siblings, 1 reply; 5+ messages in thread
From: George V. Kouryachy @ 2009-04-14 10:11 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Mon, Apr 13, 2009 at 12:22:52AM +0400, Alexey I. Froloff wrote:
> Дополняются имена пакетов и тегов из
> git.alt:packages/ИМЯПАКЕТА.git. Дополняются номера тасков (task
> ls без --all). "Binary repositories" захардкодены с описаниями
> (можно доставать через git.alt acl --list, но тогда не будет
> красивых описаний). НЕ дополняются логины мантейнеров, группы и
> пакеты в "бинарных репозитариях". Заточено на наличие скрипта
> (не алиаса) git.alt и хоста git.alt в .ssh/config.
Ждём ебил^W пакета! Майнтейнить вечно изменяющееся смысловое
пространство git.alt проще через пакет, а не путём обмена ленточ^W
элкетронными письмами.
--
George V. Kouryachy (aka Fr. Br. George)
mailto:george at altlinux_org
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [devel] git.alt и zsh
2009-04-12 20:22 [devel] git.alt и zsh Alexey I. Froloff
2009-04-12 20:26 ` Afanasov Dmitry
2009-04-14 10:11 ` George V. Kouryachy
@ 2009-04-15 18:27 ` Michael Shigorin
2 siblings, 0 replies; 5+ messages in thread
From: Michael Shigorin @ 2009-04-15 18:27 UTC (permalink / raw)
To: ALT Devel discussion list
On Mon, Apr 13, 2009 at 12:22:52AM +0400, Alexey I. Froloff wrote:
> 1. Настраиваем в .ssh/config хост "git.alt" как описано в
> Руководстве Мантейнера.
done
> 2. Кладём в $PATH скрипт "git.alt" следующего содержания:
> #!/bin/sh
> exec ssh git.alt "$@"
done, и на всякий chmod +x
> 3. Кладём в $fpath приаттаченый файл.
done (в /usr/share/zsh/Completion/ALT/), и на всякий
sudo chmod 644
> 4. ?
На всякий запускаем новый zsh и пробуем радоваться жизни.
Вот здесь я и задумался: git.alt he<tab> ничего не делает.
> 5. PROFIT!
А если клиенты не звонят, в смысле, не комплитится git.alt?
--
---- WBR, Michael Shigorin <mike@altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-04-15 18:27 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-12 20:22 [devel] git.alt и zsh Alexey I. Froloff
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
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