aboutsummaryrefslogtreecommitdiff
path: root/ikiwiki-makerepo
blob: b733bd13ab96d1801db4e31d0cc01f1f7e890f4a (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
#!/bin/sh
set -e

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

usage () {
	echo "usage: ikiwiki-makerepo svn|git 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"
;;
*)
	echo "Unsupported revision control system $rcs" >&2
	usage
;;
esac