Subversion 多重簽出提交後掛鉤?

Subversion 多重簽出提交後掛鉤?

標題聽起來一定很奇怪,但我正在努力實現以下目標:

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

如果您不太熟悉 shell 腳本,請解釋一下正在發生的事情:

  • 我們用來svnlook取得已更改的目錄列表
  • 我們通常sed會砍掉第一個「/」及其後的所有內容——這樣我們就有了一個項目名稱列表,可能有重複的項目名稱。
  • 我們使用sort -u(“排序唯一”)來消除重複項
  • 我們將每個名稱一一讀入 $PROJ 並對其進行處理。

您可以將該echo "$PROJ"行替換為您想要對項目名稱執行的任何操作。如果在同一提交中更改了多個項目,則您放置的任何內容都會為每個更改的項目運行一次,並適當地設定 $PROJ。

該腳本不會顯示檔案是否已新增至儲存庫的根目錄,但如果新增了目錄,它們將顯示在修改的項目清單中。如果您也希望列出根目錄,可以取代以下 sed 行,它將顯示為「/」。如果您這樣做,請小心不要意外檢查整個儲存庫!

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

相關內容