On Sun, Sep 24, 2006 at 11:14:10PM +0400, Sergey Vlasov wrote: > On Sat, Sep 23, 2006 at 07:54:46PM +0400, Dmitry V. Levin wrote: > > По моему, идея выглядит вполне живой. > > Не вполне доделанная реализация выложена в > git.alt:vsu/packages/gear.git в бранч vsu/gear-tags; сейчас это > годится только для того, чтобы обругать. Средства для обновления > .gear-tags, кроме /dev/hands, пока отсутствуют. Без описания никто даже смотреть не хочет? Сейчас там сделано вот что: - Опция "-t ID" у gear теперь требует параметр в виде COMMIT[:PATH] (указание только объекта tree недостаточно - требуется ещё идентификатор соответствующего объекта commit). Объект COMMIT используется при проверке допустимости ссылок на другие объекты. - Добавлена новая директива для .gear-rules: tags: PATH В параметре указывается путь к файлу тегов. При отсутствии этой директивы файл тегов ищется под именем ".gear-tags". - Файл тегов состоит из строк в формате: SHA1 NAME Поддержки комментариев сейчас нет (и нужна ли она там?). - Для директив tar* доступна новая опция: tree=COMMIT[:PATH] При этом COMMIT может указываться в виде либо значения SHA-1, либо имени, присутствующего в файле тегов. В значении опции могут использоваться элементы @name@, @version@, @release@, которые заменяются на соответствующую информацию, полученную из spec-файла. - Допустимость значений SHA1, указанных в файле тегов, сейчас проверяется по мере их использования; в принципе можно сделать и принудительную проверку всех SHA1 при обнаружении файла тегов. Утилита для обновления .gear-tags всё ещё не написана, её использование видится примерно таким: gear-update-tag [-r RULES] TAG [VALUE] В текущем каталоге ищется файл RULES (либо .gear-rules), по содержимому файла определяется имя файла тегов (либо используется файл .gear-tags). В файл тегов добавляется новая запись (либо заменяется существующая) с именем TAG и значением SHA1, соответствующее коммиту VALUE (либо коммиту, на который указывает TAG в текущем репозитории). gear-update-tag [-r RULES] --all Для всех тегов, использующихся в файле правил, в файл тегов добавляются записи, соответствующие текущему состоянию тегов в репозитории. gear-update-tag [-r RULES] --clean Из файла тегов удаляются записи, не используемые в файле правил. Во всех вариантах вызова gear-update-tag будут использоваться файлы из рабочей копии, а не из репозитория. Вероятно, при проверке допустимости использования коммитов, помимо HEAD, стоит заглядывать и в $GIT_DIR/MERGE_HEAD (на случай, если кто-то решил совместить merge с обновлением файла тегов). (Кстати, сейчас gear --commit портит MERGE_HEAD - можно попробовать этого избежать, если вместо git-commit использовать напрямую git-update-index, git-write-tree, git-commit-tree.)