|
1 Create a repo with some stuff in it: |
|
2 |
|
3 $ hg init a |
|
4 $ cd a |
|
5 $ echo a > a |
|
6 $ echo a > d |
|
7 $ echo a > e |
|
8 $ hg ci -qAm0 |
|
9 $ echo b > a |
|
10 $ hg ci -m1 -u bar |
|
11 $ hg mv a b |
|
12 $ hg ci -m2 |
|
13 $ hg cp b c |
|
14 $ hg ci -m3 -u baz |
|
15 $ echo b > d |
|
16 $ echo f > e |
|
17 $ hg ci -m4 |
|
18 $ hg up -q 3 |
|
19 $ echo b > e |
|
20 $ hg branch -q stable |
|
21 $ hg ci -m5 |
|
22 $ hg merge -q default --tool internal:local |
|
23 $ hg branch -q default |
|
24 $ hg ci -m6 |
|
25 |
|
26 Need to specify a rev: |
|
27 |
|
28 $ hg graft |
|
29 abort: no revisions specified |
|
30 [255] |
|
31 |
|
32 Can't graft ancestor: |
|
33 |
|
34 $ hg graft 1 2 |
|
35 skipping ancestor revision 1 |
|
36 skipping ancestor revision 2 |
|
37 [255] |
|
38 |
|
39 Can't graft with dirty wd: |
|
40 |
|
41 $ hg up -q 0 |
|
42 $ echo foo > a |
|
43 $ hg graft 1 |
|
44 abort: outstanding uncommitted changes |
|
45 [255] |
|
46 $ hg revert a |
|
47 |
|
48 Graft a rename: |
|
49 |
|
50 $ hg graft 2 -u foo |
|
51 grafting revision 2 |
|
52 merging a and b to b |
|
53 $ hg export tip --git |
|
54 # HG changeset patch |
|
55 # User foo |
|
56 # Date 0 0 |
|
57 # Node ID d2e44c99fd3f31c176ea4efb9eca9f6306c81756 |
|
58 # Parent 68795b066622ca79a25816a662041d8f78f3cd9e |
|
59 2 |
|
60 |
|
61 diff --git a/a b/b |
|
62 rename from a |
|
63 rename to b |
|
64 --- a/a |
|
65 +++ b/b |
|
66 @@ -1,1 +1,1 @@ |
|
67 -a |
|
68 +b |
|
69 |
|
70 Look for extra:source |
|
71 |
|
72 $ hg log --debug -r tip |
|
73 changeset: 7:d2e44c99fd3f31c176ea4efb9eca9f6306c81756 |
|
74 tag: tip |
|
75 parent: 0:68795b066622ca79a25816a662041d8f78f3cd9e |
|
76 parent: -1:0000000000000000000000000000000000000000 |
|
77 manifest: 7:5d59766436fd8fbcd38e7bebef0f6eaf3eebe637 |
|
78 user: foo |
|
79 date: Thu Jan 01 00:00:00 1970 +0000 |
|
80 files+: b |
|
81 files-: a |
|
82 extra: branch=default |
|
83 extra: source=5c095ad7e90f871700f02dd1fa5012cb4498a2d4 |
|
84 description: |
|
85 2 |
|
86 |
|
87 |
|
88 |
|
89 Graft out of order, skipping a merge and a duplicate |
|
90 |
|
91 $ hg graft 1 5 4 3 'merge()' 2 --debug |
|
92 skipping ungraftable merge revision 6 |
|
93 scanning for duplicate grafts |
|
94 skipping already grafted revision 2 |
|
95 grafting revision 1 |
|
96 searching for copies back to rev 1 |
|
97 unmatched files in local: |
|
98 a.orig |
|
99 b |
|
100 all copies found (* = to merge, ! = divergent): |
|
101 b -> a * |
|
102 checking for directory renames |
|
103 resolving manifests |
|
104 overwrite False partial False |
|
105 ancestor 68795b066622 local d2e44c99fd3f+ remote 5d205f8b35b6 |
|
106 b: local copied/moved to a -> m |
|
107 preserving b for resolve of b |
|
108 updating: b 1/1 files (100.00%) |
|
109 searching for copies back to rev 1 |
|
110 unmatched files in local: |
|
111 a |
|
112 unmatched files in other: |
|
113 b |
|
114 all copies found (* = to merge, ! = divergent): |
|
115 b -> a * |
|
116 checking for directory renames |
|
117 b |
|
118 b: searching for copy revision for a |
|
119 b: copy a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 |
|
120 grafting revision 5 |
|
121 searching for copies back to rev 1 |
|
122 unmatched files in local: |
|
123 a.orig |
|
124 resolving manifests |
|
125 overwrite False partial False |
|
126 ancestor 4c60f11aa304 local 6f5ea6ac8b70+ remote 97f8bfe72746 |
|
127 e: remote is newer -> g |
|
128 updating: e 1/1 files (100.00%) |
|
129 getting e |
|
130 searching for copies back to rev 1 |
|
131 unmatched files in local: |
|
132 c |
|
133 all copies found (* = to merge, ! = divergent): |
|
134 c -> b * |
|
135 checking for directory renames |
|
136 e |
|
137 grafting revision 4 |
|
138 searching for copies back to rev 1 |
|
139 unmatched files in local: |
|
140 a.orig |
|
141 resolving manifests |
|
142 overwrite False partial False |
|
143 ancestor 4c60f11aa304 local 77eb504366ab+ remote 9c233e8e184d |
|
144 e: versions differ -> m |
|
145 d: remote is newer -> g |
|
146 preserving e for resolve of e |
|
147 updating: d 1/2 files (50.00%) |
|
148 getting d |
|
149 updating: e 2/2 files (100.00%) |
|
150 picked tool 'internal:merge' for e (binary False symlink False) |
|
151 merging e |
|
152 my e@77eb504366ab+ other e@9c233e8e184d ancestor e@68795b066622 |
|
153 warning: conflicts during merge. |
|
154 merging e failed! |
|
155 searching for copies back to rev 1 |
|
156 unmatched files in local: |
|
157 c |
|
158 all copies found (* = to merge, ! = divergent): |
|
159 c -> b * |
|
160 checking for directory renames |
|
161 abort: unresolved conflicts, can't continue |
|
162 (use hg resolve and hg graft --continue) |
|
163 [255] |
|
164 |
|
165 Continue without resolve should fail: |
|
166 |
|
167 $ hg graft -c |
|
168 grafting revision 4 |
|
169 abort: unresolved merge conflicts (see hg help resolve) |
|
170 [255] |
|
171 |
|
172 Fix up: |
|
173 |
|
174 $ echo b > e |
|
175 $ hg resolve -m e |
|
176 |
|
177 Continue with a revision should fail: |
|
178 |
|
179 $ hg graft -c 6 |
|
180 abort: can't specify --continue and revisions |
|
181 [255] |
|
182 |
|
183 Continue for real, clobber usernames |
|
184 |
|
185 $ hg graft -c -U |
|
186 grafting revision 4 |
|
187 grafting revision 3 |
|
188 |
|
189 Compare with original: |
|
190 |
|
191 $ hg diff -r 6 |
|
192 $ hg status --rev 0:. -C |
|
193 M d |
|
194 M e |
|
195 A b |
|
196 a |
|
197 A c |
|
198 a |
|
199 R a |
|
200 |
|
201 View graph: |
|
202 |
|
203 $ hg --config extensions.graphlog= log -G --template '{author}@rev: {desc}\n' |
|
204 @ test@rev: 3 |
|
205 | |
|
206 o test@rev: 4 |
|
207 | |
|
208 o test@rev: 5 |
|
209 | |
|
210 o bar@rev: 1 |
|
211 | |
|
212 o foo@rev: 2 |
|
213 | |
|
214 | o test@rev: 6 |
|
215 | |\ |
|
216 | | o test@rev: 5 |
|
217 | | | |
|
218 | o | test@rev: 4 |
|
219 | |/ |
|
220 | o baz@rev: 3 |
|
221 | | |
|
222 | o test@rev: 2 |
|
223 | | |
|
224 | o bar@rev: 1 |
|
225 |/ |
|
226 o test@rev: 0 |
|
227 |