##// END OF EJS Templates
merge: various tidying...
Matt Mackall -
r3314:b1645690 default
parent child Browse files
Show More
@@ -1,444 +1,428
1 1 # merge.py - directory-level update/merge handling for Mercurial
2 2 #
3 3 # Copyright 2006 Matt Mackall <mpm@selenic.com>
4 4 #
5 5 # This software may be used and distributed according to the terms
6 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 8 from node import *
9 9 from i18n import gettext as _
10 10 from demandload import *
11 11 demandload(globals(), "errno util os tempfile")
12 12
13 13 def filemerge(repo, fw, fo, wctx, mctx):
14 14 """perform a 3-way merge in the working directory
15 15
16 16 fw = filename in the working directory and first parent
17 17 fo = filename in other parent
18 18 wctx, mctx = working and merge changecontexts
19 19
20 20 TODO:
21 21 if fw is copied in the working directory, we get confused
22 22 implement move and fd
23 23 """
24 24
25 25 def temp(prefix, ctx):
26 26 pre = "%s~%s." % (os.path.basename(ctx.path()), prefix)
27 27 (fd, name) = tempfile.mkstemp(prefix=pre)
28 28 f = os.fdopen(fd, "wb")
29 29 repo.wwrite(ctx.path(), ctx.data(), f)
30 30 f.close()
31 31 return name
32 32
33 33 fcm = wctx.filectx(fw)
34 34 fco = mctx.filectx(fo)
35 35
36 36 if not fco.cmp(fcm.data()): # files identical?
37 37 return 0
38 38
39 39 fca = fcm.ancestor(fco)
40 40 if not fca:
41 41 fca = repo.filectx(fw, fileid=-1)
42 42 a = repo.wjoin(fw)
43 43 b = temp("base", fca)
44 44 c = temp("other", fco)
45 45
46 46 if fw != fo:
47 47 repo.ui.status(_("merging %s and %s\n") % (fw, fo))
48 48 else:
49 49 repo.ui.status(_("merging %s\n") % fw)
50 50
51 51 repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcm, fco, fca))
52 52
53 53 cmd = (os.environ.get("HGMERGE") or repo.ui.config("ui", "merge")
54 54 or "hgmerge")
55 55 r = util.system('%s "%s" "%s" "%s"' % (cmd, a, b, c), cwd=repo.root,
56 56 environ={'HG_FILE': fw,
57 57 'HG_MY_NODE': str(wctx.parents()[0]),
58 58 'HG_OTHER_NODE': str(mctx)})
59 59 if r:
60 60 repo.ui.warn(_("merging %s failed!\n") % fw)
61 61
62 62 os.unlink(b)
63 63 os.unlink(c)
64 64 return r
65 65
66 66 def checkunknown(wctx, mctx):
67 67 """
68 68 check for collisions between unknown files and files in m2
69 69 """
70 70 man = mctx.manifest()
71 71 for f in wctx.unknown():
72 72 if f in man:
73 73 if mctx.filectx(f).cmp(wctx.filectx(f).data()):
74 74 raise util.Abort(_("'%s' already exists in the working"
75 75 " dir and differs from remote") % f)
76 76
77 77 def forgetremoved(wctx, mctx):
78 78 """
79 79 Forget removed files
80 80
81 81 If we're jumping between revisions (as opposed to merging), and if
82 82 neither the working directory nor the target rev has the file,
83 83 then we need to remove it from the dirstate, to prevent the
84 84 dirstate from listing the file when it is no longer in the
85 85 manifest.
86 86 """
87 87
88 88 action = []
89 89 man = mctx.manifest()
90 90 for f in wctx.deleted() + wctx.removed():
91 91 if f not in man:
92 92 action.append((f, "f"))
93 93
94 94 return action
95 95
96 96 def nonoverlap(d1, d2):
97 97 """
98 98 Return list of elements in d1 not in d2
99 99 """
100 100
101 101 l = []
102 102 for d in d1:
103 103 if d not in d2:
104 104 l.append(d)
105 105
106 106 l.sort()
107 107 return l
108 108
109 109 def findold(fctx, limit):
110 110 """
111 111 find files that path was copied from, back to linkrev limit
112 112 """
113 113
114 114 old = {}
115 115 orig = fctx.path()
116 116 visit = [fctx]
117 117 while visit:
118 118 fc = visit.pop()
119 119 if fc.rev() < limit:
120 120 continue
121 121 if fc.path() != orig and fc.path() not in old:
122 122 old[fc.path()] = 1
123 123 visit += fc.parents()
124 124
125 125 old = old.keys()
126 126 old.sort()
127 127 return old
128 128
129 129 def findcopies(repo, m1, m2, limit):
130 130 """
131 131 Find moves and copies between m1 and m2 back to limit linkrev
132 132 """
133 133
134 134 if not repo.ui.config("merge", "followcopies"):
135 135 return {}
136 136
137 137 # avoid silly behavior for update from empty dir
138 138 if not m1:
139 139 return {}
140 140
141 141 dcopies = repo.dirstate.copies()
142 142 copy = {}
143 143 match = {}
144 144 u1 = nonoverlap(m1, m2)
145 145 u2 = nonoverlap(m2, m1)
146 146 ctx = util.cachefunc(lambda f,n: repo.filectx(f, fileid=n[:20]))
147 147
148 148 def checkpair(c, f2, man):
149 149 ''' check if an apparent pair actually matches '''
150 150 c2 = ctx(f2, man[f2])
151 151 ca = c.ancestor(c2)
152 152 if ca and ca.path() == c.path() or ca.path() == c2.path():
153 153 copy[c.path()] = f2
154 154 copy[f2] = c.path()
155 155
156 156 for f in u1:
157 157 c = ctx(dcopies.get(f, f), m1[f])
158 158 for of in findold(c, limit):
159 159 if of in m2:
160 160 checkpair(c, of, m2)
161 161 else:
162 162 match.setdefault(of, []).append(f)
163 163
164 164 for f in u2:
165 165 c = ctx(f, m2[f])
166 166 for of in findold(c, limit):
167 167 if of in m1:
168 168 checkpair(c, of, m1)
169 169 elif of in match:
170 170 for mf in match[of]:
171 171 checkpair(c, mf, m1)
172 172
173 173 return copy
174 174
175 175 def manifestmerge(repo, p1, p2, pa, overwrite, partial):
176 176 """
177 177 Merge manifest m1 with m2 using ancestor ma and generate merge action list
178 178 """
179 179
180 repo.ui.note(_("resolving manifests\n"))
181 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
182 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
183
180 184 m1 = p1.manifest()
181 185 m2 = p2.manifest()
182 186 ma = pa.manifest()
183 187 backwards = (pa == p2)
188 action = []
189 copy = {}
184 190
185 191 def fmerge(f, f2=None, fa=None):
186 192 """merge executable flags"""
187 193 if not f2:
188 194 f2 = f
189 195 fa = f
190 196 a, b, c = ma.execf(fa), m1.execf(f), m2.execf(f2)
191 197 return ((a^b) | (a^c)) ^ a
192 198
193 action = []
194
195 199 def act(msg, m, f, *args):
196 200 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
197 201 action.append((f, m) + args)
198 202
199 copy = {}
200 203 if not (backwards or overwrite):
201 204 copy = findcopies(repo, m1, m2, pa.rev())
202 205
203 206 # Compare manifests
204 207 for f, n in m1.iteritems():
205 208 if partial and not partial(f):
206 209 continue
207 210 if f in m2:
208 211 # are files different?
209 212 if n != m2[f]:
210 213 a = ma.get(f, nullid)
211 214 # are both different from the ancestor?
212 215 if not overwrite and n != a and m2[f] != a:
213 216 act("versions differ", "m", f, f, f, fmerge(f), False)
214 217 # are we clobbering?
215 218 # is remote's version newer?
216 219 # or are we going back in time and clean?
217 220 elif overwrite or m2[f] != a or (backwards and not n[20:]):
218 221 act("remote is newer", "g", f, m2.execf(f))
219 222 # local is newer, not overwrite, check mode bits
220 223 elif fmerge(f) != m1.execf(f):
221 224 act("update permissions", "e", f, m2.execf(f))
222 225 # contents same, check mode bits
223 226 elif m1.execf(f) != m2.execf(f):
224 227 if overwrite or fmerge(f) != m1.execf(f):
225 228 act("update permissions", "e", f, m2.execf(f))
226 229 elif f in copy:
227 230 f2 = copy[f]
228 231 if f in ma: # case 3,20 A/B/A
229 232 act("remote moved", "m", f, f2, f2, fmerge(f, f2, f), True)
230 233 else:
231 234 if f2 in m1: # case 2 A,B/B/B
232 235 act("local copied", "m",
233 236 f, f2, f, fmerge(f, f2, f2), False)
234 237 else: # case 4,21 A/B/B
235 238 act("local moved", "m",
236 239 f, f2, f, fmerge(f, f2, f2), False)
237 240 elif f in ma:
238 241 if n != ma[f] and not overwrite:
239 242 if repo.ui.prompt(
240 243 (_(" local changed %s which remote deleted\n") % f) +
241 244 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("d"):
242 245 act("prompt delete", "r", f)
243 246 else:
244 247 act("other deleted", "r", f)
245 248 else:
246 249 # file is created on branch or in working directory
247 250 if (overwrite and n[20:] != "u") or (backwards and not n[20:]):
248 251 act("remote deleted", "r", f)
249 252
250 253 for f, n in m2.iteritems():
251 254 if partial and not partial(f):
252 255 continue
253 256 if f in m1:
254 257 continue
255 258 if f in copy:
256 259 f2 = copy[f]
257 260 if f2 not in m2: # already seen
258 261 continue
259 262 # rename case 1, A/A,B/A
260 263 act("remote copied", "m", f2, f, f, fmerge(f2, f, f2), False)
261 264 elif f in ma:
262 265 if overwrite or backwards:
263 266 act("recreating", "g", f, m2.execf(f))
264 267 elif n != ma[f]:
265 268 if repo.ui.prompt(
266 269 (_("remote changed %s which local deleted\n") % f) +
267 270 _("(k)eep or (d)elete?"), _("[kd]"), _("k")) == _("k"):
268 271 act("prompt recreating", "g", f, m2.execf(f))
269 272 else:
270 273 act("remote created", "g", f, m2.execf(f))
271 274
272 275 return action
273 276
274 277 def applyupdates(repo, action, wctx, mctx):
275 278 updated, merged, removed, unresolved = 0, 0, 0, 0
276 279 action.sort()
277 280 for a in action:
278 281 f, m = a[:2]
279 282 if f[0] == "/":
280 283 continue
281 284 if m == "r": # remove
282 285 repo.ui.note(_("removing %s\n") % f)
283 286 util.audit_path(f)
284 287 try:
285 288 util.unlink(repo.wjoin(f))
286 289 except OSError, inst:
287 290 if inst.errno != errno.ENOENT:
288 291 repo.ui.warn(_("update failed to remove %s: %s!\n") %
289 292 (f, inst.strerror))
290 293 removed +=1
291 294 elif m == "m": # merge
292 295 f2, fd, flag, move = a[2:]
293 296 if filemerge(repo, f, f2, wctx, mctx):
294 297 unresolved += 1
295 298 else:
296 299 if f != fd:
297 300 repo.ui.debug(_("copying %s to %s\n") % (f, fd))
298 301 repo.wwrite(fd, repo.wread(f))
299 302 if move:
300 303 repo.ui.debug(_("removing %s\n") % f)
301 304 os.unlink(repo.wjoin(f))
302 305
303 306 util.set_exec(repo.wjoin(fd), flag)
304 307 merged += 1
305 308 elif m == "g": # get
306 309 flag = a[2]
307 310 repo.ui.note(_("getting %s\n") % f)
308 311 t = mctx.filectx(f).data()
309 312 repo.wwrite(f, t)
310 313 util.set_exec(repo.wjoin(f), flag)
311 314 updated += 1
312 315 elif m == "e": # exec
313 316 flag = a[2]
314 317 util.set_exec(repo.wjoin(f), flag)
315 318
316 319 return updated, merged, removed, unresolved
317 320
318 321 def recordupdates(repo, action, branchmerge, mctx):
319 322 for a in action:
320 323 f, m = a[:2]
321 324 if m == "r": # remove
322 325 if branchmerge:
323 326 repo.dirstate.update([f], 'r')
324 327 else:
325 328 repo.dirstate.forget([f])
326 329 elif m == "f": # forget
327 330 repo.dirstate.forget([f])
328 331 elif m == "g": # get
329 332 if branchmerge:
330 333 repo.dirstate.update([f], 'n', st_mtime=-1)
331 334 else:
332 335 repo.dirstate.update([f], 'n')
333 336 elif m == "m": # merge
334 337 f2, fd, flag, move = a[2:]
335 338 if branchmerge:
336 339 # We've done a branch merge, mark this file as merged
337 340 # so that we properly record the merger later
338 341 repo.dirstate.update([fd], 'm')
339 342 else:
340 343 # We've update-merged a locally modified file, so
341 344 # we set the dirstate to emulate a normal checkout
342 345 # of that file some time in the past. Thus our
343 346 # merge will appear as a normal local file
344 347 # modification.
345 348 f_len = mctx.filectx(f).size()
346 349 repo.dirstate.update([fd], 'n', st_size=f_len, st_mtime=-1)
347 350 if f != f2: # copy/rename
348 351 if move:
349 352 repo.dirstate.update([f], 'r')
350 353 if f != fd:
351 354 repo.dirstate.copy(f, fd)
352 355 else:
353 356 repo.dirstate.copy(f2, fd)
354 357
355 358 def update(repo, node, branchmerge=False, force=False, partial=None,
356 359 wlock=None, show_stats=True, remind=True):
357 360
358 overwrite = force and not branchmerge
359 forcemerge = force and branchmerge
360
361 361 if not wlock:
362 362 wlock = repo.wlock()
363 363
364 ### check phase
365
364 overwrite = force and not branchmerge
365 forcemerge = force and branchmerge
366 366 wc = repo.workingctx()
367 367 pl = wc.parents()
368 p1, p2 = pl[0], repo.changectx(node)
369 pa = p1.ancestor(p2)
370 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
371
372 ### check phase
368 373 if not overwrite and len(pl) > 1:
369 374 raise util.Abort(_("outstanding uncommitted merges"))
370
371 p1, p2 = pl[0], repo.changectx(node)
372 pa = p1.ancestor(p2)
373
374 # is there a linear path from p1 to p2?
375 if pa == p1 or pa == p2:
375 if pa == p1 or pa == p2: # is there a linear path from p1 to p2?
376 376 if branchmerge:
377 377 raise util.Abort(_("there is nothing to merge, just use "
378 378 "'hg update' or look at 'hg heads'"))
379 379 elif not (overwrite or branchmerge):
380 380 raise util.Abort(_("update spans branches, use 'hg merge' "
381 381 "or 'hg update -C' to lose changes"))
382
383 382 if branchmerge and not forcemerge:
384 383 if wc.modified() or wc.added() or wc.removed():
385 384 raise util.Abort(_("outstanding uncommitted changes"))
386 385
387 # resolve the manifest to determine which files
388 # we care about merging
389 repo.ui.note(_("resolving manifests\n"))
390 repo.ui.debug(_(" overwrite %s branchmerge %s partial %s\n") %
391 (overwrite, branchmerge, bool(partial)))
392 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (p1, p2, pa))
393
386 ### calculate phase
394 387 action = []
395
396 388 if not force:
397 389 checkunknown(wc, p2)
398 390 if not branchmerge:
399 391 action += forgetremoved(wc, p2)
400
401 392 action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
402 393
403 394 ### apply phase
404
405 if not branchmerge:
406 # just jump to the new rev
407 fp1, fp2, xp1, xp2 = p2.node(), nullid, str(p2), ''
408 else:
409 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
410
395 if not branchmerge: # just jump to the new rev
396 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
411 397 if not partial:
412 398 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
413 399
414 400 updated, merged, removed, unresolved = applyupdates(repo, action, wc, p2)
415 401
416 # update dirstate
417 if not partial:
418 recordupdates(repo, action, branchmerge, p2)
419 repo.dirstate.setparents(fp1, fp2)
420 repo.hook('update', parent1=xp1, parent2=xp2, error=unresolved)
421
422 402 if show_stats:
423 403 stats = ((updated, _("updated")),
424 404 (merged - unresolved, _("merged")),
425 405 (removed, _("removed")),
426 406 (unresolved, _("unresolved")))
427 407 note = ", ".join([_("%d files %s") % s for s in stats])
428 408 repo.ui.status("%s\n" % note)
429 409 if not partial:
410 recordupdates(repo, action, branchmerge, p2)
411 repo.dirstate.setparents(fp1, fp2)
412 repo.hook('update', parent1=xp1, parent2=xp2, error=unresolved)
413
430 414 if branchmerge:
431 415 if unresolved:
432 416 repo.ui.status(_("There are unresolved merges,"
433 417 " you can redo the full merge using:\n"
434 418 " hg update -C %s\n"
435 419 " hg merge %s\n"
436 420 % (p1.rev(), p2.rev())))
437 421 elif remind:
438 422 repo.ui.status(_("(branch merge, don't forget to commit)\n"))
439 423 elif unresolved:
440 424 repo.ui.status(_("There are unresolved merges with"
441 425 " locally modified files.\n"))
442 426
443 427 return unresolved
444 428
@@ -1,77 +1,77
1 1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 2 pulling from ../test-a
3 3 searching for changes
4 4 adding changesets
5 5 adding manifests
6 6 adding file changes
7 7 added 1 changesets with 1 changes to 1 files (+1 heads)
8 8 (run 'hg heads' to see heads, 'hg merge' to merge)
9 9 merge: warning: conflicts during merge
10 10 merging test.txt
11 11 merging test.txt failed!
12 12 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
13 13 There are unresolved merges, you can redo the full merge using:
14 14 hg update -C 1
15 15 hg merge 2
16 16 pulling from ../test-a
17 17 searching for changes
18 18 adding changesets
19 19 adding manifests
20 20 adding file changes
21 21 added 1 changesets with 1 changes to 1 files (+1 heads)
22 22 (run 'hg heads' to see heads, 'hg merge' to merge)
23 23 merge: warning: conflicts during merge
24 24 resolving manifests
25 overwrite None branchmerge True partial False
26 ancestor 451c744aabcc local a070d41e8360 remote faaea63e63a9
25 overwrite None partial False
26 ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
27 27 test.txt: versions differ -> m
28 28 merging test.txt
29 my test.txt@. other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
29 my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
30 30 merging test.txt failed!
31 31 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
32 32 There are unresolved merges, you can redo the full merge using:
33 33 hg update -C 3
34 34 hg merge 4
35 35 one
36 36 <<<<<<<
37 37 two-point-five
38 38 =======
39 39 two-point-one
40 40 >>>>>>>
41 41 three
42 42 rev offset length base linkrev nodeid p1 p2
43 43 0 0 7 0 0 01365c4cca56 000000000000 000000000000
44 44 1 7 9 1 1 7b013192566a 01365c4cca56 000000000000
45 45 2 16 15 2 2 8fe46a3eb557 01365c4cca56 000000000000
46 46 3 31 27 2 3 fc3148072371 7b013192566a 8fe46a3eb557
47 47 4 58 25 4 4 d40249267ae3 8fe46a3eb557 000000000000
48 48 changeset: 4:a070d41e8360
49 49 tag: tip
50 50 parent: 2:faaea63e63a9
51 51 user: test
52 52 date: Mon Jan 12 13:46:40 1970 +0000
53 53 summary: two -> two-point-one
54 54
55 55 changeset: 3:451c744aabcc
56 56 parent: 1:e409be6afcc0
57 57 parent: 2:faaea63e63a9
58 58 user: test
59 59 date: Mon Jan 12 13:46:40 1970 +0000
60 60 summary: Merge 1
61 61
62 62 changeset: 2:faaea63e63a9
63 63 parent: 0:095c92b91f1a
64 64 user: test
65 65 date: Mon Jan 12 13:46:40 1970 +0000
66 66 summary: Numbers as words
67 67
68 68 changeset: 1:e409be6afcc0
69 69 user: test
70 70 date: Mon Jan 12 13:46:40 1970 +0000
71 71 summary: 2 -> 2.5
72 72
73 73 changeset: 0:095c92b91f1a
74 74 user: test
75 75 date: Mon Jan 12 13:46:40 1970 +0000
76 76 summary: Initial
77 77
@@ -1,25 +1,25
1 1 checkout
2 2 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 3 merge
4 4 resolving manifests
5 overwrite None branchmerge True partial False
6 ancestor f26ec4fc3fa3 local 8e765a822af2 remote af1939970a1c
5 overwrite None partial False
6 ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
7 7 a: remote moved -> m
8 8 b2: remote created -> g
9 9 merging a and b
10 my a@. other b@8e765a822af2 ancestor a@af1939970a1c
10 my a@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
11 11 copying a to b
12 12 removing a
13 13 getting b2
14 14 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
15 15 (branch merge, don't forget to commit)
16 16 M b
17 17 a
18 18 M b2
19 19 R a
20 20 C c2
21 21 blahblah
22 22 rev offset length base linkrev nodeid p1 p2
23 23 0 0 67 0 1 dc51707dfc98 000000000000 000000000000
24 24 1 67 72 1 3 b2494a44f0a9 000000000000 dc51707dfc98
25 25 renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
@@ -1,414 +1,414
1 1 --------------
2 2 test L:up a R:nc a b W: - 1 get local a to b
3 3 --------------
4 4 resolving manifests
5 overwrite None branchmerge True partial False
6 ancestor e300d1c794ec local 735846fee2d7 remote 924404dff337
5 overwrite None partial False
6 ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
7 7 rev: versions differ -> m
8 8 a: remote copied -> m
9 9 merging a and b
10 my a@. other b@735846fee2d7 ancestor a@924404dff337
10 my a@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
11 11 copying a to b
12 12 merging rev
13 my rev@. other rev@735846fee2d7 ancestor rev@924404dff337
13 my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337
14 14 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
15 15 (branch merge, don't forget to commit)
16 16 --------------
17 17 M a
18 18 M b
19 19 a
20 20 --------------
21 21
22 22 --------------
23 23 test L:nc a b R:up a W: - 2 get rem change to a and b
24 24 --------------
25 25 resolving manifests
26 overwrite None branchmerge True partial False
27 ancestor ac809aeed39a local f4db7e329e71 remote 924404dff337
26 overwrite None partial False
27 ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
28 28 a: remote is newer -> g
29 29 b: local copied -> m
30 30 rev: versions differ -> m
31 31 getting a
32 32 merging b and a
33 my b@. other a@f4db7e329e71 ancestor a@924404dff337
33 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
34 34 merging rev
35 my rev@. other rev@f4db7e329e71 ancestor rev@924404dff337
35 my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337
36 36 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
37 37 (branch merge, don't forget to commit)
38 38 --------------
39 39 M a
40 40 M b
41 41 a
42 42 --------------
43 43
44 44 --------------
45 45 test L:up a R:nm a b W: - 3 get local a change to b, remove a
46 46 --------------
47 47 resolving manifests
48 overwrite None branchmerge True partial False
49 ancestor e300d1c794ec local e03727d2d66b remote 924404dff337
48 overwrite None partial False
49 ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
50 50 a: remote moved -> m
51 51 rev: versions differ -> m
52 52 merging a and b
53 my a@. other b@e03727d2d66b ancestor a@924404dff337
53 my a@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
54 54 copying a to b
55 55 removing a
56 56 merging rev
57 my rev@. other rev@e03727d2d66b ancestor rev@924404dff337
57 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
58 58 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
59 59 (branch merge, don't forget to commit)
60 60 --------------
61 61 M b
62 62 a
63 63 --------------
64 64
65 65 --------------
66 66 test L:nm a b R:up a W: - 4 get remote change to b
67 67 --------------
68 68 resolving manifests
69 overwrite None branchmerge True partial False
70 ancestor ecf3cb2a4219 local f4db7e329e71 remote 924404dff337
69 overwrite None partial False
70 ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
71 71 b: local moved -> m
72 72 rev: versions differ -> m
73 73 merging b and a
74 my b@. other a@f4db7e329e71 ancestor a@924404dff337
74 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
75 75 merging rev
76 my rev@. other rev@f4db7e329e71 ancestor rev@924404dff337
76 my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337
77 77 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
78 78 (branch merge, don't forget to commit)
79 79 --------------
80 80 M b
81 81 a
82 82 --------------
83 83
84 84 --------------
85 85 test L: R:nc a b W: - 5 get b
86 86 --------------
87 87 resolving manifests
88 overwrite None branchmerge True partial False
89 ancestor 94b33a1b7f2d local 735846fee2d7 remote 924404dff337
88 overwrite None partial False
89 ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
90 90 rev: versions differ -> m
91 91 a: remote copied -> m
92 92 copying a to b
93 93 merging rev
94 my rev@. other rev@735846fee2d7 ancestor rev@924404dff337
94 my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337
95 95 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
96 96 (branch merge, don't forget to commit)
97 97 --------------
98 98 M b
99 99 a
100 100 C a
101 101 --------------
102 102
103 103 --------------
104 104 test L:nc a b R: W: - 6 nothing
105 105 --------------
106 106 resolving manifests
107 overwrite None branchmerge True partial False
108 ancestor ac809aeed39a local 97c705ade336 remote 924404dff337
107 overwrite None partial False
108 ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
109 109 b: local copied -> m
110 110 rev: versions differ -> m
111 111 merging rev
112 my rev@. other rev@97c705ade336 ancestor rev@924404dff337
112 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
113 113 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
114 114 (branch merge, don't forget to commit)
115 115 --------------
116 116 M b
117 117 a
118 118 C a
119 119 --------------
120 120
121 121 --------------
122 122 test L: R:nm a b W: - 7 get b
123 123 --------------
124 124 resolving manifests
125 overwrite None branchmerge True partial False
126 ancestor 94b33a1b7f2d local e03727d2d66b remote 924404dff337
125 overwrite None partial False
126 ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
127 127 a: remote moved -> m
128 128 rev: versions differ -> m
129 129 copying a to b
130 130 removing a
131 131 merging rev
132 my rev@. other rev@e03727d2d66b ancestor rev@924404dff337
132 my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337
133 133 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
134 134 (branch merge, don't forget to commit)
135 135 --------------
136 136 M b
137 137 a
138 138 --------------
139 139
140 140 --------------
141 141 test L:nm a b R: W: - 8 nothing
142 142 --------------
143 143 resolving manifests
144 overwrite None branchmerge True partial False
145 ancestor ecf3cb2a4219 local 97c705ade336 remote 924404dff337
144 overwrite None partial False
145 ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
146 146 b: local moved -> m
147 147 rev: versions differ -> m
148 148 merging rev
149 my rev@. other rev@97c705ade336 ancestor rev@924404dff337
149 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
150 150 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
151 151 (branch merge, don't forget to commit)
152 152 --------------
153 153 M b
154 154 a
155 155 --------------
156 156
157 157 --------------
158 158 test L:um a b R:um a b W: - 9 do merge with ancestor in a
159 159 --------------
160 160 resolving manifests
161 overwrite None branchmerge True partial False
162 ancestor ec03c2ca8642 local 79cc6877a3b7 remote 924404dff337
161 overwrite None partial False
162 ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
163 163 b: versions differ -> m
164 164 rev: versions differ -> m
165 165 merging b
166 my b@. other b@79cc6877a3b7 ancestor a@924404dff337
166 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
167 167 merging rev
168 my rev@. other rev@79cc6877a3b7 ancestor rev@924404dff337
168 my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337
169 169 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
170 170 (branch merge, don't forget to commit)
171 171 --------------
172 172 M b
173 173 --------------
174 174
175 175 --------------
176 176 test L:nm a b R:nm a c W: - 11 get c, keep b
177 177 --------------
178 178 resolving manifests
179 overwrite None branchmerge True partial False
180 ancestor ecf3cb2a4219 local e6abcc1a30c2 remote 924404dff337
179 overwrite None partial False
180 ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
181 181 rev: versions differ -> m
182 182 c: remote created -> g
183 183 getting c
184 184 merging rev
185 my rev@. other rev@e6abcc1a30c2 ancestor rev@924404dff337
185 my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337
186 186 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
187 187 (branch merge, don't forget to commit)
188 188 --------------
189 189 M c
190 190 C b
191 191 --------------
192 192
193 193 --------------
194 194 test L:nc a b R:up b W: - 12 merge b no ancestor
195 195 --------------
196 196 resolving manifests
197 overwrite None branchmerge True partial False
198 ancestor ac809aeed39a local af30c7647fc7 remote 924404dff337
197 overwrite None partial False
198 ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
199 199 b: versions differ -> m
200 200 rev: versions differ -> m
201 201 merging b
202 my b@. other b@af30c7647fc7 ancestor b@000000000000
202 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
203 203 merging rev
204 my rev@. other rev@af30c7647fc7 ancestor rev@924404dff337
204 my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337
205 205 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
206 206 (branch merge, don't forget to commit)
207 207 --------------
208 208 M b
209 209 C a
210 210 --------------
211 211
212 212 --------------
213 213 test L:up b R:nm a b W: - 13 merge b no ancestor
214 214 --------------
215 215 resolving manifests
216 overwrite None branchmerge True partial False
217 ancestor 59318016310c local e03727d2d66b remote 924404dff337
216 overwrite None partial False
217 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
218 218 a: other deleted -> r
219 219 b: versions differ -> m
220 220 rev: versions differ -> m
221 221 removing a
222 222 merging b
223 my b@. other b@e03727d2d66b ancestor b@000000000000
223 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
224 224 merging rev
225 my rev@. other rev@e03727d2d66b ancestor rev@924404dff337
225 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
226 226 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
227 227 (branch merge, don't forget to commit)
228 228 --------------
229 229 M b
230 230 --------------
231 231
232 232 --------------
233 233 test L:nc a b R:up a b W: - 14 merge b no ancestor
234 234 --------------
235 235 resolving manifests
236 overwrite None branchmerge True partial False
237 ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
236 overwrite None partial False
237 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
238 238 a: remote is newer -> g
239 239 b: versions differ -> m
240 240 rev: versions differ -> m
241 241 getting a
242 242 merging b
243 my b@. other b@8dbce441892a ancestor b@000000000000
243 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
244 244 merging rev
245 my rev@. other rev@8dbce441892a ancestor rev@924404dff337
245 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
246 246 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
247 247 (branch merge, don't forget to commit)
248 248 --------------
249 249 M a
250 250 M b
251 251 --------------
252 252
253 253 --------------
254 254 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
255 255 --------------
256 256 resolving manifests
257 overwrite None branchmerge True partial False
258 ancestor 59318016310c local e03727d2d66b remote 924404dff337
257 overwrite None partial False
258 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
259 259 a: other deleted -> r
260 260 b: versions differ -> m
261 261 rev: versions differ -> m
262 262 removing a
263 263 merging b
264 my b@. other b@e03727d2d66b ancestor b@000000000000
264 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
265 265 merging rev
266 my rev@. other rev@e03727d2d66b ancestor rev@924404dff337
266 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
267 267 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
268 268 (branch merge, don't forget to commit)
269 269 --------------
270 270 M b
271 271 --------------
272 272
273 273 --------------
274 274 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
275 275 --------------
276 276 resolving manifests
277 overwrite None branchmerge True partial False
278 ancestor ac809aeed39a local 8dbce441892a remote 924404dff337
277 overwrite None partial False
278 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
279 279 a: remote is newer -> g
280 280 b: versions differ -> m
281 281 rev: versions differ -> m
282 282 getting a
283 283 merging b
284 my b@. other b@8dbce441892a ancestor b@000000000000
284 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
285 285 merging rev
286 my rev@. other rev@8dbce441892a ancestor rev@924404dff337
286 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
287 287 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
288 288 (branch merge, don't forget to commit)
289 289 --------------
290 290 M a
291 291 M b
292 292 --------------
293 293
294 294 --------------
295 295 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
296 296 --------------
297 297 resolving manifests
298 overwrite None branchmerge True partial False
299 ancestor 0b76e65c8289 local 735846fee2d7 remote 924404dff337
298 overwrite None partial False
299 ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
300 300 b: versions differ -> m
301 301 rev: versions differ -> m
302 302 merging b
303 my b@. other b@735846fee2d7 ancestor b@000000000000
303 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
304 304 merging rev
305 my rev@. other rev@735846fee2d7 ancestor rev@924404dff337
305 my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337
306 306 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
307 307 (branch merge, don't forget to commit)
308 308 --------------
309 309 M b
310 310 C a
311 311 --------------
312 312
313 313 --------------
314 314 test L:nm a b R:up a b W: - 18 merge b no ancestor
315 315 --------------
316 316 resolving manifests
317 overwrite None branchmerge True partial False
318 ancestor ecf3cb2a4219 local 8dbce441892a remote 924404dff337
317 overwrite None partial False
318 ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
319 319 b: versions differ -> m
320 320 rev: versions differ -> m
321 321 a: prompt recreating -> g
322 322 getting a
323 323 merging b
324 my b@. other b@8dbce441892a ancestor b@000000000000
324 my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000
325 325 merging rev
326 my rev@. other rev@8dbce441892a ancestor rev@924404dff337
326 my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337
327 327 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
328 328 (branch merge, don't forget to commit)
329 329 --------------
330 330 M a
331 331 M b
332 332 --------------
333 333
334 334 --------------
335 335 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
336 336 --------------
337 337 resolving manifests
338 overwrite None branchmerge True partial False
339 ancestor 0b76e65c8289 local e03727d2d66b remote 924404dff337
338 overwrite None partial False
339 ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
340 340 b: versions differ -> m
341 341 rev: versions differ -> m
342 342 merging b
343 my b@. other b@e03727d2d66b ancestor b@000000000000
343 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
344 344 merging rev
345 my rev@. other rev@e03727d2d66b ancestor rev@924404dff337
345 my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337
346 346 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
347 347 (branch merge, don't forget to commit)
348 348 --------------
349 349 M b
350 350 C a
351 351 --------------
352 352
353 353 --------------
354 354 test L:up a R:um a b W: - 20 merge a and b to b, remove a
355 355 --------------
356 356 resolving manifests
357 overwrite None branchmerge True partial False
358 ancestor e300d1c794ec local 79cc6877a3b7 remote 924404dff337
357 overwrite None partial False
358 ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
359 359 a: remote moved -> m
360 360 rev: versions differ -> m
361 361 merging a and b
362 my a@. other b@79cc6877a3b7 ancestor a@924404dff337
362 my a@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
363 363 copying a to b
364 364 removing a
365 365 merging rev
366 my rev@. other rev@79cc6877a3b7 ancestor rev@924404dff337
366 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
367 367 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
368 368 (branch merge, don't forget to commit)
369 369 --------------
370 370 M b
371 371 a
372 372 --------------
373 373
374 374 --------------
375 375 test L:um a b R:up a W: - 21 merge a and b to b
376 376 --------------
377 377 resolving manifests
378 overwrite None branchmerge True partial False
379 ancestor ec03c2ca8642 local f4db7e329e71 remote 924404dff337
378 overwrite None partial False
379 ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
380 380 b: local moved -> m
381 381 rev: versions differ -> m
382 382 merging b and a
383 my b@. other a@f4db7e329e71 ancestor a@924404dff337
383 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
384 384 merging rev
385 my rev@. other rev@f4db7e329e71 ancestor rev@924404dff337
385 my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337
386 386 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
387 387 (branch merge, don't forget to commit)
388 388 --------------
389 389 M b
390 390 a
391 391 --------------
392 392
393 393 --------------
394 394 test L:nm a b R:up a c W: - 23 get c, keep b
395 395 --------------
396 396 resolving manifests
397 overwrite None branchmerge True partial False
398 ancestor ecf3cb2a4219 local 2b958612230f remote 924404dff337
397 overwrite None partial False
398 ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
399 399 b: local moved -> m
400 400 rev: versions differ -> m
401 401 c: remote created -> g
402 402 merging b and a
403 my b@. other a@2b958612230f ancestor a@924404dff337
403 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
404 404 getting c
405 405 merging rev
406 my rev@. other rev@2b958612230f ancestor rev@924404dff337
406 my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337
407 407 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
408 408 (branch merge, don't forget to commit)
409 409 --------------
410 410 M b
411 411 a
412 412 M c
413 413 --------------
414 414
@@ -1,136 +1,136
1 1 adding a
2 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 4 diff -r 33aaa84a386b a
5 5 --- a/a
6 6 +++ b/a
7 7 @@ -1,1 +1,1 @@ a
8 8 -a
9 9 +abc
10 10 adding b
11 11 M a
12 12 changeset: 0:33aaa84a386b
13 13 user: test
14 14 date: Mon Jan 12 13:46:40 1970 +0000
15 15 summary: 1
16 16
17 17 resolving manifests
18 overwrite False branchmerge False partial False
19 ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b
18 overwrite False partial False
19 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
20 20 a: versions differ -> m
21 21 b: remote created -> g
22 22 merging a
23 my a@. other a@802f095af299 ancestor a@33aaa84a386b
23 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
24 24 getting b
25 25 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
26 26 changeset: 1:802f095af299
27 27 tag: tip
28 28 user: test
29 29 date: Mon Jan 12 13:46:40 1970 +0000
30 30 summary: 2
31 31
32 32 resolving manifests
33 overwrite False branchmerge False partial False
34 ancestor 802f095af299 local 33aaa84a386b remote 33aaa84a386b
33 overwrite False partial False
34 ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
35 35 b: remote deleted -> r
36 36 removing b
37 37 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
38 38 changeset: 0:33aaa84a386b
39 39 user: test
40 40 date: Mon Jan 12 13:46:40 1970 +0000
41 41 summary: 1
42 42
43 43 abort: there is nothing to merge - use "hg update" instead
44 44 failed
45 45 changeset: 0:33aaa84a386b
46 46 user: test
47 47 date: Mon Jan 12 13:46:40 1970 +0000
48 48 summary: 1
49 49
50 50 resolving manifests
51 overwrite False branchmerge False partial False
52 ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b
51 overwrite False partial False
52 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
53 53 a: versions differ -> m
54 54 b: remote created -> g
55 55 merging a
56 my a@. other a@802f095af299 ancestor a@33aaa84a386b
56 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
57 57 getting b
58 58 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
59 59 changeset: 1:802f095af299
60 60 tag: tip
61 61 user: test
62 62 date: Mon Jan 12 13:46:40 1970 +0000
63 63 summary: 2
64 64
65 65 changeset: 1:802f095af299
66 66 tag: tip
67 67 user: test
68 68 date: Mon Jan 12 13:46:40 1970 +0000
69 69 files: a b
70 70 description:
71 71 2
72 72
73 73
74 74 changeset: 0:33aaa84a386b
75 75 user: test
76 76 date: Mon Jan 12 13:46:40 1970 +0000
77 77 files: a
78 78 description:
79 79 1
80 80
81 81
82 82 diff -r 802f095af299 a
83 83 --- a/a
84 84 +++ b/a
85 85 @@ -1,1 +1,1 @@ a2
86 86 -a2
87 87 +abc
88 88 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
89 89 adding b
90 90 M a
91 91 changeset: 1:802f095af299
92 92 user: test
93 93 date: Mon Jan 12 13:46:40 1970 +0000
94 94 summary: 2
95 95
96 96 abort: update spans branches, use 'hg merge' or 'hg update -C' to lose changes
97 97 failed
98 98 abort: outstanding uncommitted changes
99 99 failed
100 100 resolving manifests
101 overwrite False branchmerge True partial False
102 ancestor 802f095af299 local 030602aee63d remote 33aaa84a386b
101 overwrite False partial False
102 ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
103 103 a: versions differ -> m
104 104 b: versions differ -> m
105 105 merging a
106 my a@. other a@030602aee63d ancestor a@33aaa84a386b
106 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
107 107 merging b
108 my b@. other b@030602aee63d ancestor b@000000000000
108 my b@802f095af299+ other b@030602aee63d ancestor b@000000000000
109 109 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
110 110 (branch merge, don't forget to commit)
111 111 changeset: 1:802f095af299
112 112 user: test
113 113 date: Mon Jan 12 13:46:40 1970 +0000
114 114 summary: 2
115 115
116 116 changeset: 2:030602aee63d
117 117 tag: tip
118 118 parent: 0:33aaa84a386b
119 119 user: test
120 120 date: Mon Jan 12 13:46:40 1970 +0000
121 121 summary: 3
122 122
123 123 diff -r 802f095af299 a
124 124 --- a/a
125 125 +++ b/a
126 126 @@ -1,1 +1,1 @@ a2
127 127 -a2
128 128 +abc
129 129 adding a
130 130 pulling from ../a
131 131 requesting all changes
132 132 adding changesets
133 133 adding manifests
134 134 adding file changes
135 135 added 1 changesets with 1 changes to 1 files
136 136 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
@@ -1,54 +1,54
1 1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 2 Main should be gone
3 3 a
4 4 changeset: 3:ded32b0db104
5 5 tag: tip
6 6 user: test
7 7 date: Mon Jan 12 13:46:40 1970 +0000
8 8 summary: Added side2
9 9
10 10 changeset: 2:92a816cea698
11 11 parent: 0:537353581d3d
12 12 user: test
13 13 date: Mon Jan 12 13:46:40 1970 +0000
14 14 summary: Added side1
15 15
16 16 changeset: 1:221226fb2bd8
17 17 user: test
18 18 date: Mon Jan 12 13:46:40 1970 +0000
19 19 summary: Added main
20 20
21 21 changeset: 0:537353581d3d
22 22 user: test
23 23 date: Mon Jan 12 13:46:40 1970 +0000
24 24 summary: Added a
25 25
26 26 Should have two heads, side2 and main
27 27 changeset: 3:ded32b0db104
28 28 tag: tip
29 29 user: test
30 30 date: Mon Jan 12 13:46:40 1970 +0000
31 31 summary: Added side2
32 32
33 33 changeset: 1:221226fb2bd8
34 34 user: test
35 35 date: Mon Jan 12 13:46:40 1970 +0000
36 36 summary: Added main
37 37
38 38 Should show a side1 side2
39 39 a
40 40 side1
41 41 side2
42 42 resolving manifests
43 overwrite True branchmerge False partial False
44 ancestor ded32b0db104 local 221226fb2bd8 remote 537353581d3d
43 overwrite True partial False
44 ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
45 45 side2: remote deleted -> r
46 46 side1: remote deleted -> r
47 47 main: remote created -> g
48 48 getting main
49 49 removing side1
50 50 removing side2
51 51 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
52 52 Should only show a main
53 53 a
54 54 main
General Comments 0
You need to be logged in to leave comments. Login now