постановка задачи: хочется выдрать патч из коммита, помеченного тегом: diff: systemffi-upstream-patch^:. systemffi-upstream-patch:. name=@name@-systemffi.patch Однако это запрещено и приходится делать так: diff: bb2f69941fe898bfaabe1916fcad42841a6046fe:. systemffi-upstream-patch:. name=@name@-systemffi.patch Можно разрешить "шапочку" в tree-ish-полях gear-rules?
(In reply to comment #0) > постановка задачи: > хочется выдрать патч из коммита, помеченного тегом: > > diff: systemffi-upstream-patch^:. systemffi-upstream-patch:. > name=@name@-systemffi.patch > > Однако это запрещено и приходится делать так: > > diff: bb2f69941fe898bfaabe1916fcad42841a6046fe:. systemffi-upstream-patch:. > name=@name@-systemffi.patch > > Можно разрешить "шапочку" в tree-ish-полях gear-rules? Теоретически можно разрешить и более сложные конструкции, описанные в git-rev-parse(1), поскольку они не нарушают концепцию однозначной определённости коммита. Другое дело, что я не вижу в этом смысла, ведь всегда можно изготовить нужный тэг.
Добавить конструкции из git-rev-parse(1) мне больше нравится. Делать дополнительные теги для правил как-то неправильно... Дим, перебрасывай на меня. Я попробую сделать.
(In reply to comment #2) > Добавить конструкции из git-rev-parse(1) мне больше нравится. Делать > дополнительные теги для правил как-то неправильно... Я исхожу из того, что мне эти конструкции ни разу ещё не понадобились. > Дим, перебрасывай на меня. Я попробую сделать. OK
Реализовал у себя в бранче refs/heads/gear-update-tag. ildar@ можете протестировать и подтвердить ? Если исправления устраивают, то переложу в gear-next. http://git.altlinux.org/people/legion/packages/gear.git?p=gear.git;a=shortlog;h=refs/heads/gear-update-tag
Алексей, простите, долго не доходили руки. Сегодня протестировал - работает. Спасибо большое.
Если речь идёт о http://git.altlinux.org/people/legion/packages/gear.git?p=gear.git;a=commitdiff;h=a9a2ddf120c3a26dc35819da3b56d9179dcfe2ed - такая реализация не годится, поскольку git rev-parse --verify проверяет не только синтаксис, а и наличие соответствующих имён в текущем репозитории; в исходной реализации этого не требовалось. Т.е., раньше было можно вызвать сборку для тега $tag из репозитория $repo следующим образом: cd $tmpdir git init sha1=$(git ls-remote $repo $tag | cut -f1) git fetch $repo $tag gear -t $sha1 $gear_options (т.е., в отдельном репозитории, в котором присутствует указанный объект со всеми объектами, на которые он ссылается, но без .git/refs/*). Использование git rev-parse --verify для проверки имён тегов вносит зависимость от содержимого .git/refs/ (а в некоторых случаях и от .git/logs/). Кроме того, в версии 47c6cb4a7081203474986ce3bcfd44674e4b1fe1 по той же причине сломаны конструкции вида tar: @name@-@version@:. (функция check_tag_name при чтении .gear/tags вызывается до раскрытия @...@).
На своей реализации я и не настаиваю :) Просто тебя давно видно не было, а проблема висит. P.S. Раз уж ты добрался до gear-update-tag, очень прошу, посмотри на #16075 и дай свою резолюцию.
Сергей, напишешь свою реализацию для исправления этого бага ?
Коллеги, есть силы для второго подхода?