*.sh: remove hard-coded bits with config.pl
[girocco/ztw.git] / clone.sh.in
blob6411037f8fadf7c498f03cc87662af4ab4c1411a
1 #!/bin/bash
3 export PATH=@bin_path@:$PATH
5 set -e
7 proj="$1"
9 clone_project() {
10 log="$(mktemp -t repomgr-XXXXXX)"
11 url="$(cat base_url)"
12 mail="$(cat owner)"
14 bang() {
15 if ! "$@" >>"$log" 2>&1; then
17 echo "$* failed with error code $?"
18 echo "Log follows:"
19 cat "$log"
20 } | mail -s "[@site_domain@] $proj clone failed" "$mail",@site_admin@
22 # This removes any remnants from @repo_path@/$proj.git _and_ gets rid
23 # of the group record.
24 perl -I@repomgr_path@/cgi -MGit::RepoCGI -e 'Git::RepoCGI::Project->ghost('"'$proj'"')->delete;'
25 cd "$basedir" && rm -rf "$proj"/* && rmdir -p "$proj"
26 rm "$log"
27 exit 1
31 ref=()
32 if [ -s objects/info/alternates ]; then
33 ref=(--reference "$(cat objects/info/alternates | sed 's#/objects$##')")
35 bang git clone "${ref[@]}" --bare "$url" repodir
36 ! [ -d @repo_path@/"$proj".git ]
37 lproj="$(echo "$proj" | sed 's/^\(.*\/\)\(.*\)/\1/')"
38 if [ z"$lproj" != z"$proj" ]; then
39 bang mkdir -m 0775 -p @repo_path@/"$lproj"
41 bang mv repodir @repo_path@/"$proj".git
42 bang mkdir -m 0775 -p ctags
43 bang chmod g+w base_url owner description homepage README.html
44 bang mv base_url ctags owner description homepage README.html @repo_path@/"$proj".git/
45 #bang mv objects/info/alternates @repo_path@/"$proj".git/objects/info/alternates # git clone should've set up that for us
46 GIT_DIR=@repo_path@/"$proj".git bang git config --bool --add mirror.allowed true
47 GIT_DIR=@repo_path@/"$proj".git bang git update-server-info
48 cd "$basedir" && rm -rf "$proj"/* && rmdir -p "$proj"
49 # NO bang AT THIS POINT! rm -r depends on cwd.
50 mail -s "[@site_domain@] $proj clone completed" "$mail",@site_admin@ <<EOT
51 Congratulations! The clone of project $proj just completed. You can now adjust
52 the project settings at
54 http://@site_domain@/m/editproj.cgi?name=$proj
56 Then check out the cool stuff at http://@site_domain@/w/$proj.git !
57 EOT
58 rm "$log"
61 basedir=$(pwd)
63 if [ -f "$proj"/base_url ]; then
64 cd "$proj"
65 clone_project
66 else
67 # a collection of subprojects
68 find "$proj" -name base_url |
69 sed -e 's/\/base_url$//' |
70 while read proj; do
71 (cd "$proj" && clone_project) || :
72 done