Как я могу автоматически обновить $VERSION модулей Perl с Мерзавцем?

Я дал бы, Механизируют ( http://wwwsearch.sourceforge.net/mechanize/ ) выстрел. Это может обработать Ваш cookie/заголовки прозрачно.

23
задан Nikolai Prokoschenko 3 January 2010 в 01:59
поделиться

4 ответа

Забудьте, что Perl Best Practices говорит. Это не библия, и она просто предлагает использовать ключевые слова RCS, потому что в то время, когда она была написана, никто не думал о других системах контроля версий. Ваша цель никогда не должна заключаться в соблюдении конкретной реализации PBP, а в адаптации идей в PBP к вашей собственной ситуации. Не забудьте прочитать первую главу этой книги.

Во-первых, давайте исправим ваши предположения:

  1. Вам не нужна отдельная версия для каждого модуля в дистрибутиве. Вам нужно только предоставить каждому файлу модуля версию, отличную от версии в предыдущих дистрибутивах. Каждый модуль в дистрибутиве может иметь одну и ту же версию, и когда они это сделают, все они могут быть лучше, чем версия из последнего дистрибутива.

  2. Почему бы не изменить версии быстро меняющегося модуля вручную? Вы должны определить точки, в которых ваш код станет чем-то, что люди смогут использовать. В эти моменты вы делаете что-то, чтобы сказать, что вы приняли решение распространять свой рабочий продукт, будь то тестовый или стабильный выпуск. Вы меняете версии, чтобы рассказать людям что-то о своем развитии. Когда вы позволяете системе управления версиями делать это только потому, что вы совершаете коммит, вы теряете шанс обозначить циклы в вашей разработке. Например, я обычно использую двухместные второстепенные релизы. Это означает, что я получаю 100 выпусков до того, как сортировка выйдет из строя, и мне нужно поднять основную версию, чтобы восстановить правильный порядок сортировки. Который' Недостаточно места для версии, если я позволю VCS справиться с этим за меня.

Я использовал ключевые слова RCS, чтобы связывать версии моих модулей с их номером проверки или ревизии, но мне это никогда не нравилось. Я делаю много коммитов в файл, прежде чем он будет готов к следующей версии, и мне не нужно изменять $ VERSION только потому, что я исправил опечатку в документации. Были бы большие скачки в номерах версий, потому что я сделал много небольших изменений.

Теперь я просто меняю версии всех своих файлов модулей, когда я готов выпустить новый дистрибутив. Я использую ppi_version для изменения всех версий сразу:

ppi_version change 1.23 1.24

Все мои файлы модулей получают одинаковую $ VERSION . Мне не нужно использовать $ VERSION , чтобы различать их, потому что я использую для этого обычные функции управления версиями. Я не не требуется $ VERSION , чтобы связать его с конкретным коммитом.

Если я работаю над новым дистрибутивом, начиная с версии 1.23, я начинаю создавать разрабатываемые версии 1.23_01, 1.23_02 и т. только когда я буду готов позволить людям попробовать эти версии. Я меняю версию в начале цикла, а не в конце. У всех моих коммитов, ведущих к следующему выпуску, уже есть следующая версия. Я также делаю заметки о том, чего я хочу достичь в этом цикле.

Когда я думаю, что это начало нового цикла, я снова добавляю версию. Когда мне кажется, что у меня есть стабильная версия, я меняю разработку $ VERSION на стабильную, например с 1.23_04 на 1.24. Каждый раз, когда я что-то выпускаю, я тоже помечаю это в системе контроля версий. Я довольно легко вижу, где мои основные моменты разработки совпадают с контролем версий.

Мне так все намного проще. Ничто не связано с исходным элементом управления, который я решил использовать, поэтому мне не нужно все переделывать, если я изменю то, что использую.

20
ответ дан 29 November 2019 в 02:46
поделиться

Я бы выбрал версии вручную при внесении несовместимых изменений, потому что, конечно, не каждое изменение оправдывает повышение.

Вы также можете проверить ' gitattributes 'справочную страницу для атрибута filter - возможно, вы захотите ввести свой собственный фильтр для выполнения подстановок на основе автоматического вывода' git describe ».

3
ответ дан 29 November 2019 в 02:46
поделиться

Что вы используете для сборки модуля Perl?

Решение, используемое ядром Linux и самим проектом Git, заключается в замене «++ VERSION ++» (или «++ PROJECT_VERSION ++», или «@@ PROJECT_VERSION @@ ") заполнители системой сборки , в данном случае Makefile. (В файлах на C это делается путем определения константы препроцессора PROJECT_VERSION через ' -DPROJECT_VERSION = $ ( PROJECT_VERSION) 'передана компилятору). В вашем случае это, вероятно, будет что-то вроде Module :: Install , Module :: Build или ExtUtils :: MakeMaker .

Оба ядра Git и Linux используют этот сценарий GIT-VERSION-GEN , который:

  1. использует git describe , если проект создается из репозитория git ,
  2. возвращается к файлу версии (или VERSION , или GIT-VERSION-FILE ), если сборка выполняется из моментального снимка (этот файл создается, когда создание снимка / архива),
  3. и, наконец, возвращается к заранее определенному номеру версии, который обновляется в фиксации, которая отмечает новую выпущенную версию (например, cb572206 фиксация в репозитории git, также известная как фиксация v1.6.4.4 ).

Надеюсь, это поможет вам.

3
ответ дан 29 November 2019 в 02:46
поделиться

Как насчет чего-то действительно ленивого, только немного беспорядочного:

Вы могли бы написать маленькую оболочку для git-add . Перед вызовом git-add оболочка подтолкнет номер версии где-нибудь в модуле, где его можно найти с помощью простого регулярного выражения.

Обновление:

Я в настоящее время не использую что-то подобное. , но я серьезно об этом думаю.

Мое текущее рассуждение:

  • В отличие от CVS или subversion, git ничего не знает о номерах версий или ревизий.
  • Драйверы фильтров должны иметь другой источник информация, чтобы иметь возможность вставить номер версии, и этот источник должен быть доступен на машине любого из вовлеченных разработчиков.
  • Таким образом, лучшим источником для номера версии является сам версионный файл.
  • А чтобы сам файл можно было использовать в качестве источника для следующего номера версии, номер версии должен быть частью соответствующего git blob.

Преимущества:

  • Это настолько же автоматическое, насколько и возможно. невозможно забыть обновить номер версии.
  • Плавный переход с CVS / SVN на git. Каждый коммит представляет новую версию.

Недостатки:

  • Ленивый разработчик, который всегда выполняет git add. подталкивает номера версий файлов, которые он не трогал.
  • Кажется, нет для принудительного использования сценария-оболочки.
0
ответ дан 29 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: