2

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

Расположение репозитория SVN: /home /flx /svn /flxdev Структура репозитория SVN "flxdev":

 + Project1
 ++ files
 + Project2
 + Project3
 + Project4

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

Документ post-commit явно указывает следующее:

# 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 до 1016»

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

Наличие этой переменной позволяет мне определять выполнение различных действий для каждого пост-коммита проекта. Как я могу указать параметр проекта?

Спасибо!

Деннис

1 ответ1

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 ("sort Unique") для устранения дубликатов
  • одно за другим мы читаем каждое имя в $ PROJ и что-то делаем с ним.

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

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

...
    | sed '/^\/$/!s%/.*%%' \
...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .