|
1 #!/bin/sh |
|
2 |
|
3 HGMERGE=true; export HGMERGE |
|
4 |
|
5 echo '[extensions]' >> $HGRCPATH |
|
6 echo 'hgext.graphlog =' >> $HGRCPATH |
|
7 echo 'hgext.convert =' >> $HGRCPATH |
|
8 |
|
9 glog() |
|
10 { |
|
11 hg glog --template '#rev# "#desc#" files: #files#\n' "$@" |
|
12 } |
|
13 |
|
14 hg init source |
|
15 cd source |
|
16 |
|
17 echo foo > foo |
|
18 echo baz > baz |
|
19 mkdir dir |
|
20 echo dir/file >> dir/file |
|
21 echo dir/file2 >> dir/file2 |
|
22 hg ci -d '0 0' -qAm '0: add foo baz dir/' |
|
23 |
|
24 echo bar > bar |
|
25 echo quux > quux |
|
26 hg copy foo copied |
|
27 hg ci -d '1 0' -qAm '1: add bar quux; copy foo to copied' |
|
28 |
|
29 echo >> foo |
|
30 hg ci -d '2 0' -m '2: change foo' |
|
31 |
|
32 hg up -qC 1 |
|
33 echo >> bar |
|
34 echo >> quux |
|
35 hg ci -d '3 0' -m '3: change bar quux' |
|
36 |
|
37 hg up -qC 2 |
|
38 hg merge -qr 3 |
|
39 echo >> bar |
|
40 echo >> baz |
|
41 hg ci -d '4 0' -m '4: first merge; change bar baz' |
|
42 |
|
43 echo >> bar |
|
44 echo 1 >> baz |
|
45 echo >> quux |
|
46 hg ci -d '5 0' -m '5: change bar baz quux' |
|
47 |
|
48 hg up -qC 4 |
|
49 echo >> foo |
|
50 echo 2 >> baz |
|
51 hg ci -d '6 0' -m '6: change foo baz' |
|
52 |
|
53 hg up -qC 5 |
|
54 hg merge -qr 6 |
|
55 echo >> bar |
|
56 hg ci -d '7 0' -m '7: second merge; change bar' |
|
57 |
|
58 echo >> foo |
|
59 hg ci -m '8: change foo' |
|
60 |
|
61 glog |
|
62 |
|
63 echo '% final file versions in this repo:' |
|
64 hg manifest --debug |
|
65 hg debugrename copied |
|
66 echo |
|
67 |
|
68 cd .. |
|
69 |
|
70 splitrepo() |
|
71 { |
|
72 msg="$1" |
|
73 files="$2" |
|
74 opts=$3 |
|
75 echo "% $files: $msg" |
|
76 prefix=`echo "$files" | sed -e 's/ /-/g'` |
|
77 fmap="$prefix.fmap" |
|
78 repo="$prefix.repo" |
|
79 for i in $files; do |
|
80 echo "include $i" >> "$fmap" |
|
81 done |
|
82 hg -q convert $opts --filemap "$fmap" --datesort source "$repo" |
|
83 glog -R "$repo" |
|
84 hg -R "$repo" manifest --debug |
|
85 } |
|
86 |
|
87 splitrepo 'skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd' foo |
|
88 |
|
89 splitrepo 'merges are not merges anymore' bar |
|
90 |
|
91 splitrepo '1st merge is not a merge anymore; 2nd still is' baz |
|
92 |
|
93 splitrepo 'we add additional merges when they are interesting' 'foo quux' |
|
94 |
|
95 splitrepo 'partial conversion' 'bar quux' '-r 3' |
|
96 splitrepo 'complete the partial conversion' 'bar quux' |
|
97 |
|
98 rm -r foo.repo |
|
99 splitrepo 'partial conversion' 'foo' '-r 3' |
|
100 splitrepo 'complete the partial conversion' 'foo' |
|
101 |
|
102 splitrepo 'copied file; source not included in new repo' copied |
|
103 hg --cwd copied.repo debugrename copied |
|
104 |
|
105 splitrepo 'copied file; source included in new repo' 'foo copied' |
|
106 hg --cwd foo-copied.repo debugrename copied |
|
107 |
|
108 cat > renames.fmap <<EOF |
|
109 include dir |
|
110 exclude dir/file2 |
|
111 rename dir dir2 |
|
112 include foo |
|
113 include copied |
|
114 rename foo foo2 |
|
115 rename copied copied2 |
|
116 EOF |
|
117 hg -q convert --filemap renames.fmap --datesort source renames.repo |
|
118 glog -R renames.repo |
|
119 hg -R renames.repo manifest --debug |
|
120 hg --cwd renames.repo debugrename copied2 |
|
121 echo 'copied:' |
|
122 hg --cwd source cat copied |
|
123 echo 'copied2:' |
|
124 hg --cwd renames.repo cat copied2 |