Commit | Line | Data |
---|---|---|
491847ed JH |
1 | #!/bin/sh |
2 | set -e | |
3 | ||
4 | rcs="$1" | |
5 | srcdir="$2" | |
6 | repository="$3" | |
d9db5f2d | 7 | |
491847ed | 8 | usage () { |
7eb51220 | 9 | echo "usage: ikiwiki-makerepo svn|git|monotone|darcs srcdir repository" >&2 |
2cf63041 | 10 | echo " ikiwiki-makerepo bzr|mercurial srcdir" >&2 |
491847ed JH |
11 | exit 1 |
12 | } | |
13 | ||
14 | if [ -z "$rcs" ] || [ -z "$srcdir" ]; then | |
15 | usage | |
16 | fi | |
17 | ||
18 | if [ ! -d "$srcdir" ]; then | |
19 | echo "srcdir $srcdir not found" >&2 | |
20 | exit 1 | |
21 | fi | |
22 | ||
2cf63041 | 23 | if [ "$rcs" != mercurial ] && [ "$rcs" != bzr ]; then |
d9db5f2d JH |
24 | if [ -z "$repository" ]; then |
25 | echo "you need to specify both a srcdir and a repository for $rcs" >&2 | |
26 | usage | |
27 | fi | |
491847ed JH |
28 | if [ -e "$repository" ]; then |
29 | echo "repository $repository already exists, aborting" >&2 | |
30 | exit 1 | |
31 | fi | |
5636b628 | 32 | repository="$(perl -e 'use Cwd; $r=shift; $r=getcwd.q{/}.$r if $r!~m!^/!; print $r' "$repository")" |
491847ed JH |
33 | if [ -z "$repository" ]; then |
34 | echo "internal error finding repository abs_path" >&2 | |
35 | exit 1 | |
36 | fi | |
37 | fi | |
38 | ||
39 | echo "Importing $srcdir into $rcs" | |
40 | ||
41 | case "$rcs" in | |
42 | svn) | |
43 | if [ -e "$srcdir/.svn" ]; then | |
44 | echo "$srcdir already seems to be a svn working copy" >&2 | |
45 | exit 1 | |
46 | fi | |
47 | svnadmin create "$repository" | |
48 | svn mkdir "file://$repository/trunk" -m "create trunk directory" | |
49 | cd "$srcdir" | |
50 | svn co "file://$repository/trunk" . | |
51 | svn propset svn:ignore ".ikiwiki" . | |
52 | svn add * | |
53 | svn commit -m "initial import" | |
54 | echo "Directory $srcdir is now a checkout of $rcs repository $repository" | |
55 | ;; | |
56 | git) | |
d312709c JH |
57 | # There are better ways to do this, but this works with older |
58 | # versions of git.) | |
59 | mkdir -p "$repository" | |
60 | (cd "$repository" && git --bare init --shared) | |
61 | ||
491847ed JH |
62 | cd "$srcdir" |
63 | git init | |
64 | echo /.ikiwiki > .gitignore | |
341651a5 | 65 | echo /recentchanges >> .gitignore |
491847ed JH |
66 | git add . |
67 | git commit -m "initial commit" | |
68 | git remote add origin "$repository" | |
69 | git config branch.master.merge refs/heads/master | |
227107b2 | 70 | git config branch.master.remote origin |
491847ed JH |
71 | git push --all |
72 | echo "Directory $srcdir is now a clone of $rcs repository $repository" | |
73 | ;; | |
74 | mercurial) | |
75 | hg init "$srcdir" | |
76 | cd "$srcdir" | |
77 | echo .ikiwiki > .hgignore | |
3428cdd9 | 78 | hg add |
491847ed JH |
79 | hg commit -m "initial import" |
80 | echo "Directory $srcdir is now set up as a mercurial repository" | |
81 | ;; | |
a5907a0b JV |
82 | bzr) |
83 | bzr init "$srcdir" | |
84 | cd "$srcdir" | |
85 | echo .ikiwiki > .bzrignore | |
3428cdd9 | 86 | bzr add |
a5907a0b JV |
87 | bzr commit -m "initial import" |
88 | echo "Directory $srcdir is now set up as a bzr repository" | |
89 | ;; | |
db73f812 JH |
90 | monotone) |
91 | if [ -e "$srcdir/_MTN" ]; then | |
92 | echo "$srcdir already seems to be a monotone working copy" >&2 | |
93 | exit 1 | |
94 | fi | |
ae45223b JH |
95 | |
96 | mkdir -p "$(dirname "$repository")" | |
ae45223b JH |
97 | mtn db init -d "$repository" |
98 | ||
99 | cleaned_srcdir=$(basename "$srcdir" | tr -s "[:space:]" "_" | sed 's/_$//g') | |
4643233c | 100 | reverse_hostname=$( (hostname -f 2>/dev/null || hostname) |\ |
ae45223b JH |
101 | tr "." "\n" | ( tac 2>/dev/null || tail -r ) | tr "\n" "." ) |
102 | branch_name="$reverse_hostname$cleaned_srcdir" | |
103 | mtn setup -d "$repository" -b "$branch_name" "$srcdir" | |
104 | ||
db73f812 JH |
105 | cd "$srcdir" |
106 | echo \.ikiwiki$ > .mtn-ignore | |
107 | mtn add -R . | |
108 | # this expects that you already have a working mtn environment | |
109 | # with a default key floating around... | |
110 | mtn ci -m "initial import" | |
111 | echo "Directory $srcdir is now set up as a monotone repository" | |
4643233c JH |
112 | echo "" |
113 | echo "Note: If your monotone key has a passphrase, you need to configure" | |
114 | echo "monotone to automatically use it. Otherwise, web commits to ikiwiki" | |
115 | echo "will fail." | |
116 | echo "" | |
117 | echo "You can create a $srcdir/_MTN/monotonerc" | |
118 | echo "containing the passphrase:" | |
119 | echo "" | |
120 | echo "function get_passphrase (branchname)" | |
121 | echo ' return "passphrasehere"' | |
122 | echo "end" | |
db73f812 | 123 | ;; |
7eb51220 JH |
124 | darcs) |
125 | if [ -e "$srcdir/_darcs" ]; then | |
126 | echo "$srcdir already seems to be a darcs repository" >&2 | |
127 | exit 1 | |
128 | fi | |
129 | ||
7eb51220 | 130 | mkdir -p "$repository" |
0e0c6606 | 131 | (cd "$repository" && darcs initialize) |
7eb51220 JH |
132 | |
133 | mkdir -p "$srcdir" | |
134 | cd "$srcdir" | |
135 | darcs initialize | |
136 | echo .ikiwiki >> _darcs/prefs/boring | |
137 | darcs record -a -l -q -m "initial import" | |
138 | darcs pull -a -q "$repository" | |
139 | darcs push -a -q "$repository" | |
140 | echo "Directory $srcdir is now a branch of darcs repo $repository" | |
141 | ||
142 | # set up master repo's apply hook and tell user to adjust it if desired | |
143 | darcsdefaults="$repository/_darcs/prefs/defaults" | |
144 | echo "Preconfiguring apply hook in $darcsdefaults - adjust as desired!" | |
a9c0d7e2 | 145 | echo "apply posthook $repository/_darcs/ikiwiki-wrapper" >> "$darcsdefaults" |
7eb51220 JH |
146 | echo "apply run-posthook" >> "$darcsdefaults" |
147 | ;; | |
491847ed JH |
148 | *) |
149 | echo "Unsupported revision control system $rcs" >&2 | |
150 | usage | |
151 | ;; | |
152 | esac |