blob: e35424f9cffde09910cb908ea282446b85e9e63b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
##
# systr_repo_create_commit [<path>]
#
# Create a new commit directory within the repository. This function
# is polymorphic for both local and remote repositories. The new
# commit ID is printed to stdout.
##
function systr_repo_create_commit
{
if [ $# -gt 0 ]; then
path="$1"
fi
if [[ "$remote" == "" ]]; then
(
cd "$path"
cd "revs/"
mktemp -d XXXXXXXX
)
else
ssh "$remote" "systrunk create-commit \"$path\""
fi
}
##
# systr_repo_finish_commit <commit> <parent> [<merge>]
#
# Finish writing a commit by adding meta-data to the commit directory.
# The commit mesasge is taken from the file <commit>.mesg at the root
# of the repository directory. If <merge> is given, it is written to
# .merge.systr in the commit. This function is polymorphic for both
# local and remote repositories.
##
function systr_repo_finish_commit
{
if [ $# -lt 2 ]; then
echo "Fatal: too few arguments to systr_repo_finish_commit"
exit 1
fi
commit="$1"
parent="$2"
if [ $# -gt 2 ]; then
merge="$3"
else
merge=""
fi
if [ -f ".systr/author" ]; then
read author <.systr/author
else
author="Anonymous"
fi
if [ -f ".systr/email" ]; then
read email <.systr/email
else
email="<anon>"
fi
if [[ "$remote" == "" ]]; then
(
cd "$path"
cd "revs/"
cd "$commit"
echo "$parent" >.commit.systr
echo "$author" >.author.systr
echo "$email" >.email.systr
date >.date.systr
mv "../$commit.mesg" ".mesg.systr"
if [[ "$merge" != "" ]]; then
echo "$merge" >.merge.systr
fi
)
else
ssh "$remote" "systrunk finish-commit \"$commit\" \"$parent\" \
\"$author\" \"$email\" \"$merge\""
fi
}
##
# systr_repo_set_reference <symref> <commit>
#
# Update <symref> to point to <commit>. If <symref> doesn't exist,
# it is created. This function is polymorphic for both local and
# remote repositories.
##
function systr_repo_set_reference
{
if [ $# -lt 2 ]; then
echo "Fatal: too few arguments to systr_repo_set_reference"
exit 1
fi
symref="$1"
commit="$2"
if [[ "$symref" == "BASE" ]]; then
echo "Fatal: will not define BASE in the repository"
exit 1
elif [[ "$symref" == "TRAC" ]]; then
echo "Fatal: will not define TRAC in the repository"
exit 1
elif [[ "$symref" == "NULL" ]]; then
echo "Fatal: will not define NULL in the repository"
exit 1
elif [[ "$symref" == "MERG" ]]; then
echo "Fatal: will not define MERG in the repository"
exit 1
fi
if [[ "$remote" == "" ]]; then
(
cd "$path"
cd "refs/"
echo "$commit" >"$symref"
)
else
ssh "$remote" "systrunk set-ref \"$symref\" \"$commit\""
fi
}
|