Give git-repack the -q option
[girocco.git] / clone.sh
blob3b7e0d92778350499574e967d28fb66d67617744
1 #!/bin/bash
3 export PATH=/home/pasky/bin:$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 "[repo.or.cz] $proj clone failed" "$mail",pasky@ucw.cz
22 # This removes any remnants from /srv/git/$proj.git _and_ gets rid
23 # of the group record.
24 perl -I/home/repo/repomgr/cgi -MGit::RepoCGI -e 'Git::RepoCGI::Project->ghost('"'$proj'"')->delete;'
25 cd .. && rm -r "$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/\.\.\/\.\.\/\.\./\/srv\/git/;s/objects$//')")
35 bang git clone "${ref[@]}" --bare "$url" repodir
36 GIT_DIR=repodir bang git repack -a -d
37 ! [ -d /srv/git/"$proj".git ]
38 lproj="$(echo "$proj" | sed 's/^\(.*\/\)\(.*\)/\1/')"
39 if [ z"$lproj" != z"$proj" ]; then
40 bang mkdir -m 0775 -p /srv/git/"$lproj"
42 bang mv repodir /srv/git/"$proj".git
43 bang chmod g+w base_url owner description homepage README.html
44 bang mv base_url owner description homepage README.html /srv/git/"$proj".git/
45 #bang mv objects/info/alternates /srv/git/"$proj".git/objects/info/alternates # git clone should've set up that for us
46 GIT_DIR=/srv/git/"$proj".git bang git config --bool --add mirror.allowed true
47 GIT_DIR=/srv/git/"$proj".git bang git update-server-info
48 cd .. && rm -r "$proj"
49 # NO bang AT THIS POINT! rm -r depends on cwd.
50 echo "Congratulations! You can adjust the project settings in the future at http://repo.or.cz/m/p/editproj.cgi." | mail -s "[repo.or.cz] $proj clone completed" "$mail",pasky@ucw.cz
51 rm "$log"
54 if [ -f base_url ]; then
55 cd "$proj"
56 clone_project
57 else
58 # a collection of subprojects
59 find "$proj" -name base_url |
60 sed -e 's/\/base_url$//' |
61 while read proj; do
62 (cd "$proj" && clone_project) || :
63 done