Подверсия много рычаг постфиксации контроля?

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

SVN repo местоположение:/home/flx/svn/flxdev SVN repo "flxdev" структура:

 + Project1
 ++ files
 + Project2
 + Project3
 + Project4

Я пытаюсь настроить рычаг постфиксации, который автоматически проверяет на другой конец, когда я делаю фиксацию.

Документ постфиксации явно перечисляет следующее:

# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit.  Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the number of the revision just committed)

Таким образом, я сделал следующую команду для тестирования:

REPOS="$1"
REV="$2"
echo "Updated project $REPOS to $REV"

Однако, когда я редактирую файлы в Project1, например, это производит "Обновленный проект/home/flx/svn/flxdev к 1 016"

Я хотел бы, чтобы это было: "Обновленный проект Project1 к 1 016"

Наличие этой переменной позволяет мне указывать, чтобы сделать различные действия на постфиксацию проекта. Как я могу указать параметр проекта?

Спасибо!

Dennis

2
задан 22.12.2010, 20:55

1 ответ

Следующее могло бы сделать то, что Вы хотите:

#!/bin/bash

REPOS="$1"
REV="$2"

echo In revision $REV, the following projects were changed:
svnlook dirs-changed "$REPOS" --revision "$REV" \ 
    | sed 's%/.*%%' \
    | sort -u \
    | while read PROJ ; do
          echo "$PROJ"
      done

Объяснение того, что продолжается, в случае, если Вы не слишком знакомы со сценариями оболочки:

  • мы используем svnlook получить список каталогов, которые были изменены
  • мы используем sed обрубить первое"/"и все после него - таким образом, у нас затем есть список названий проекта, возможно с дубликатами.
  • мы используем sort -u ("вид, уникальный") для устранения дубликатов
  • один за другим мы читаем каждое имя в $PROJ и делаем что-то с ним.

Можно заменить echo "$PROJ" строка с тем, что Вы хотите сделать с названием проекта. Если несколько проектов были изменены в той же фиксации, независимо от того, что Вы помещаете, там будет выполнен однажды для каждого измененного проекта, с набором $PROJ соответственно.

Этот сценарий не покажет, были ли файлы добавлены к корню репозитория, но если каталоги были добавлены, они обнаружатся в списке измененных проектов. Если Вы хотите, чтобы корень был перечислен также, можно заменить следующей sed строкой, и это обнаружится как "/". Если Вы делаете это, осторожны, Вы не проверяете весь репозиторий случайно!

...
    | sed '/^\/$/!s%/.*%%' \
...
1
ответ дан 12.12.2019, 00:20

Теги

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