Хук Subversion multi checkout post-commit?

Хук Subversion multi checkout post-commit?

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

Расположение репозитория SVN: /home/flx/svn/flxdev Структура репозитория SVN "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 до версии 1016"

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

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

Спасибо!

Деннис

решение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%/.*%%' \
...

Связанный контент