2bcace470b25fa3aac8b62274ddf5e2c41e5dae9
[adns] / convert
1 #!/bin/sh
2 set -ex
3 base=$HOME/things/Adns/Cvs-Convert
4 cd $base
5 tmp=$base/tmp
6
7 rm -rf converted
8
9 if ! test -d $tmp/git-cvsi; then
10 rm -rf tmp
11 mkdir tmp
12 git cvsimport -d `pwd`/cvs-repo -C tmp/git-cvsi.new -k -p --norc adns
13 mv tmp/git-cvsi.new tmp/git-cvsi
14 fi
15 cd tmp
16
17 rsync -aH --delete git-cvsi/. adjust
18 cd adjust
19
20 abandonbranch () {
21 local oldbranchname=$1
22 local newtagname=$2
23 git tag $newtagname $oldbranchname
24 git branch -D $oldbranchname
25 }
26 ensurenotag () {
27 local tagname=$1
28 # these two together unconditionally delete the tag if it exists
29 git tag -f $tagname master
30 git tag -d $tagname
31 }
32 abandondatedbranch () {
33 local date=$1
34 local olddesc=$2
35 local newdesc=$3
36 if [ "x$newdesc" = x ]; then newdesc=$olddesc; fi
37 abandonbranch branch-$date-$olddesc abandon.$date.$newdesc
38 ensurenotag branchpoint-$date-$olddesc master
39 }
40
41 abandonbranch branch-rrtypenoenum abandon.1998-10-04.rrtypenoenum
42 abandondatedbranch 1999-04-10 mthread multithread
43 abandondatedbranch 1999-04-11 ipv6
44 abandondatedbranch 1999-04-11 pollfds
45
46 abandondatedbranch 2000-05-07 ipv6
47 abandonbranch branch-0-7-inftodebug abandon.2000-03-26.infotodebug-0.7
48
49 graftmergein () {
50 local desc=$1
51 local mergecommit=$2
52 local branchname=branch-$desc
53 mkdir -p .git/info
54 local branchtip=`git rev-parse $branchname~0`
55 local oldparents=`git-log -n1 --pretty=format:%P $mergecommit`
56 cat <<END >>.git/info/grafts
57 $2 $oldparents $branchtip
58 END
59 git branch -D $branchname
60 ensurenotag mergepoint-$desc
61 ensurenotag branchpoint-$desc
62 }
63
64 graftmergein logcallbackfn 741a795cdaa539b48f83afbc0ac8e471543b9bf6
65 graftmergein 1999-05-09-gplvslgpl e7cf3a99e5829bf53a9f36e08769787a78261045
66
67 xargs git tag -d <<END
68 tochiark-1998-11-08
69 fromchiark-1998-11-09
70 tochiark-1998-11-09-b
71 fromchiark-1998-11-14
72 tochiark-1998-11-15
73 tochiark-1998-11-17
74 fromchiark-1998-11-28
75 END
76
77 git checkout master
78 scr=cvs-to-git-conversion-script
79 cp $base/convert $scr
80 git add $scr
81 git commit -m "$scr: record the script
82
83 Record the script we used to convert the CVS repo to git"
84 git rm $scr
85 git commit -m "$scr: delete the script
86
87 We have in fact done the conversion and don't need the script any more."
88
89 git branch -d origin
90 git tag cvs-to-git-conversion
91
92 cat >$tmp/msg-filter <<'FEND'
93 perl -ne '
94 $out .= $_;
95 END {
96 if ($out =~ m/^\@\@/s &&
97 $out =~ m/^(?:\+ )?[^\@ ].*\w.*$/m) {
98 print $&, "\n\n" or die $!;
99 }
100 print $out or die $!;
101 }
102 '
103 FEND
104 chmod +x $tmp/msg-filter
105
106 git-filter-branch --msg-filter $tmp/msg-filter \
107 `git-show-ref | awk '{print $2}'`
108
109 git-show-ref | awk '{print $2}' | grep '^refs/original/' \
110 | xargs -n1 git-update-ref -d
111
112 rm -rf $tmp/converted
113 mkdir $tmp/converted
114 cd $tmp/converted
115 git init
116 git fetch -u $tmp/adjust 'refs/*:refs/*'
117 git checkout master