Revision 2103
Added by Dietmar about 10 years ago
locks/db.lock | ||
---|---|---|
1 |
This file is not used by Subversion 1.3.x or later. |
|
2 |
However, its existence is required for compatibility with |
|
3 |
Subversion 1.2.x or earlier. |
locks/db-logs.lock | ||
---|---|---|
1 |
This file is not used by Subversion 1.3.x or later. |
|
2 |
However, its existence is required for compatibility with |
|
3 |
Subversion 1.2.x or earlier. |
README.txt | ||
---|---|---|
1 |
This is a Subversion repository; use the 'svnadmin' and 'svnlook' |
|
2 |
tools to examine it. Do not add, delete, or modify files here |
|
3 |
unless you know how to avoid corrupting the repository. |
|
4 |
|
|
5 |
Visit http://subversion.apache.org/ for more information. |
hooks/post-commit.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# POST-COMMIT HOOK |
|
4 |
# |
|
5 |
# The post-commit hook is invoked after a commit. Subversion runs |
|
6 |
# this hook by invoking a program (script, executable, binary, etc.) |
|
7 |
# named 'post-commit' (for which this file is a template) with the |
|
8 |
# following ordered arguments: |
|
9 |
# |
|
10 |
# [1] REPOS-PATH (the path to this repository) |
|
11 |
# [2] REV (the number of the revision just committed) |
|
12 |
# [3] TXN-NAME (the name of the transaction that has become REV) |
|
13 |
# |
|
14 |
# The default working directory for the invocation is undefined, so |
|
15 |
# the program should set one explicitly if it cares. |
|
16 |
# |
|
17 |
# Because the commit has already completed and cannot be undone, |
|
18 |
# the exit code of the hook program is ignored. The hook program |
|
19 |
# can use the 'svnlook' utility to help it examine the |
|
20 |
# newly-committed tree. |
|
21 |
# |
|
22 |
# On a Unix system, the normal procedure is to have 'post-commit' |
|
23 |
# invoke other programs to do the real work, though it may do the |
|
24 |
# work itself too. |
|
25 |
# |
|
26 |
# Note that 'post-commit' must be executable by the user(s) who will |
|
27 |
# invoke it (typically the user httpd runs as), and that user must |
|
28 |
# have filesystem-level permission to access the repository. |
|
29 |
# |
|
30 |
# On a Windows system, you should name the hook program |
|
31 |
# 'post-commit.bat' or 'post-commit.exe', |
|
32 |
# but the basic idea is the same. |
|
33 |
# |
|
34 |
# The hook program typically does not inherit the environment of |
|
35 |
# its parent process. For example, a common problem is for the |
|
36 |
# PATH environment variable to not be set to its usual value, so |
|
37 |
# that subprograms fail to launch unless invoked via absolute path. |
|
38 |
# If you're having unexpected problems with a hook program, the |
|
39 |
# culprit may be unusual (or missing) environment variables. |
|
40 |
# |
|
41 |
# Here is an example hook script, for a Unix /bin/sh interpreter. |
|
42 |
# For more examples and pre-written hooks, see those in |
|
43 |
# the Subversion repository at |
|
44 |
# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and |
|
45 |
# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ |
|
46 |
|
|
47 |
|
|
48 |
REPOS="$1" |
|
49 |
REV="$2" |
|
50 |
TXN_NAME="$3" |
|
51 |
|
|
52 |
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf |
hooks/pre-unlock.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# PRE-UNLOCK HOOK |
|
4 |
# |
|
5 |
# The pre-unlock hook is invoked before an exclusive lock is |
|
6 |
# destroyed. Subversion runs this hook by invoking a program |
|
7 |
# (script, executable, binary, etc.) named 'pre-unlock' (for which |
|
8 |
# this file is a template), with the following ordered arguments: |
|
9 |
# |
|
10 |
# [1] REPOS-PATH (the path to this repository) |
|
11 |
# [2] PATH (the path in the repository about to be unlocked) |
|
12 |
# [3] USER (the user destroying the lock) |
|
13 |
# [4] TOKEN (the lock token to be destroyed) |
|
14 |
# [5] BREAK-UNLOCK (1 if the user is breaking the lock, else 0) |
|
15 |
# |
|
16 |
# The default working directory for the invocation is undefined, so |
|
17 |
# the program should set one explicitly if it cares. |
|
18 |
# |
|
19 |
# If the hook program exits with success, the lock is destroyed; but |
|
20 |
# if it exits with failure (non-zero), the unlock action is aborted |
|
21 |
# and STDERR is returned to the client. |
|
22 |
|
|
23 |
# On a Unix system, the normal procedure is to have 'pre-unlock' |
|
24 |
# invoke other programs to do the real work, though it may do the |
|
25 |
# work itself too. |
|
26 |
# |
|
27 |
# Note that 'pre-unlock' must be executable by the user(s) who will |
|
28 |
# invoke it (typically the user httpd runs as), and that user must |
|
29 |
# have filesystem-level permission to access the repository. |
|
30 |
# |
|
31 |
# On a Windows system, you should name the hook program |
|
32 |
# 'pre-unlock.bat' or 'pre-unlock.exe', |
|
33 |
# but the basic idea is the same. |
|
34 |
# |
|
35 |
# Here is an example hook script, for a Unix /bin/sh interpreter: |
|
36 |
|
|
37 |
REPOS="$1" |
|
38 |
PATH="$2" |
|
39 |
USER="$3" |
|
40 |
TOKEN="$4" |
|
41 |
BREAK="$5" |
|
42 |
|
|
43 |
# If a lock is owned by a different person, don't allow it be broken. |
|
44 |
# (Maybe this script could send email to the lock owner?) |
|
45 |
|
|
46 |
SVNLOOK=/usr/local/bin/svnlook |
|
47 |
GREP=/bin/grep |
|
48 |
SED=/bin/sed |
|
49 |
|
|
50 |
LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \ |
|
51 |
$GREP '^Owner: ' | $SED 's/Owner: //'` |
|
52 |
|
|
53 |
# If we get no result from svnlook, there's no lock, return success: |
|
54 |
if [ "$LOCK_OWNER" = "" ]; then |
|
55 |
exit 0 |
|
56 |
fi |
|
57 |
|
|
58 |
# If the person unlocking matches the lock's owner, return success: |
|
59 |
if [ "$LOCK_OWNER" = "$USER" ]; then |
|
60 |
exit 0 |
|
61 |
fi |
|
62 |
|
|
63 |
# Otherwise, we've got an owner mismatch, so return failure: |
|
64 |
echo "Error: $PATH locked by ${LOCK_OWNER}." 1>&2 |
|
65 |
exit 1 |
hooks/pre-revprop-change.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# PRE-REVPROP-CHANGE HOOK |
|
4 |
# |
|
5 |
# The pre-revprop-change hook is invoked before a revision property |
|
6 |
# is added, modified or deleted. Subversion runs this hook by invoking |
|
7 |
# a program (script, executable, binary, etc.) named 'pre-revprop-change' |
|
8 |
# (for which this file is a template), with the following ordered |
|
9 |
# arguments: |
|
10 |
# |
|
11 |
# [1] REPOS-PATH (the path to this repository) |
|
12 |
# [2] REV (the revision being tweaked) |
|
13 |
# [3] USER (the username of the person tweaking the property) |
|
14 |
# [4] PROPNAME (the property being set on the revision) |
|
15 |
# [5] ACTION (the property is being 'A'dded, 'M'odified, or 'D'eleted) |
|
16 |
# |
|
17 |
# [STDIN] PROPVAL ** the new property value is passed via STDIN. |
|
18 |
# |
|
19 |
# If the hook program exits with success, the propchange happens; but |
|
20 |
# if it exits with failure (non-zero), the propchange doesn't happen. |
|
21 |
# The hook program can use the 'svnlook' utility to examine the |
|
22 |
# existing value of the revision property. |
|
23 |
# |
|
24 |
# WARNING: unlike other hooks, this hook MUST exist for revision |
|
25 |
# properties to be changed. If the hook does not exist, Subversion |
|
26 |
# will behave as if the hook were present, but failed. The reason |
|
27 |
# for this is that revision properties are UNVERSIONED, meaning that |
|
28 |
# a successful propchange is destructive; the old value is gone |
|
29 |
# forever. We recommend the hook back up the old value somewhere. |
|
30 |
# |
|
31 |
# On a Unix system, the normal procedure is to have 'pre-revprop-change' |
|
32 |
# invoke other programs to do the real work, though it may do the |
|
33 |
# work itself too. |
|
34 |
# |
|
35 |
# Note that 'pre-revprop-change' must be executable by the user(s) who will |
|
36 |
# invoke it (typically the user httpd runs as), and that user must |
|
37 |
# have filesystem-level permission to access the repository. |
|
38 |
# |
|
39 |
# On a Windows system, you should name the hook program |
|
40 |
# 'pre-revprop-change.bat' or 'pre-revprop-change.exe', |
|
41 |
# but the basic idea is the same. |
|
42 |
# |
|
43 |
# The hook program typically does not inherit the environment of |
|
44 |
# its parent process. For example, a common problem is for the |
|
45 |
# PATH environment variable to not be set to its usual value, so |
|
46 |
# that subprograms fail to launch unless invoked via absolute path. |
|
47 |
# If you're having unexpected problems with a hook program, the |
|
48 |
# culprit may be unusual (or missing) environment variables. |
|
49 |
# |
|
50 |
# Here is an example hook script, for a Unix /bin/sh interpreter. |
|
51 |
# For more examples and pre-written hooks, see those in |
|
52 |
# the Subversion repository at |
|
53 |
# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and |
|
54 |
# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ |
|
55 |
|
|
56 |
|
|
57 |
REPOS="$1" |
|
58 |
REV="$2" |
|
59 |
USER="$3" |
|
60 |
PROPNAME="$4" |
|
61 |
ACTION="$5" |
|
62 |
|
|
63 |
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi |
|
64 |
|
|
65 |
echo "Changing revision properties other than svn:log is prohibited" >&2 |
|
66 |
exit 1 |
hooks/pre-commit.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# PRE-COMMIT HOOK |
|
4 |
# |
|
5 |
# The pre-commit hook is invoked before a Subversion txn is |
|
6 |
# committed. Subversion runs this hook by invoking a program |
|
7 |
# (script, executable, binary, etc.) named 'pre-commit' (for which |
|
8 |
# this file is a template), with the following ordered arguments: |
|
9 |
# |
|
10 |
# [1] REPOS-PATH (the path to this repository) |
|
11 |
# [2] TXN-NAME (the name of the txn about to be committed) |
|
12 |
# |
|
13 |
# [STDIN] LOCK-TOKENS ** the lock tokens are passed via STDIN. |
|
14 |
# |
|
15 |
# If STDIN contains the line "LOCK-TOKENS:\n" (the "\n" denotes a |
|
16 |
# single newline), the lines following it are the lock tokens for |
|
17 |
# this commit. The end of the list is marked by a line containing |
|
18 |
# only a newline character. |
|
19 |
# |
|
20 |
# Each lock token line consists of a URI-escaped path, followed |
|
21 |
# by the separator character '|', followed by the lock token string, |
|
22 |
# followed by a newline. |
|
23 |
# |
|
24 |
# The default working directory for the invocation is undefined, so |
|
25 |
# the program should set one explicitly if it cares. |
|
26 |
# |
|
27 |
# If the hook program exits with success, the txn is committed; but |
|
28 |
# if it exits with failure (non-zero), the txn is aborted, no commit |
|
29 |
# takes place, and STDERR is returned to the client. The hook |
|
30 |
# program can use the 'svnlook' utility to help it examine the txn. |
|
31 |
# |
|
32 |
# On a Unix system, the normal procedure is to have 'pre-commit' |
|
33 |
# invoke other programs to do the real work, though it may do the |
|
34 |
# work itself too. |
|
35 |
# |
|
36 |
# *** NOTE: THE HOOK PROGRAM MUST NOT MODIFY THE TXN, EXCEPT *** |
|
37 |
# *** FOR REVISION PROPERTIES (like svn:log or svn:author). *** |
|
38 |
# |
|
39 |
# This is why we recommend using the read-only 'svnlook' utility. |
|
40 |
# In the future, Subversion may enforce the rule that pre-commit |
|
41 |
# hooks should not modify the versioned data in txns, or else come |
|
42 |
# up with a mechanism to make it safe to do so (by informing the |
|
43 |
# committing client of the changes). However, right now neither |
|
44 |
# mechanism is implemented, so hook writers just have to be careful. |
|
45 |
# |
|
46 |
# Note that 'pre-commit' must be executable by the user(s) who will |
|
47 |
# invoke it (typically the user httpd runs as), and that user must |
|
48 |
# have filesystem-level permission to access the repository. |
|
49 |
# |
|
50 |
# On a Windows system, you should name the hook program |
|
51 |
# 'pre-commit.bat' or 'pre-commit.exe', |
|
52 |
# but the basic idea is the same. |
|
53 |
# |
|
54 |
# The hook program typically does not inherit the environment of |
|
55 |
# its parent process. For example, a common problem is for the |
|
56 |
# PATH environment variable to not be set to its usual value, so |
|
57 |
# that subprograms fail to launch unless invoked via absolute path. |
|
58 |
# If you're having unexpected problems with a hook program, the |
|
59 |
# culprit may be unusual (or missing) environment variables. |
|
60 |
# |
|
61 |
# Here is an example hook script, for a Unix /bin/sh interpreter. |
|
62 |
# For more examples and pre-written hooks, see those in |
|
63 |
# the Subversion repository at |
|
64 |
# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and |
|
65 |
# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ |
|
66 |
|
|
67 |
|
|
68 |
REPOS="$1" |
|
69 |
TXN="$2" |
|
70 |
|
|
71 |
# Make sure that the log message contains some text. |
|
72 |
SVNLOOK=/usr/local/bin/svnlook |
|
73 |
$SVNLOOK log -t "$TXN" "$REPOS" | \ |
|
74 |
grep "[a-zA-Z0-9]" > /dev/null || exit 1 |
|
75 |
|
|
76 |
# Check that the author of this commit has the rights to perform |
|
77 |
# the commit on the files and directories being modified. |
|
78 |
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 |
|
79 |
|
|
80 |
# All checks passed, so allow the commit. |
|
81 |
exit 0 |
hooks/start-commit.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# START-COMMIT HOOK |
|
4 |
# |
|
5 |
# The start-commit hook is invoked immediately after a Subversion txn is |
|
6 |
# created and populated with initial revprops in the process of doing a |
|
7 |
# commit. Subversion runs this hook by invoking a program (script, |
|
8 |
# executable, binary, etc.) named 'start-commit' (for which this file |
|
9 |
# is a template) with the following ordered arguments: |
|
10 |
# |
|
11 |
# [1] REPOS-PATH (the path to this repository) |
|
12 |
# [2] USER (the authenticated user attempting to commit) |
|
13 |
# [3] CAPABILITIES (a colon-separated list of capabilities reported |
|
14 |
# by the client; see note below) |
|
15 |
# [4] TXN-NAME (the name of the commit txn just created) |
|
16 |
# |
|
17 |
# Note: The CAPABILITIES parameter is new in Subversion 1.5, and 1.5 |
|
18 |
# clients will typically report at least the "mergeinfo" capability. |
|
19 |
# If there are other capabilities, then the list is colon-separated, |
|
20 |
# e.g.: "mergeinfo:some-other-capability" (the order is undefined). |
|
21 |
# |
|
22 |
# Note: The TXN-NAME parameter is new in Subversion 1.8. Prior to version |
|
23 |
# 1.8, the start-commit hook was invoked before the commit txn was even |
|
24 |
# created, so the ability to inspect the commit txn and its metadata from |
|
25 |
# within the start-commit hook was not possible. |
|
26 |
# |
|
27 |
# The list is self-reported by the client. Therefore, you should not |
|
28 |
# make security assumptions based on the capabilities list, nor should |
|
29 |
# you assume that clients reliably report every capability they have. |
|
30 |
# |
|
31 |
# The working directory for this hook program's invocation is undefined, |
|
32 |
# so the program should set one explicitly if it cares. |
|
33 |
# |
|
34 |
# If the hook program exits with success, the commit continues; but |
|
35 |
# if it exits with failure (non-zero), the commit is stopped before |
|
36 |
# a Subversion txn is created, and STDERR is returned to the client. |
|
37 |
# |
|
38 |
# On a Unix system, the normal procedure is to have 'start-commit' |
|
39 |
# invoke other programs to do the real work, though it may do the |
|
40 |
# work itself too. |
|
41 |
# |
|
42 |
# Note that 'start-commit' must be executable by the user(s) who will |
|
43 |
# invoke it (typically the user httpd runs as), and that user must |
|
44 |
# have filesystem-level permission to access the repository. |
|
45 |
# |
|
46 |
# On a Windows system, you should name the hook program |
|
47 |
# 'start-commit.bat' or 'start-commit.exe', |
|
48 |
# but the basic idea is the same. |
|
49 |
# |
|
50 |
# The hook program typically does not inherit the environment of |
|
51 |
# its parent process. For example, a common problem is for the |
|
52 |
# PATH environment variable to not be set to its usual value, so |
|
53 |
# that subprograms fail to launch unless invoked via absolute path. |
|
54 |
# If you're having unexpected problems with a hook program, the |
|
55 |
# culprit may be unusual (or missing) environment variables. |
|
56 |
# |
|
57 |
# Here is an example hook script, for a Unix /bin/sh interpreter. |
|
58 |
# For more examples and pre-written hooks, see those in |
|
59 |
# the Subversion repository at |
|
60 |
# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and |
|
61 |
# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ |
|
62 |
|
|
63 |
|
|
64 |
REPOS="$1" |
|
65 |
USER="$2" |
|
66 |
|
|
67 |
commit-allower.pl --repository "$REPOS" --user "$USER" || exit 1 |
|
68 |
special-auth-check.py --user "$USER" --auth-level 3 || exit 1 |
|
69 |
|
|
70 |
# All checks passed, so allow the commit. |
|
71 |
exit 0 |
hooks/post-revprop-change.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# POST-REVPROP-CHANGE HOOK |
|
4 |
# |
|
5 |
# The post-revprop-change hook is invoked after a revision property |
|
6 |
# has been added, modified or deleted. Subversion runs this hook by |
|
7 |
# invoking a program (script, executable, binary, etc.) named |
|
8 |
# 'post-revprop-change' (for which this file is a template), with the |
|
9 |
# following ordered arguments: |
|
10 |
# |
|
11 |
# [1] REPOS-PATH (the path to this repository) |
|
12 |
# [2] REV (the revision that was tweaked) |
|
13 |
# [3] USER (the username of the person tweaking the property) |
|
14 |
# [4] PROPNAME (the property that was changed) |
|
15 |
# [5] ACTION (the property was 'A'dded, 'M'odified, or 'D'eleted) |
|
16 |
# |
|
17 |
# [STDIN] PROPVAL ** the old property value is passed via STDIN. |
|
18 |
# |
|
19 |
# Because the propchange has already completed and cannot be undone, |
|
20 |
# the exit code of the hook program is ignored. The hook program |
|
21 |
# can use the 'svnlook' utility to help it examine the |
|
22 |
# new property value. |
|
23 |
# |
|
24 |
# On a Unix system, the normal procedure is to have 'post-revprop-change' |
|
25 |
# invoke other programs to do the real work, though it may do the |
|
26 |
# work itself too. |
|
27 |
# |
|
28 |
# Note that 'post-revprop-change' must be executable by the user(s) who will |
|
29 |
# invoke it (typically the user httpd runs as), and that user must |
|
30 |
# have filesystem-level permission to access the repository. |
|
31 |
# |
|
32 |
# On a Windows system, you should name the hook program |
|
33 |
# 'post-revprop-change.bat' or 'post-revprop-change.exe', |
|
34 |
# but the basic idea is the same. |
|
35 |
# |
|
36 |
# The hook program typically does not inherit the environment of |
|
37 |
# its parent process. For example, a common problem is for the |
|
38 |
# PATH environment variable to not be set to its usual value, so |
|
39 |
# that subprograms fail to launch unless invoked via absolute path. |
|
40 |
# If you're having unexpected problems with a hook program, the |
|
41 |
# culprit may be unusual (or missing) environment variables. |
|
42 |
# |
|
43 |
# Here is an example hook script, for a Unix /bin/sh interpreter. |
|
44 |
# For more examples and pre-written hooks, see those in |
|
45 |
# the Subversion repository at |
|
46 |
# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and |
|
47 |
# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ |
|
48 |
|
|
49 |
|
|
50 |
REPOS="$1" |
|
51 |
REV="$2" |
|
52 |
USER="$3" |
|
53 |
PROPNAME="$4" |
|
54 |
ACTION="$5" |
|
55 |
|
|
56 |
mailer.py propchange2 "$REPOS" "$REV" "$USER" "$PROPNAME" "$ACTION" /path/to/mailer.conf |
hooks/post-unlock.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# POST-UNLOCK HOOK |
|
4 |
# |
|
5 |
# The post-unlock hook runs after a path is unlocked. Subversion runs |
|
6 |
# this hook by invoking a program (script, executable, binary, etc.) |
|
7 |
# named 'post-unlock' (for which this file is a template) with the |
|
8 |
# following ordered arguments: |
|
9 |
# |
|
10 |
# [1] REPOS-PATH (the path to this repository) |
|
11 |
# [2] USER (the user who destroyed the lock) |
|
12 |
# |
|
13 |
# The paths that were just unlocked are passed to the hook via STDIN |
|
14 |
# (as of Subversion 1.2, only one path is passed per invocation, but |
|
15 |
# the plan is to pass all unlocked paths at once, so the hook program |
|
16 |
# should be written accordingly). |
|
17 |
# |
|
18 |
# The default working directory for the invocation is undefined, so |
|
19 |
# the program should set one explicitly if it cares. |
|
20 |
# |
|
21 |
# Because the lock has already been destroyed and cannot be undone, |
|
22 |
# the exit code of the hook program is ignored. |
|
23 |
# |
|
24 |
# On a Unix system, the normal procedure is to have 'post-unlock' |
|
25 |
# invoke other programs to do the real work, though it may do the |
|
26 |
# work itself too. |
|
27 |
# |
|
28 |
# Note that 'post-unlock' must be executable by the user(s) who will |
|
29 |
# invoke it (typically the user httpd runs as), and that user must |
|
30 |
# have filesystem-level permission to access the repository. |
|
31 |
# |
|
32 |
# On a Windows system, you should name the hook program |
|
33 |
# 'post-unlock.bat' or 'post-unlock.exe', |
|
34 |
# but the basic idea is the same. |
|
35 |
# |
|
36 |
# Here is an example hook script, for a Unix /bin/sh interpreter: |
|
37 |
|
|
38 |
REPOS="$1" |
|
39 |
USER="$2" |
|
40 |
|
|
41 |
# Send email to interested parties, let them know a lock was removed: |
|
42 |
mailer.py unlock "$REPOS" "$USER" /path/to/mailer.conf |
hooks/post-lock.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# POST-LOCK HOOK |
|
4 |
# |
|
5 |
# The post-lock hook is run after a path is locked. Subversion runs |
|
6 |
# this hook by invoking a program (script, executable, binary, etc.) |
|
7 |
# named 'post-lock' (for which this file is a template) with the |
|
8 |
# following ordered arguments: |
|
9 |
# |
|
10 |
# [1] REPOS-PATH (the path to this repository) |
|
11 |
# [2] USER (the user who created the lock) |
|
12 |
# |
|
13 |
# The paths that were just locked are passed to the hook via STDIN (as |
|
14 |
# of Subversion 1.2, only one path is passed per invocation, but the |
|
15 |
# plan is to pass all locked paths at once, so the hook program |
|
16 |
# should be written accordingly). |
|
17 |
# |
|
18 |
# The default working directory for the invocation is undefined, so |
|
19 |
# the program should set one explicitly if it cares. |
|
20 |
# |
|
21 |
# Because the lock has already been created and cannot be undone, |
|
22 |
# the exit code of the hook program is ignored. The hook program |
|
23 |
# can use the 'svnlook' utility to help it examine the |
|
24 |
# newly-created lock. |
|
25 |
# |
|
26 |
# On a Unix system, the normal procedure is to have 'post-lock' |
|
27 |
# invoke other programs to do the real work, though it may do the |
|
28 |
# work itself too. |
|
29 |
# |
|
30 |
# Note that 'post-lock' must be executable by the user(s) who will |
|
31 |
# invoke it (typically the user httpd runs as), and that user must |
|
32 |
# have filesystem-level permission to access the repository. |
|
33 |
# |
|
34 |
# On a Windows system, you should name the hook program |
|
35 |
# 'post-lock.bat' or 'post-lock.exe', |
|
36 |
# but the basic idea is the same. |
|
37 |
# |
|
38 |
# Here is an example hook script, for a Unix /bin/sh interpreter: |
|
39 |
|
|
40 |
REPOS="$1" |
|
41 |
USER="$2" |
|
42 |
|
|
43 |
# Send email to interested parties, let them know a lock was created: |
|
44 |
mailer.py lock "$REPOS" "$USER" /path/to/mailer.conf |
hooks/pre-lock.tmpl | ||
---|---|---|
1 |
#!/bin/sh |
|
2 |
|
|
3 |
# PRE-LOCK HOOK |
|
4 |
# |
|
5 |
# The pre-lock hook is invoked before an exclusive lock is |
|
6 |
# created. Subversion runs this hook by invoking a program |
|
7 |
# (script, executable, binary, etc.) named 'pre-lock' (for which |
|
8 |
# this file is a template), with the following ordered arguments: |
|
9 |
# |
|
10 |
# [1] REPOS-PATH (the path to this repository) |
|
11 |
# [2] PATH (the path in the repository about to be locked) |
|
12 |
# [3] USER (the user creating the lock) |
|
13 |
# [4] COMMENT (the comment of the lock) |
|
14 |
# [5] STEAL-LOCK (1 if the user is trying to steal the lock, else 0) |
|
15 |
# |
|
16 |
# If the hook program outputs anything on stdout, the output string will |
|
17 |
# be used as the lock token for this lock operation. If you choose to use |
|
18 |
# this feature, you must guarantee the tokens generated are unique across |
|
19 |
# the repository each time. |
|
20 |
# |
|
21 |
# The default working directory for the invocation is undefined, so |
|
22 |
# the program should set one explicitly if it cares. |
|
23 |
# |
|
24 |
# If the hook program exits with success, the lock is created; but |
|
25 |
# if it exits with failure (non-zero), the lock action is aborted |
|
26 |
# and STDERR is returned to the client. |
|
27 |
|
|
28 |
# On a Unix system, the normal procedure is to have 'pre-lock' |
|
29 |
# invoke other programs to do the real work, though it may do the |
|
30 |
# work itself too. |
|
31 |
# |
|
32 |
# Note that 'pre-lock' must be executable by the user(s) who will |
|
33 |
# invoke it (typically the user httpd runs as), and that user must |
|
34 |
# have filesystem-level permission to access the repository. |
|
35 |
# |
|
36 |
# On a Windows system, you should name the hook program |
|
37 |
# 'pre-lock.bat' or 'pre-lock.exe', |
|
38 |
# but the basic idea is the same. |
|
39 |
# |
|
40 |
# Here is an example hook script, for a Unix /bin/sh interpreter: |
|
41 |
|
|
42 |
REPOS="$1" |
|
43 |
PATH="$2" |
|
44 |
USER="$3" |
|
45 |
COMMENT="$4" |
|
46 |
STEAL="$5" |
|
47 |
|
|
48 |
# If a lock exists and is owned by a different person, don't allow it |
|
49 |
# to be stolen (e.g., with 'svn lock --force ...'). |
|
50 |
|
|
51 |
# (Maybe this script could send email to the lock owner?) |
|
52 |
SVNLOOK=/usr/local/bin/svnlook |
|
53 |
GREP=/bin/grep |
|
54 |
SED=/bin/sed |
|
55 |
|
|
56 |
LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \ |
|
57 |
$GREP '^Owner: ' | $SED 's/Owner: //'` |
|
58 |
|
|
59 |
# If we get no result from svnlook, there's no lock, allow the lock to |
|
60 |
# happen: |
|
61 |
if [ "$LOCK_OWNER" = "" ]; then |
|
62 |
exit 0 |
|
63 |
fi |
|
64 |
|
|
65 |
# If the person locking matches the lock's owner, allow the lock to |
|
66 |
# happen: |
|
67 |
if [ "$LOCK_OWNER" = "$USER" ]; then |
|
68 |
exit 0 |
|
69 |
fi |
|
70 |
|
|
71 |
# Otherwise, we've got an owner mismatch, so return failure: |
|
72 |
echo "Error: $PATH already locked by ${LOCK_OWNER}." 1>&2 |
|
73 |
exit 1 |
format | ||
---|---|---|
1 |
5 |
db/current | ||
---|---|---|
1 |
1 |
db/format | ||
---|---|---|
1 |
6 |
|
2 |
layout sharded 1000 |
db/fsfs.conf | ||
---|---|---|
1 |
### This file controls the configuration of the FSFS filesystem. |
|
2 |
|
|
3 |
[memcached-servers] |
|
4 |
### These options name memcached servers used to cache internal FSFS |
|
5 |
### data. See http://www.danga.com/memcached/ for more information on |
|
6 |
### memcached. To use memcached with FSFS, run one or more memcached |
|
7 |
### servers, and specify each of them as an option like so: |
|
8 |
# first-server = 127.0.0.1:11211 |
|
9 |
# remote-memcached = mymemcached.corp.example.com:11212 |
|
10 |
### The option name is ignored; the value is of the form HOST:PORT. |
|
11 |
### memcached servers can be shared between multiple repositories; |
|
12 |
### however, if you do this, you *must* ensure that repositories have |
|
13 |
### distinct UUIDs and paths, or else cached data from one repository |
|
14 |
### might be used by another accidentally. Note also that memcached has |
|
15 |
### no authentication for reads or writes, so you must ensure that your |
|
16 |
### memcached servers are only accessible by trusted users. |
|
17 |
|
|
18 |
[caches] |
|
19 |
### When a cache-related error occurs, normally Subversion ignores it |
|
20 |
### and continues, logging an error if the server is appropriately |
|
21 |
### configured (and ignoring it with file:// access). To make |
|
22 |
### Subversion never ignore cache errors, uncomment this line. |
|
23 |
# fail-stop = true |
|
24 |
|
|
25 |
[rep-sharing] |
|
26 |
### To conserve space, the filesystem can optionally avoid storing |
|
27 |
### duplicate representations. This comes at a slight cost in |
|
28 |
### performance, as maintaining a database of shared representations can |
|
29 |
### increase commit times. The space savings are dependent upon the size |
|
30 |
### of the repository, the number of objects it contains and the amount of |
|
31 |
### duplication between them, usually a function of the branching and |
|
32 |
### merging process. |
|
33 |
### |
|
34 |
### The following parameter enables rep-sharing in the repository. It can |
|
35 |
### be switched on and off at will, but for best space-saving results |
|
36 |
### should be enabled consistently over the life of the repository. |
|
37 |
### 'svnadmin verify' will check the rep-cache regardless of this setting. |
|
38 |
### rep-sharing is enabled by default. |
|
39 |
# enable-rep-sharing = true |
|
40 |
|
|
41 |
[deltification] |
|
42 |
### To conserve space, the filesystem stores data as differences against |
|
43 |
### existing representations. This comes at a slight cost in performance, |
|
44 |
### as calculating differences can increase commit times. Reading data |
|
45 |
### will also create higher CPU load and the data will be fragmented. |
|
46 |
### Since deltification tends to save significant amounts of disk space, |
|
47 |
### the overall I/O load can actually be lower. |
|
48 |
### |
|
49 |
### The options in this section allow for tuning the deltification |
|
50 |
### strategy. Their effects on data size and server performance may vary |
|
51 |
### from one repository to another. Versions prior to 1.8 will ignore |
|
52 |
### this section. |
|
53 |
### |
|
54 |
### The following parameter enables deltification for directories. It can |
|
55 |
### be switched on and off at will, but for best space-saving results |
|
56 |
### should be enabled consistently over the life of the repository. |
|
57 |
### Repositories containing large directories will benefit greatly. |
|
58 |
### In rarely read repositories, the I/O overhead may be significant as |
|
59 |
### cache hit rates will most likely be low |
|
60 |
### directory deltification is disabled by default. |
|
61 |
# enable-dir-deltification = false |
|
62 |
### |
|
63 |
### The following parameter enables deltification for properties on files |
|
64 |
### and directories. Overall, this is a minor tuning option but can save |
|
65 |
### some disk space if you merge frequently or frequently change node |
|
66 |
### properties. You should not activate this if rep-sharing has been |
|
67 |
### disabled because this may result in a net increase in repository size. |
|
68 |
### property deltification is disabled by default. |
|
69 |
# enable-props-deltification = false |
|
70 |
### |
|
71 |
### During commit, the server may need to walk the whole change history of |
|
72 |
### of a given node to find a suitable deltification base. This linear |
|
73 |
### process can impact commit times, svnadmin load and similar operations. |
|
74 |
### This setting limits the depth of the deltification history. If the |
|
75 |
### threshold has been reached, the node will be stored as fulltext and a |
|
76 |
### new deltification history begins. |
|
77 |
### Note, this is unrelated to svn log. |
|
78 |
### Very large values rarely provide significant additional savings but |
|
79 |
### can impact performance greatly - in particular if directory |
|
80 |
### deltification has been activated. Very small values may be useful in |
|
81 |
### repositories that are dominated by large, changing binaries. |
|
82 |
### Should be a power of two minus 1. A value of 0 will effectively |
|
83 |
### disable deltification. |
|
84 |
### For 1.8, the default value is 1023; earlier versions have no limit. |
|
85 |
# max-deltification-walk = 1023 |
|
86 |
### |
|
87 |
### The skip-delta scheme used by FSFS tends to repeatably store redundant |
|
88 |
### delta information where a simple delta against the latest version is |
|
89 |
### often smaller. By default, 1.8+ will therefore use skip deltas only |
|
90 |
### after the linear chain of deltas has grown beyond the threshold |
|
91 |
### specified by this setting. |
|
92 |
### Values up to 64 can result in some reduction in repository size for |
|
93 |
### the cost of quickly increasing I/O and CPU costs. Similarly, smaller |
|
94 |
### numbers can reduce those costs at the cost of more disk space. For |
|
95 |
### rarely read repositories or those containing larger binaries, this may |
|
96 |
### present a better trade-off. |
|
97 |
### Should be a power of two. A value of 1 or smaller will cause the |
|
98 |
### exclusive use of skip-deltas (as in pre-1.8). |
|
99 |
### For 1.8, the default value is 16; earlier versions use 1. |
|
100 |
# max-linear-deltification = 16 |
|
101 |
|
|
102 |
[packed-revprops] |
|
103 |
### This parameter controls the size (in kBytes) of packed revprop files. |
|
104 |
### Revprops of consecutive revisions will be concatenated into a single |
|
105 |
### file up to but not exceeding the threshold given here. However, each |
|
106 |
### pack file may be much smaller and revprops of a single revision may be |
|
107 |
### much larger than the limit set here. The threshold will be applied |
|
108 |
### before optional compression takes place. |
|
109 |
### Large values will reduce disk space usage at the expense of increased |
|
110 |
### latency and CPU usage reading and changing individual revprops. They |
|
111 |
### become an advantage when revprop caching has been enabled because a |
|
112 |
### lot of data can be read in one go. Values smaller than 4 kByte will |
|
113 |
### not improve latency any further and quickly render revprop packing |
|
114 |
### ineffective. |
|
115 |
### revprop-pack-size is 64 kBytes by default for non-compressed revprop |
|
116 |
### pack files and 256 kBytes when compression has been enabled. |
|
117 |
# revprop-pack-size = 64 |
|
118 |
### |
|
119 |
### To save disk space, packed revprop files may be compressed. Standard |
|
120 |
### revprops tend to allow for very effective compression. Reading and |
|
121 |
### even more so writing, become significantly more CPU intensive. With |
|
122 |
### revprop caching enabled, the overhead can be offset by reduced I/O |
|
123 |
### unless you often modify revprops after packing. |
|
124 |
### Compressing packed revprops is disabled by default. |
|
125 |
# compress-packed-revprops = false |
db/min-unpacked-rev | ||
---|---|---|
1 |
0 |
db/revprops/0/0 | ||
---|---|---|
1 |
K 8 |
|
2 |
svn:date |
|
3 |
V 27 |
|
4 |
2014-09-22T16:37:46.471824Z |
|
5 |
END |
db/revprops/0/1 | ||
---|---|---|
1 |
K 10 |
|
2 |
svn:author |
|
3 |
V 10 |
|
4 |
Luisehahne |
|
5 |
K 8 |
|
6 |
svn:date |
|
7 |
V 27 |
|
8 |
2014-09-22T16:37:49.721045Z |
|
9 |
K 7 |
|
10 |
svn:log |
|
11 |
V 26 |
|
12 |
Importierte Ordnerstruktur |
|
13 |
END |
db/uuid | ||
---|---|---|
1 |
fd170441-563a-2142-b48a-317d2c796065 |
db/fs-type | ||
---|---|---|
1 |
fsfs |
db/revs/0/0 | ||
---|---|---|
1 |
PLAIN |
|
2 |
END |
|
3 |
ENDREP |
|
4 |
id: 0.0.r0/17 |
|
5 |
type: dir |
|
6 |
count: 0 |
|
7 |
text: 0 0 4 4 2d2977d1c96f487abe4a1e202dd03b4e |
|
8 |
cpath: / |
|
9 |
|
|
10 |
|
|
11 |
17 107 |
db/revs/0/1 | ||
---|---|---|
1 |
id: 0-1.0.r1/0 |
|
2 |
type: dir |
|
3 |
count: 0 |
|
4 |
cpath: /branches |
|
5 |
copyroot: 0 / |
|
6 |
|
|
7 |
id: 2-1.0.r1/66 |
|
8 |
type: dir |
|
9 |
count: 0 |
|
10 |
cpath: /tags |
|
11 |
copyroot: 0 / |
|
12 |
|
|
13 |
id: 3-1.0.r1/129 |
|
14 |
type: dir |
|
15 |
count: 0 |
|
16 |
cpath: /trunk |
|
17 |
copyroot: 0 / |
|
18 |
|
|
19 |
PLAIN |
|
20 |
K 8 |
|
21 |
branches |
|
22 |
V 14 |
|
23 |
dir 0-1.0.r1/0 |
|
24 |
K 4 |
|
25 |
tags |
|
26 |
V 15 |
|
27 |
dir 2-1.0.r1/66 |
|
28 |
K 5 |
|
29 |
trunk |
|
30 |
V 16 |
|
31 |
dir 3-1.0.r1/129 |
|
32 |
END |
|
33 |
ENDREP |
|
34 |
id: 0.0.r1/306 |
|
35 |
type: dir |
|
36 |
pred: 0.0.r0/17 |
|
37 |
count: 1 |
|
38 |
text: 1 194 99 0 7df06f8ed258a32493a56932fb6da402 |
|
39 |
cpath: / |
|
40 |
copyroot: 0 / |
|
41 |
|
|
42 |
_0.0.t0-0 add-dir false false /branches |
|
43 |
|
|
44 |
_2.0.t0-0 add-dir false false /tags |
|
45 |
|
|
46 |
_3.0.t0-0 add-dir false false /trunk |
|
47 |
|
|
48 |
|
|
49 |
306 430 |
db/txn-current | ||
---|---|---|
1 |
1 |
conf/hooks-env.tmpl | ||
---|---|---|
1 |
### This file is an example hook script environment configuration file. |
|
2 |
### Hook scripts run in an empty environment by default. |
|
3 |
### As shown below each section defines environment variables for a |
|
4 |
### particular hook script. The [default] section defines environment |
|
5 |
### variables for all hook scripts, unless overridden by a hook-specific |
|
6 |
### section. |
|
7 |
|
|
8 |
### This example configures a UTF-8 locale for all hook scripts, so that |
|
9 |
### special characters, such as umlauts, may be printed to stderr. |
|
10 |
### If UTF-8 is used with a mod_dav_svn server, the SVNUseUTF8 option must |
|
11 |
### also be set to 'yes' in httpd.conf. |
|
12 |
### With svnserve, the LANG environment variable of the svnserve process |
|
13 |
### must be set to the same value as given here. |
|
14 |
[default] |
|
15 |
LANG = en_US.UTF-8 |
|
16 |
|
|
17 |
### This sets the PATH environment variable for the pre-commit hook. |
|
18 |
[pre-commit] |
|
19 |
PATH = /usr/local/bin:/usr/bin:/usr/sbin |
conf/passwd | ||
---|---|---|
1 |
### This file is an example password file for svnserve. |
|
2 |
### Its format is similar to that of svnserve.conf. As shown in the |
|
3 |
### example below it contains one section labelled [users]. |
|
4 |
### The name and password for each user follow, one account per line. |
|
5 |
|
|
6 |
[users] |
|
7 |
# harry = harryssecret |
|
8 |
# sally = sallyssecret |
conf/authz | ||
---|---|---|
1 |
### This file is an example authorization file for svnserve. |
|
2 |
### Its format is identical to that of mod_authz_svn authorization |
|
3 |
### files. |
|
4 |
### As shown below each section defines authorizations for the path and |
|
5 |
### (optional) repository specified by the section name. |
|
6 |
### The authorizations follow. An authorization line can refer to: |
|
7 |
### - a single user, |
|
8 |
### - a group of users defined in a special [groups] section, |
|
9 |
### - an alias defined in a special [aliases] section, |
|
10 |
### - all authenticated users, using the '$authenticated' token, |
|
11 |
### - only anonymous users, using the '$anonymous' token, |
|
12 |
### - anyone, using the '*' wildcard. |
|
13 |
### |
|
14 |
### A match can be inverted by prefixing the rule with '~'. Rules can |
|
15 |
### grant read ('r') access, read-write ('rw') access, or no access |
|
16 |
### (''). |
|
17 |
|
|
18 |
[aliases] |
|
19 |
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average |
|
20 |
|
|
21 |
[groups] |
|
22 |
# harry_and_sally = harry,sally |
|
23 |
# harry_sally_and_joe = harry,sally,&joe |
|
24 |
|
|
25 |
# [/foo/bar] |
|
26 |
# harry = rw |
|
27 |
# &joe = r |
|
28 |
# * = |
|
29 |
|
|
30 |
# [repository:/baz/fuz] |
|
31 |
# @harry_and_sally = rw |
|
32 |
# * = r |
conf/svnserve.conf | ||
---|---|---|
1 |
### This file controls the configuration of the svnserve daemon, if you |
|
2 |
### use it to allow access to this repository. (If you only allow |
|
3 |
### access through http: and/or file: URLs, then this file is |
|
4 |
### irrelevant.) |
|
5 |
|
|
6 |
### Visit http://subversion.apache.org/ for more information. |
|
7 |
|
|
8 |
[general] |
|
9 |
### The anon-access and auth-access options control access to the |
|
10 |
### repository for unauthenticated (a.k.a. anonymous) users and |
|
11 |
### authenticated users, respectively. |
|
12 |
### Valid values are "write", "read", and "none". |
|
13 |
### Setting the value to "none" prohibits both reading and writing; |
|
14 |
### "read" allows read-only access, and "write" allows complete |
|
15 |
### read/write access to the repository. |
|
16 |
### The sample settings below are the defaults and specify that anonymous |
|
17 |
### users have read-only access to the repository, while authenticated |
|
18 |
### users have read and write access to the repository. |
|
19 |
# anon-access = read |
|
20 |
# auth-access = write |
|
21 |
### The password-db option controls the location of the password |
|
22 |
### database file. Unless you specify a path starting with a /, |
|
23 |
### the file's location is relative to the directory containing |
|
24 |
### this configuration file. |
|
25 |
### If SASL is enabled (see below), this file will NOT be used. |
|
26 |
### Uncomment the line below to use the default password file. |
|
27 |
# password-db = passwd |
|
28 |
### The authz-db option controls the location of the authorization |
|
29 |
### rules for path-based access control. Unless you specify a path |
|
30 |
### starting with a /, the file's location is relative to the |
|
31 |
### directory containing this file. The specified path may be a |
|
32 |
### repository relative URL (^/) or an absolute file:// URL to a text |
|
33 |
### file in a Subversion repository. If you don't specify an authz-db, |
|
34 |
### no path-based access control is done. |
|
35 |
### Uncomment the line below to use the default authorization file. |
|
36 |
# authz-db = authz |
|
37 |
### The groups-db option controls the location of the groups file. |
|
38 |
### Unless you specify a path starting with a /, the file's location is |
|
39 |
### relative to the directory containing this file. The specified path |
|
40 |
### may be a repository relative URL (^/) or an absolute file:// URL to a |
|
41 |
### text file in a Subversion repository. |
|
42 |
# groups-db = groups |
|
43 |
### This option specifies the authentication realm of the repository. |
|
44 |
### If two repositories have the same authentication realm, they should |
|
45 |
### have the same password database, and vice versa. The default realm |
|
46 |
### is repository's uuid. |
|
47 |
# realm = My First Repository |
|
48 |
### The force-username-case option causes svnserve to case-normalize |
|
49 |
### usernames before comparing them against the authorization rules in the |
|
50 |
### authz-db file configured above. Valid values are "upper" (to upper- |
|
51 |
### case the usernames), "lower" (to lowercase the usernames), and |
|
52 |
### "none" (to compare usernames as-is without case conversion, which |
|
53 |
### is the default behavior). |
|
54 |
# force-username-case = none |
|
55 |
### The hooks-env options specifies a path to the hook script environment |
|
56 |
### configuration file. This option overrides the per-repository default |
|
57 |
### and can be used to configure the hook script environment for multiple |
|
58 |
### repositories in a single file, if an absolute path is specified. |
|
59 |
### Unless you specify an absolute path, the file's location is relative |
|
60 |
### to the directory containing this file. |
|
61 |
# hooks-env = hooks-env |
|
62 |
|
|
63 |
[sasl] |
|
64 |
### This option specifies whether you want to use the Cyrus SASL |
|
65 |
### library for authentication. Default is false. |
|
66 |
### This section will be ignored if svnserve is not built with Cyrus |
|
67 |
### SASL support; to check, run 'svnserve --version' and look for a line |
|
68 |
### reading 'Cyrus SASL authentication is available.' |
|
69 |
# use-sasl = true |
|
70 |
### These options specify the desired strength of the security layer |
|
71 |
### that you want SASL to provide. 0 means no encryption, 1 means |
|
72 |
### integrity-checking only, values larger than 1 are correlated |
|
73 |
### to the effective key length for encryption (e.g. 128 means 128-bit |
|
74 |
### encryption). The values below are the defaults. |
|
75 |
# min-encryption = 0 |
|
76 |
# max-encryption = 256 |
Also available in: Unified diff
delete wrong commit