ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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-14 10:11 ` George V. Kouryachy
@ 2009-04-15 17:28   ` Michael Shigorin
  0 siblings, 0 replies; 5+ messages in thread
From: Michael Shigorin @ 2009-04-15 17:28 UTC (permalink / raw)
  To: ALT Linux Team development discussions

On Tue, Apr 14, 2009 at 02:11:31PM +0400, George V. Kouryachy wrote:
> Майнтейнить вечно изменяющееся смысловое пространство git.alt
> проще через пакет

Эээ... (не найдя в $fpath $HOME) так точно -- FR: в новой упаковке

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ 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