| #!/bin/sh |
| ##################################################################### |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| ##################################################################### |
| |
| # 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 |
| # /usr/share/subversion/hook-scripts, and in the 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" |
| |
| SVNLOOK=/usr/bin/svnlook |
| # Make sure that the log message contains some text. |
| $SVNLOOK log -t "$TXN" "$REPOS" | \ |
| grep "[a-zA-Z0-9]" > /dev/null || { echo "Warning : can not empty log message ...." >& 2; exit 1; } |
| |
| # Make sure that the log message contains the taskId. |
| $SVNLOOK log -t "$TXN" "$REPOS" | \ |
| grep "[0-9][0-9][0-9][0-9][0-9]" > /dev/null || { echo "Warning: the taskId should contain in the commit message and the format should be 'xxxxx' ...">& 2; exit 1; } |
| |
| # Make sure that the log message contains the used hours. |
| $SVNLOOK log -t "$TXN" "$REPOS" | \ |
| grep "[HRShrs]:[0-9]" > /dev/null || { echo "Warning: the used hours should contain in the commit message and the format should be 'HRS:x' or 'hrs:x' ..." >& 2; exit 1; } |
| |
| # Exit on all errors. |
| set -e |
| |
| # All checks passed, so allow the commit. |
| exit 0 |