chiark / gitweb /
7171ac7cd34338c7f876e3261467f092ba0342d3
[adns.git] / 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 1999-05-09 gplvslgpl
47
48 abandondatedbranch 2000-05-07 ipv6
49 abandonbranch branch-0-7-inftodebug abandon.2000-03-26.infotodebug-0.7
50
51 graftmergein () {
52         local desc=$1
53         local mergecommit=$2
54         local branchname=branch-$desc
55         mkdir -p .git/info
56         local branchtip=`git rev-parse $branchname~0`
57         local oldparents=`git-log -n1 --pretty=format:%P $mergecommit`
58         cat <<END >>.git/info/grafts
59 $2 $oldparents $branchtip
60 END
61         git branch -D $branchname
62         ensurenotag  mergepoint-$desc
63 }
64
65 graftmergein logcallbackfn 741a795cdaa539b48f83afbc0ac8e471543b9bf6
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=git-to-cvs-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 cat >$tmp/msg-filter <<'FEND'
90 perl -ne '
91                 $out .= $_;
92         END {
93                 if ($out =~ m/^\@\@/s &&
94                     $out =~ m/^(?!-)(?:\+ )?[^\@ ].*$/m) {
95                         print $&, "\n\n" or die $!;
96                 }
97                 print $out or die $!;
98         }
99 '
100 FEND
101 chmod +x $tmp/msg-filter
102
103 cat >$tmp/tree-filter <<'FEND'
104         set -e
105         if test -f GPL-vs-LGPL; then
106                 cat <<'END' GPL-vs-LGPL >GPL-vs-LGPL.new
107 NB that NO VERSIONS of this file have been released, and I do not
108 intend to publish this version.  If you get this file from a
109 work-in-progress or abandoned branch, old old version, in a version
110 control system (eg CVS or git) I definitely do not intend the licence
111 exceptions in it to apply - these were all drafts, as you should know
112 if you know what retrieving work in progress, old or abandoned
113 versions or branches means !
114
115   - Ian Jackson, 29th April 2014.
116
117 END
118                 mv -f GPL-vs-LGPL.new GPL-vs-LGPL
119         fi
120         set +e
121 FEND
122 chmod +x $tmp/tree-filter
123
124 git-filter-branch --tree-filter $tmp/tree-filter --msg-filter $tmp/msg-filter \
125         `git-show-ref | awk '{print $2}'`
126
127 git-show-ref | awk '{print $2}' | grep '^refs/original/' \
128         | xargs -n1 git-update-ref -d
129
130 rm -rf $tmp/converted
131 mkdir $tmp/converted
132 cd $tmp/converted
133 git init
134 git fetch $tmp/adjust 'refs/*:refs/*'
135 git checkout master