V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
TIGERB
V2EX  ›  程序员

svn 钩子 hooks 的 pre-commit 怎么配置的啊?

  •  
  •   TIGERB ·
    TIGERB · 2017-02-20 16:01:52 +08:00 · 5774 次点击
    这是一个创建于 2841 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 仓库名/ hooks 目录下增加了 pre-commit 文件, svn 提交的时候没生效啊,求帮助,内容具体如下:

    #!/bin/sh
    
    # PRE-COMMIT HOOK
    #
    # The pre-commit hook is invoked before a Subversion txn is
    # committed.  Subversion runs this hook by invoking a program
    # (script, executable, binary, etc.) named 'pre-commit' (for which
    # this file is a template), with the following ordered arguments:
    #
    #   [1] REPOS-PATH   (the path to this repository)
    #   [2] TXN-NAME     (the name of the txn about to be committed)
    #
    #   [STDIN] LOCK-TOKENS ** the lock tokens are passed via STDIN.
    #
    #   If STDIN contains the line "LOCK-TOKENS:\n" (the "\n" denotes a
    #   single newline), the lines following it are the lock tokens for
    #   this commit.  The end of the list is marked by a line containing
    #   only a newline character.
    #
    #   Each lock token line consists of a URI-escaped path, followed
    #   by the separator character '|', followed by the lock token string,
    #   followed by a newline.
    #
    # The default working directory for the invocation is undefined, so
    # the program should set one explicitly if it cares.
    #
    # If the hook program exits with success, the txn is committed; but
    # if it exits with failure (non-zero), the txn is aborted, no commit
    # takes place, and STDERR is returned to the client.   The hook
    # program can use the 'svnlook' utility to help it examine the txn.
    #
    # On a Unix system, the normal procedure is to have 'pre-commit'
    # invoke other programs to do the real work, though it may do the
    # work itself too.
    #
    #   ***  NOTE: THE HOOK PROGRAM MUST NOT MODIFY THE TXN, EXCEPT  ***
    #   ***  FOR REVISION PROPERTIES (like svn:log or svn:author).   ***
    #
    #   This is why we recommend using the read-only 'svnlook' utility.
    #   In the future, Subversion may enforce the rule that pre-commit
    #   hooks should not modify the versioned data in txns, or else come
    #   up with a mechanism to make it safe to do so (by informing the
    #   committing client of the changes).  However, right now neither
    #   mechanism is implemented, so hook writers just have to be careful.
    #
    # Note that 'pre-commit' must be executable by the user(s) who will
    # invoke it (typically the user httpd runs as), and that user must
    # have filesystem-level permission to access the repository.
    #
    # On a Windows system, you should name the hook program
    # 'pre-commit.bat' or 'pre-commit.exe',
    # but the basic idea is the same.
    #
    # The hook program typically does not inherit the environment of
    # its parent process.  For example, a common problem is for the
    # PATH environment variable to not be set to its usual value, so
    # that subprograms fail to launch unless invoked via absolute path.
    # If you're having unexpected problems with a hook program, the
    # culprit may be unusual (or missing) environment variables.
    #
    # Here is an example hook script, for a Unix /bin/sh interpreter.
    # For more examples and pre-written hooks, see those in
    # the Subversion repository at
    # http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and
    # http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/
    
    
    REPOS="$1"
    TXN="$2"
    
    # Make sure that the log message contains some text.
    SVNLOOK=/usr/local/bin/svnlook
    #$SVNLOOK log -t "$TXN" "$REPOS" | \
    #   grep "[a-zA-Z0-9]" > /dev/null || exit 1
    
    # Check that the author of this commit has the rights to perform
    # the commit on the files and directories being modified.
    # commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
    
    # ./../vendor/squizlabs/PHP_CodeSniffer/scripts/phpcs-svn-pre-commit --standard=PSR1,PSR2 --tab-width=4 "$REPOS" -t "$TXN" >&2 || exit 1
    LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
    if [ "$LOGMSG" -lt 5 ];#要求注释不能少于 5 个字符,您可自定义
    then
      echo -e "\nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2
      exit 1
    fi
    
    
    第 1 条附言  ·  2017-02-20 17:12:32 +08:00
    已解决~ 谢谢 大家~
    6 条回复    2017-02-20 22:13:08 +08:00
    SoloCompany
        1
    SoloCompany  
       2017-02-20 16:54:43 +08:00
    怎么不生效了?另外你要注意 grep 会输出额外的 \n, 也会同时被 wc -c 计算到的
    TIGERB
        2
    TIGERB  
    OP
       2017-02-20 17:12:17 +08:00
    @SoloCompany 搞定了,谢谢~
    xbdsky
        3
    xbdsky  
       2017-02-20 17:14:50 +08:00
    @TIGERB 撸主 windows 服务器钩子可配置过,提交不行?
    TIGERB
        4
    TIGERB  
    OP
       2017-02-20 17:57:52 +08:00
    @xbdsky 没搞过,应该差不多,就是路径应该不一样~
    holy_sin
        5
    holy_sin  
       2017-02-20 19:54:11 +08:00
    这个是用来搞代码 review 的?
    TIGERB
        6
    TIGERB  
    OP
       2017-02-20 22:13:08 +08:00
    @holy_sin 搞代码编码格式自动化检测,哈哈~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2705 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:01 · PVG 17:01 · LAX 01:01 · JFK 04:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.