2009-10-28 4 views
1

Я ищу способ сделать следующее либо на pre-commit или post-commit, либо любым другим способом.Subversion: Как добавить текст в каждый зафиксированный файл?

Вот что мне нужно работать

  1. Пользователь совершает файл
  2. бежит что-то (крюк или что-то еще)
  3. что-то еще из # 2 должен добавляемых статический текст в файл совершаются

Основываясь на этом http://subversion.open.collab.net/ds/viewMessage.do?dsForumId=3&dsMessageId=296576 я вижу, что это не Рекомендова d, но должен быть способ добавить текст в файл при каждой фиксации.

Операционная система: Направлено Os

Причина, почему мне это нужно: защитить все файлы кода, вставив юридические уведомления

+0

Что ОС Subversion работает на вас? – Buggabill

+2

Мне интересно: какова цель всего этого? – jldupont

+0

Теперь, когда это упоминается, это кажется немного странным ... – Buggabill

ответ

2

До сих пор единственным возможным решением является использование на стороне клиента крючки из TortoiseSVN:

Inserting comments automatically using TortoiseSVN?

К сожалению, это ограничивает разработчиков использовать только TortoiseSVN. Использование плагинов Visual Studio, например, не будет работать :(

Если кто-то находит какой-либо централизованный способ, как это сделать, пожалуйста, пост здесь.

+0

Я только что добавил тег torotoisesvn, поскольку он специфичен для клиента.Отличный ответ [+1] ;-) – jdehaan

-1

Вы можете установить крюк на сервере SVN, который будет выполнять сценарий и может добавить информацию в файл и т.д.

Там крошечный бит информации здесь: http://svnbook.red-bean.com/en/1.4/svn.ref.reposhooks.post-commit.html

Итак, почему на Земле вы хотели бы это сделать?

+0

, это невозможно в соответствии с этим «Квест после фиксации запускается только после завершения фиксации - , то есть после того, как он уже был «проверен». Такой крючок не получил бы надежды на модификацию файла «совершается». Захватывающие крючки * до того, как * финал завершен, являются start-commit (что происходит слишком рано, чтобы знает, что изменяется в фиксации) и pre-commit (что происходит сразу после того, как все изменения отправлены на сервер, и сразу до того, как эти изменения будут завершены в следующую ревизию репозитория. » – Chicago

8

В соответствии с этой веткой вы можете сделать это с помощью привязки до фиксации, но это будет Bad Thing ™ Если вы абсолютно должны иметь статический текст в файле, было бы лучше, если бы разработчики разместили текст в , а затем используйте крюк предварительной фиксации, чтобы убедиться, что он был там. Если статический текст не существует или неверен, вы отклоняете фиксацию.

10

Посмотрите на красном поле в конце this chapter книги SVN:

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

Я подписываюсь на POV, что текст в красных ящиках следует воспринимать серьезно.

+0

Да, возможно уведомить пользователя о том, что lega l необходимо добавить вручную, а затем принять фиксацию. Теперь, что, если вы совершаете 100 файлов? Пользователь должен вручную добавить юридические уведомления ко всем файлам :( – Chicago

+3

Предоставьте им скрипт, чтобы сделать это на своих машинах, прежде чем они снова попытаются проверить. (Но потом я подозреваю, что если вы создаете сразу 100 исходных файлов, добавьте юридическое уведомление - это наименьшее из ваших проблем. В конце концов, они должны быть заполнены чем-то стоящим, чтобы его проверить!) – sbi

0

Как насчет работы по этому другому пути - используйте робота. Это немного больше работы, но в основном: принять фиксацию в репозиторий без необходимого юридического раздела и запустить робот, чтобы он выглядел (или периодически смотрел робот).

Затем робот выполняет проверку/обновление файлов, которые он выполняет, проверяет их политику и юридические уведомления, автоматически добавляет все, что ему нужно, а затем проверяет изменения. Таким образом, тайники subversion счастливы, а юридические уведомления находятся во всех файлах. Развертывание приведет к изменению изменений следующего цикла обновления/фиксации так же, как и любые другие изменения. Вы даже можете, чтобы робот автоматически обновлял юридический раздел с последним определением, в зависимости от того, насколько вы его сложны.

Возможно, вы сможете использовать что-то вроде Hudson для размещения этого в пригодном для использования фреймворке.

+0

Это интересно. Расскажите мне больше. У вас есть примеры? Также, вот что я боюсь. Если у разработчика есть 100 файлов, у которых нет законных уведомлений, тогда робот пойдет и обновит эти файлы с помощью юридических уведомлений и фиксации. После этого разработчику придется решать 100 конфликтов слияния, верно? – Chicago

+0

Нет примеров, мне не приходилось делать что-либо подобное раньше, но это не было бы иначе, чем сборка CI, просто с помощью скрипта, который просматривает файлы, а не создает их. Да, конфликты должны быть решены, но это было бы ничем иным, ни более сложным, чем если бы вы прошли и добавили юридические уведомления самостоятельно. SVN должен иметь возможность объединить большинство этих изменений автоматически. –