Subversion 多重签出后提交钩子?

Subversion 多重签出后提交钩子?

标题听起来可能很奇怪,但我正在尝试实现以下目标:

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 更新至 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%/.*%%' \
...

相关内容