aboutsummaryrefslogtreecommitdiff
path: root/ikiwiki-makerepo
blob: c3d835c308436a5a50d158420ba827c80b95e8af (plain)
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
126
127
128
#!/bin/sh
set -e

rcs="$1"
srcdir="$2"
repository="$3"

usage () {
	echo "usage: ikiwiki-makerepo svn|git|monotone srcdir repository" >&2
	echo "       ikiwiki-makerepo bzr|mercurial srcdir" >&2
	exit 1
}

if [ -z "$rcs" ] || [ -z "$srcdir" ]; then
	usage
fi

if [ ! -d "$srcdir" ]; then
	echo "srcdir $srcdir not found" >&2 
	exit 1
fi

if [ "$rcs" != mercurial ] && [ "$rcs" != bzr ]; then
	if [ -z "$repository" ]; then
		echo "you need to specify both a srcdir and a repository for $rcs" >&2
		usage
	fi
	if [ -e "$repository" ]; then
		echo "repository $repository already exists, aborting" >&2 
		exit 1
	fi
	repository="$(perl -e 'use Cwd q{abs_path}; $r=shift; $r=~s/\/*$//; print abs_path($r)' "$repository")"
	if [ -z "$repository" ]; then
		echo "internal error finding repository abs_path" >&2
		exit 1
	fi
fi

echo "Importing $srcdir into $rcs"

case "$rcs" in
svn)
	if [ -e "$srcdir/.svn" ]; then
		echo "$srcdir already seems to be a svn working copy" >&2
		exit 1
	fi
	svnadmin create "$repository"
	svn mkdir "file://$repository/trunk" -m "create trunk directory"
	cd "$srcdir"
	svn co "file://$repository/trunk" .
	svn propset svn:ignore ".ikiwiki" .
	svn add *
	svn commit -m "initial import"
	echo "Directory $srcdir is now a checkout of $rcs repository $repository"
;;
git)
	# There are better ways to do this, but this works with older
	# versions of git.)
	mkdir -p "$repository"
	(cd "$repository" && git --bare init --shared)

	cd "$srcdir"
	git init
	echo /.ikiwiki > .gitignore
	echo /recentchanges >> .gitignore
	git add .
	git commit -m "initial commit"
	git remote add origin "$repository"
	git config branch.master.merge refs/heads/master
	git config branch.master.remote origin
	git push --all
	echo "Directory $srcdir is now a clone of $rcs repository $repository"
;;
mercurial)
	hg init "$srcdir"
	cd "$srcdir"
	echo .ikiwiki > .hgignore
	hg add * .hgignore
	hg commit -m "initial import"
	echo "Directory $srcdir is now set up as a mercurial repository"
;;
bzr)
	bzr init "$srcdir"
	cd "$srcdir"
	echo .ikiwiki > .bzrignore
	bzr add * .bzrignore
	bzr commit -m "initial import"
	echo "Directory $srcdir is now set up as a bzr repository"
;;
monotone)
	if [ -e "$srcdir/_MTN" ]; then
		echo "$srcdir already seems to be a monotone working copy" >&2
		exit 1
	fi

	mkdir -p "$(dirname "$repository")"
	mtn db init -d "$repository"

	cleaned_srcdir=$(basename "$srcdir" | tr -s "[:space:]" "_" | sed 's/_$//g')
	reverse_hostname=$( (hostname -f 2>/dev/null || hostname) |\
		tr  "." "\n" | ( tac 2>/dev/null || tail -r ) | tr "\n" "." )
	branch_name="$reverse_hostname$cleaned_srcdir"
	mtn setup -d "$repository" -b "$branch_name" "$srcdir"

	cd "$srcdir"
	echo \.ikiwiki$ > .mtn-ignore
	mtn add -R .
	# this expects that you already have a working mtn environment
	# with a default key floating around...
	mtn ci -m "initial import"
	echo "Directory $srcdir is now set up as a monotone repository"
	echo ""
	echo "Note: If your monotone key has a passphrase, you need to configure"
	echo "monotone to automatically use it. Otherwise, web commits to ikiwiki"
	echo "will fail."
	echo ""
	echo "You can create a $srcdir/_MTN/monotonerc"
	echo "containing the passphrase:"
	echo ""
	echo "function get_passphrase (branchname)"
	echo '    return "passphrasehere"'
	echo "end"
;;
*)
	echo "Unsupported revision control system $rcs" >&2
	usage
;;
esac