Bug 37258

Summary: hsh-install раскрывает имя пакета в каталог
Product: Sisyphus Reporter: Anton Farygin <rider>
Component: hasherAssignee: Dmitry V. Levin <ldv>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: at, glebfm, ldv, legion, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description Anton Farygin 2019-09-23 21:45:35 MSK
$ mkdir dosbox
$ hsh-install dosbox
hsh-install: Insufficient arguments.
Try `hsh-install --help' for more information.

Если каталога dosbox в текущем каталоге нету, то установка идёт нормально.
Comment 1 Dmitry V. Levin 2019-09-23 23:01:14 MSK
Да, это так,
$ hsh --help |grep ^Usage:
Usage: hsh [options] [<path-to-workdir>] <package>...

Может, не очень удобно, но ничего не поделаешь.
Comment 2 Alexey Gladkov 2019-09-24 16:20:16 MSK
(In reply to comment #1)
> Да, это так,
> $ hsh --help |grep ^Usage:
> Usage: hsh [options] [<path-to-workdir>] <package>...
> 
> Может, не очень удобно, но ничего не поделаешь.

Насколько я понимаю hsh-install делается после создания workdir и устанавливается только один пакет. По идее это должно укладываться в usage и скрипт не должен проверять первый аргумент как директорию.

В следующем if-e мы очевидно проходим по "else".

if [ -z "$workdir" ]; then
	# At least two arguments.
	[ "$#" -ge 2 ] || show_usage 'Insufficient arguments.'
else
	# At least one argument.
	[ "$#" -ge 1 ] || show_usage 'Insufficient arguments.'
fi

А вот тут интересно. workdir по умолчанию не пустая. Таким образом мы всегда проверяем первый аргумент.

if [ -z "$workdir" -o -d "${1:-}" ]; then
	set_workdir "${1:-}"
	shift
else
	set_workdir
fi

Дим, почему бы не добавить обработку очевидной ситуации, когда аргумент один ?
Например, так:

workdir_autodetect=1
if [ -z "$workdir" ]; then
	# At least two arguments.
	[ "$#" -ge 2 ] || show_usage 'Insufficient arguments.'
else
	# At least one argument.
	[ "$#" -ge 1 ] || show_usage 'Insufficient arguments.'
	[ "$#" -gt 1 ] || workdir_autodetect=
fi

if [ -n "$workdir_autodetect" ] && [ -d "${1:-}" ]; then
	set_workdir "${1:-}"
	shift
else
	set_workdir
fi
Comment 3 Dmitry V. Levin 2019-09-24 16:26:24 MSK
(In reply to comment #2)
> (In reply to comment #1)
> > Да, это так,
> > $ hsh --help |grep ^Usage:
> > Usage: hsh [options] [<path-to-workdir>] <package>...
> > 
> > Может, не очень удобно, но ничего не поделаешь.
> 
> Насколько я понимаю hsh-install делается после создания workdir и
> устанавливается только один пакет. По идее это должно укладываться в usage и
> скрипт не должен проверять первый аргумент как директорию.

Я не случайно вспомнил про hsh.
Полагаешь, станет лучше, если у hsh и hsh-install будет разная семантика?
Comment 4 Dmitry V. Levin 2019-09-24 16:47:42 MSK
(In reply to comment #3)
> (In reply to comment #2)
> > (In reply to comment #1)
> > > Да, это так,
> > > $ hsh --help |grep ^Usage:
> > > Usage: hsh [options] [<path-to-workdir>] <package>...
> > > 
> > > Может, не очень удобно, но ничего не поделаешь.
> > 
> > Насколько я понимаю hsh-install делается после создания workdir и
> > устанавливается только один пакет. По идее это должно укладываться в usage и
> > скрипт не должен проверять первый аргумент как директорию.
> 
> Я не случайно вспомнил про hsh.
> Полагаешь, станет лучше, если у hsh и hsh-install будет разная семантика?

Или ты предлагаешь каким-нибудь образом распространиить это изменение на все остальные hsh-*?
Comment 5 Alexey Gladkov 2019-09-24 17:02:57 MSK
(In reply to comment #3)
> Я не случайно вспомнил про hsh.
> Полагаешь, станет лучше, если у hsh и hsh-install будет разная семантика?

Я не вижу в этом плохого. Это разные утилиты хоть и связанные. У них уже несколько разная семантика т.к. hsh требует, чтобы все аргументы присутствовали на файловой системе, а hsh-install нет. Мы просто уточняем поведение с единственным аргументом.

(In reply to comment #4)
> Или ты предлагаешь каким-нибудь образом распространиить это изменение на все
> остальные hsh-*?

Я думал об этом т.к. в hsh есть очень похожий код поиска workdir, но не стал предлагать т.к. у остальных утилит нет таких проблем поскольку у них workdir это один опциональный аргумент.

Это разумно разве что в hsh-run.