##// END OF EJS Templates
merge: refactor manifestmerge init to better report effective ancestor
Matt Mackall -
r8753:af5f099d default
parent child Browse files
Show More
@@ -1,472 +1,469 b''
1 # merge.py - directory-level update/merge handling for Mercurial
1 # merge.py - directory-level update/merge handling for Mercurial
2 #
2 #
3 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
3 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com>
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2, incorporated herein by reference.
6 # GNU General Public License version 2, incorporated herein by reference.
7
7
8 from node import nullid, nullrev, hex, bin
8 from node import nullid, nullrev, hex, bin
9 from i18n import _
9 from i18n import _
10 import util, filemerge, copies
10 import util, filemerge, copies
11 import errno, os, shutil
11 import errno, os, shutil
12
12
13 class mergestate(object):
13 class mergestate(object):
14 '''track 3-way merge state of individual files'''
14 '''track 3-way merge state of individual files'''
15 def __init__(self, repo):
15 def __init__(self, repo):
16 self._repo = repo
16 self._repo = repo
17 self._read()
17 self._read()
18 def reset(self, node=None):
18 def reset(self, node=None):
19 self._state = {}
19 self._state = {}
20 if node:
20 if node:
21 self._local = node
21 self._local = node
22 shutil.rmtree(self._repo.join("merge"), True)
22 shutil.rmtree(self._repo.join("merge"), True)
23 def _read(self):
23 def _read(self):
24 self._state = {}
24 self._state = {}
25 try:
25 try:
26 localnode = None
26 localnode = None
27 f = self._repo.opener("merge/state")
27 f = self._repo.opener("merge/state")
28 for i, l in enumerate(f):
28 for i, l in enumerate(f):
29 if i == 0:
29 if i == 0:
30 localnode = l[:-1]
30 localnode = l[:-1]
31 else:
31 else:
32 bits = l[:-1].split("\0")
32 bits = l[:-1].split("\0")
33 self._state[bits[0]] = bits[1:]
33 self._state[bits[0]] = bits[1:]
34 self._local = bin(localnode)
34 self._local = bin(localnode)
35 except IOError, err:
35 except IOError, err:
36 if err.errno != errno.ENOENT:
36 if err.errno != errno.ENOENT:
37 raise
37 raise
38 def _write(self):
38 def _write(self):
39 f = self._repo.opener("merge/state", "w")
39 f = self._repo.opener("merge/state", "w")
40 f.write(hex(self._local) + "\n")
40 f.write(hex(self._local) + "\n")
41 for d, v in self._state.iteritems():
41 for d, v in self._state.iteritems():
42 f.write("\0".join([d] + v) + "\n")
42 f.write("\0".join([d] + v) + "\n")
43 def add(self, fcl, fco, fca, fd, flags):
43 def add(self, fcl, fco, fca, fd, flags):
44 hash = util.sha1(fcl.path()).hexdigest()
44 hash = util.sha1(fcl.path()).hexdigest()
45 self._repo.opener("merge/" + hash, "w").write(fcl.data())
45 self._repo.opener("merge/" + hash, "w").write(fcl.data())
46 self._state[fd] = ['u', hash, fcl.path(), fca.path(),
46 self._state[fd] = ['u', hash, fcl.path(), fca.path(),
47 hex(fca.filenode()), fco.path(), flags]
47 hex(fca.filenode()), fco.path(), flags]
48 self._write()
48 self._write()
49 def __contains__(self, dfile):
49 def __contains__(self, dfile):
50 return dfile in self._state
50 return dfile in self._state
51 def __getitem__(self, dfile):
51 def __getitem__(self, dfile):
52 return self._state[dfile][0]
52 return self._state[dfile][0]
53 def __iter__(self):
53 def __iter__(self):
54 l = self._state.keys()
54 l = self._state.keys()
55 l.sort()
55 l.sort()
56 for f in l:
56 for f in l:
57 yield f
57 yield f
58 def mark(self, dfile, state):
58 def mark(self, dfile, state):
59 self._state[dfile][0] = state
59 self._state[dfile][0] = state
60 self._write()
60 self._write()
61 def resolve(self, dfile, wctx, octx):
61 def resolve(self, dfile, wctx, octx):
62 if self[dfile] == 'r':
62 if self[dfile] == 'r':
63 return 0
63 return 0
64 state, hash, lfile, afile, anode, ofile, flags = self._state[dfile]
64 state, hash, lfile, afile, anode, ofile, flags = self._state[dfile]
65 f = self._repo.opener("merge/" + hash)
65 f = self._repo.opener("merge/" + hash)
66 self._repo.wwrite(dfile, f.read(), flags)
66 self._repo.wwrite(dfile, f.read(), flags)
67 fcd = wctx[dfile]
67 fcd = wctx[dfile]
68 fco = octx[ofile]
68 fco = octx[ofile]
69 fca = self._repo.filectx(afile, fileid=anode)
69 fca = self._repo.filectx(afile, fileid=anode)
70 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca)
70 r = filemerge.filemerge(self._repo, self._local, lfile, fcd, fco, fca)
71 if not r:
71 if not r:
72 self.mark(dfile, 'r')
72 self.mark(dfile, 'r')
73 return r
73 return r
74
74
75 def _checkunknown(wctx, mctx):
75 def _checkunknown(wctx, mctx):
76 "check for collisions between unknown files and files in mctx"
76 "check for collisions between unknown files and files in mctx"
77 for f in wctx.unknown():
77 for f in wctx.unknown():
78 if f in mctx and mctx[f].cmp(wctx[f].data()):
78 if f in mctx and mctx[f].cmp(wctx[f].data()):
79 raise util.Abort(_("untracked file in working directory differs"
79 raise util.Abort(_("untracked file in working directory differs"
80 " from file in requested revision: '%s'") % f)
80 " from file in requested revision: '%s'") % f)
81
81
82 def _checkcollision(mctx):
82 def _checkcollision(mctx):
83 "check for case folding collisions in the destination context"
83 "check for case folding collisions in the destination context"
84 folded = {}
84 folded = {}
85 for fn in mctx:
85 for fn in mctx:
86 fold = fn.lower()
86 fold = fn.lower()
87 if fold in folded:
87 if fold in folded:
88 raise util.Abort(_("case-folding collision between %s and %s")
88 raise util.Abort(_("case-folding collision between %s and %s")
89 % (fn, folded[fold]))
89 % (fn, folded[fold]))
90 folded[fold] = fn
90 folded[fold] = fn
91
91
92 def _forgetremoved(wctx, mctx, branchmerge):
92 def _forgetremoved(wctx, mctx, branchmerge):
93 """
93 """
94 Forget removed files
94 Forget removed files
95
95
96 If we're jumping between revisions (as opposed to merging), and if
96 If we're jumping between revisions (as opposed to merging), and if
97 neither the working directory nor the target rev has the file,
97 neither the working directory nor the target rev has the file,
98 then we need to remove it from the dirstate, to prevent the
98 then we need to remove it from the dirstate, to prevent the
99 dirstate from listing the file when it is no longer in the
99 dirstate from listing the file when it is no longer in the
100 manifest.
100 manifest.
101
101
102 If we're merging, and the other revision has removed a file
102 If we're merging, and the other revision has removed a file
103 that is not present in the working directory, we need to mark it
103 that is not present in the working directory, we need to mark it
104 as removed.
104 as removed.
105 """
105 """
106
106
107 action = []
107 action = []
108 state = branchmerge and 'r' or 'f'
108 state = branchmerge and 'r' or 'f'
109 for f in wctx.deleted():
109 for f in wctx.deleted():
110 if f not in mctx:
110 if f not in mctx:
111 action.append((f, state))
111 action.append((f, state))
112
112
113 if not branchmerge:
113 if not branchmerge:
114 for f in wctx.removed():
114 for f in wctx.removed():
115 if f not in mctx:
115 if f not in mctx:
116 action.append((f, "f"))
116 action.append((f, "f"))
117
117
118 return action
118 return action
119
119
120 def manifestmerge(repo, p1, p2, pa, overwrite, partial):
120 def manifestmerge(repo, p1, p2, pa, overwrite, partial):
121 """
121 """
122 Merge p1 and p2 with ancestor ma and generate merge action list
122 Merge p1 and p2 with ancestor ma and generate merge action list
123
123
124 overwrite = whether we clobber working files
124 overwrite = whether we clobber working files
125 partial = function to filter file lists
125 partial = function to filter file lists
126 """
126 """
127
127
128 repo.ui.note(_("resolving manifests\n"))
129 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
130 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
131
132 action = []
133 copy, copied = {}, {}
134 m1 = p1.manifest()
135 m2 = p2.manifest()
136
137 def fmerge(f, f2, fa):
128 def fmerge(f, f2, fa):
138 """merge flags"""
129 """merge flags"""
139 a, m, n = ma.flags(fa), m1.flags(f), m2.flags(f2)
130 a, m, n = ma.flags(fa), m1.flags(f), m2.flags(f2)
140 if m == n: # flags agree
131 if m == n: # flags agree
141 return m # unchanged
132 return m # unchanged
142 if m and n and not a: # flags set, don't agree, differ from parent
133 if m and n and not a: # flags set, don't agree, differ from parent
143 r = repo.ui.prompt(
134 r = repo.ui.prompt(
144 _(" conflicting flags for %s\n"
135 _(" conflicting flags for %s\n"
145 "(n)one, e(x)ec or sym(l)ink?") % f,
136 "(n)one, e(x)ec or sym(l)ink?") % f,
146 (_("&None"), _("E&xec"), _("Sym&link")), _("n"))
137 (_("&None"), _("E&xec"), _("Sym&link")), _("n"))
147 return r != _("n") and r or ''
138 return r != _("n") and r or ''
148 if m and m != a: # changed from a to m
139 if m and m != a: # changed from a to m
149 return m
140 return m
150 if n and n != a: # changed from a to n
141 if n and n != a: # changed from a to n
151 return n
142 return n
152 return '' # flag was cleared
143 return '' # flag was cleared
153
144
154 def act(msg, m, f, *args):
145 def act(msg, m, f, *args):
155 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
146 repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
156 action.append((f, m) + args)
147 action.append((f, m) + args)
157
148
149 action, copy = [], {}
150
158 if overwrite:
151 if overwrite:
159 ma = m1
152 pa = p1
160 elif p2 == pa: # backwards
153 elif pa == p2: # backwards
161 ma = p1.p1().manifest()
154 pa = p1.p1()
162 else:
155 elif pa and repo.ui.configbool("merge", "followcopies", True):
163 ma = pa.manifest()
156 dirs = repo.ui.configbool("merge", "followdirs", True)
164 if pa and repo.ui.configbool("merge", "followcopies", True):
157 copy, diverge = copies.copies(repo, p1, p2, pa, dirs)
165 dirs = repo.ui.configbool("merge", "followdirs", True)
158 for of, fl in diverge.iteritems():
166 copy, diverge = copies.copies(repo, p1, p2, pa, dirs)
159 act("divergent renames", "dr", of, fl)
167 for of, fl in diverge.iteritems():
160
168 act("divergent renames", "dr", of, fl)
161 repo.ui.note(_("resolving manifests\n"))
169 copied = set(copy.values())
162 repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
163 repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
164
165 m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
166 copied = set(copy.values())
170
167
171 # Compare manifests
168 # Compare manifests
172 for f, n in m1.iteritems():
169 for f, n in m1.iteritems():
173 if partial and not partial(f):
170 if partial and not partial(f):
174 continue
171 continue
175 if f in m2:
172 if f in m2:
176 rflags = fmerge(f, f, f)
173 rflags = fmerge(f, f, f)
177 a = ma.get(f, nullid)
174 a = ma.get(f, nullid)
178 if n == m2[f] or m2[f] == a: # same or local newer
175 if n == m2[f] or m2[f] == a: # same or local newer
179 if m1.flags(f) != rflags:
176 if m1.flags(f) != rflags:
180 act("update permissions", "e", f, rflags)
177 act("update permissions", "e", f, rflags)
181 elif n == a: # remote newer
178 elif n == a: # remote newer
182 act("remote is newer", "g", f, rflags)
179 act("remote is newer", "g", f, rflags)
183 else: # both changed
180 else: # both changed
184 act("versions differ", "m", f, f, f, rflags, False)
181 act("versions differ", "m", f, f, f, rflags, False)
185 elif f in copied: # files we'll deal with on m2 side
182 elif f in copied: # files we'll deal with on m2 side
186 pass
183 pass
187 elif f in copy:
184 elif f in copy:
188 f2 = copy[f]
185 f2 = copy[f]
189 if f2 not in m2: # directory rename
186 if f2 not in m2: # directory rename
190 act("remote renamed directory to " + f2, "d",
187 act("remote renamed directory to " + f2, "d",
191 f, None, f2, m1.flags(f))
188 f, None, f2, m1.flags(f))
192 else: # case 2 A,B/B/B or case 4,21 A/B/B
189 else: # case 2 A,B/B/B or case 4,21 A/B/B
193 act("local copied/moved to " + f2, "m",
190 act("local copied/moved to " + f2, "m",
194 f, f2, f, fmerge(f, f2, f2), False)
191 f, f2, f, fmerge(f, f2, f2), False)
195 elif f in ma: # clean, a different, no remote
192 elif f in ma: # clean, a different, no remote
196 if n != ma[f]:
193 if n != ma[f]:
197 if repo.ui.prompt(
194 if repo.ui.prompt(
198 _(" local changed %s which remote deleted\n"
195 _(" local changed %s which remote deleted\n"
199 "use (c)hanged version or (d)elete?") % f,
196 "use (c)hanged version or (d)elete?") % f,
200 (_("&Changed"), _("&Delete")), _("c")) == _("d"):
197 (_("&Changed"), _("&Delete")), _("c")) == _("d"):
201 act("prompt delete", "r", f)
198 act("prompt delete", "r", f)
202 else:
199 else:
203 act("prompt keep", "a", f)
200 act("prompt keep", "a", f)
204 elif n[20:] == "a": # added, no remote
201 elif n[20:] == "a": # added, no remote
205 act("remote deleted", "f", f)
202 act("remote deleted", "f", f)
206 elif n[20:] != "u":
203 elif n[20:] != "u":
207 act("other deleted", "r", f)
204 act("other deleted", "r", f)
208
205
209 for f, n in m2.iteritems():
206 for f, n in m2.iteritems():
210 if partial and not partial(f):
207 if partial and not partial(f):
211 continue
208 continue
212 if f in m1 or f in copied: # files already visited
209 if f in m1 or f in copied: # files already visited
213 continue
210 continue
214 if f in copy:
211 if f in copy:
215 f2 = copy[f]
212 f2 = copy[f]
216 if f2 not in m1: # directory rename
213 if f2 not in m1: # directory rename
217 act("local renamed directory to " + f2, "d",
214 act("local renamed directory to " + f2, "d",
218 None, f, f2, m2.flags(f))
215 None, f, f2, m2.flags(f))
219 elif f2 in m2: # rename case 1, A/A,B/A
216 elif f2 in m2: # rename case 1, A/A,B/A
220 act("remote copied to " + f, "m",
217 act("remote copied to " + f, "m",
221 f2, f, f, fmerge(f2, f, f2), False)
218 f2, f, f, fmerge(f2, f, f2), False)
222 else: # case 3,20 A/B/A
219 else: # case 3,20 A/B/A
223 act("remote moved to " + f, "m",
220 act("remote moved to " + f, "m",
224 f2, f, f, fmerge(f2, f, f2), True)
221 f2, f, f, fmerge(f2, f, f2), True)
225 elif f not in ma:
222 elif f not in ma:
226 act("remote created", "g", f, m2.flags(f))
223 act("remote created", "g", f, m2.flags(f))
227 elif n != ma[f]:
224 elif n != ma[f]:
228 if repo.ui.prompt(
225 if repo.ui.prompt(
229 _("remote changed %s which local deleted\n"
226 _("remote changed %s which local deleted\n"
230 "use (c)hanged version or leave (d)eleted?") % f,
227 "use (c)hanged version or leave (d)eleted?") % f,
231 (_("&Changed"), _("&Deleted")), _("c")) == _("c"):
228 (_("&Changed"), _("&Deleted")), _("c")) == _("c"):
232 act("prompt recreating", "g", f, m2.flags(f))
229 act("prompt recreating", "g", f, m2.flags(f))
233
230
234 return action
231 return action
235
232
236 def actionkey(a):
233 def actionkey(a):
237 return a[1] == 'r' and -1 or 0, a
234 return a[1] == 'r' and -1 or 0, a
238
235
239 def applyupdates(repo, action, wctx, mctx):
236 def applyupdates(repo, action, wctx, mctx):
240 "apply the merge action list to the working directory"
237 "apply the merge action list to the working directory"
241
238
242 updated, merged, removed, unresolved = 0, 0, 0, 0
239 updated, merged, removed, unresolved = 0, 0, 0, 0
243 ms = mergestate(repo)
240 ms = mergestate(repo)
244 ms.reset(wctx.parents()[0].node())
241 ms.reset(wctx.parents()[0].node())
245 moves = []
242 moves = []
246 action.sort(key=actionkey)
243 action.sort(key=actionkey)
247
244
248 # prescan for merges
245 # prescan for merges
249 for a in action:
246 for a in action:
250 f, m = a[:2]
247 f, m = a[:2]
251 if m == 'm': # merge
248 if m == 'm': # merge
252 f2, fd, flags, move = a[2:]
249 f2, fd, flags, move = a[2:]
253 repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd))
250 repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd))
254 fcl = wctx[f]
251 fcl = wctx[f]
255 fco = mctx[f2]
252 fco = mctx[f2]
256 fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev)
253 fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev)
257 ms.add(fcl, fco, fca, fd, flags)
254 ms.add(fcl, fco, fca, fd, flags)
258 if f != fd and move:
255 if f != fd and move:
259 moves.append(f)
256 moves.append(f)
260
257
261 # remove renamed files after safely stored
258 # remove renamed files after safely stored
262 for f in moves:
259 for f in moves:
263 if util.lexists(repo.wjoin(f)):
260 if util.lexists(repo.wjoin(f)):
264 repo.ui.debug(_("removing %s\n") % f)
261 repo.ui.debug(_("removing %s\n") % f)
265 os.unlink(repo.wjoin(f))
262 os.unlink(repo.wjoin(f))
266
263
267 audit_path = util.path_auditor(repo.root)
264 audit_path = util.path_auditor(repo.root)
268
265
269 for a in action:
266 for a in action:
270 f, m = a[:2]
267 f, m = a[:2]
271 if f and f[0] == "/":
268 if f and f[0] == "/":
272 continue
269 continue
273 if m == "r": # remove
270 if m == "r": # remove
274 repo.ui.note(_("removing %s\n") % f)
271 repo.ui.note(_("removing %s\n") % f)
275 audit_path(f)
272 audit_path(f)
276 try:
273 try:
277 util.unlink(repo.wjoin(f))
274 util.unlink(repo.wjoin(f))
278 except OSError, inst:
275 except OSError, inst:
279 if inst.errno != errno.ENOENT:
276 if inst.errno != errno.ENOENT:
280 repo.ui.warn(_("update failed to remove %s: %s!\n") %
277 repo.ui.warn(_("update failed to remove %s: %s!\n") %
281 (f, inst.strerror))
278 (f, inst.strerror))
282 removed += 1
279 removed += 1
283 elif m == "m": # merge
280 elif m == "m": # merge
284 f2, fd, flags, move = a[2:]
281 f2, fd, flags, move = a[2:]
285 r = ms.resolve(fd, wctx, mctx)
282 r = ms.resolve(fd, wctx, mctx)
286 if r > 0:
283 if r > 0:
287 unresolved += 1
284 unresolved += 1
288 else:
285 else:
289 if r is None:
286 if r is None:
290 updated += 1
287 updated += 1
291 else:
288 else:
292 merged += 1
289 merged += 1
293 util.set_flags(repo.wjoin(fd), 'l' in flags, 'x' in flags)
290 util.set_flags(repo.wjoin(fd), 'l' in flags, 'x' in flags)
294 if f != fd and move and util.lexists(repo.wjoin(f)):
291 if f != fd and move and util.lexists(repo.wjoin(f)):
295 repo.ui.debug(_("removing %s\n") % f)
292 repo.ui.debug(_("removing %s\n") % f)
296 os.unlink(repo.wjoin(f))
293 os.unlink(repo.wjoin(f))
297 elif m == "g": # get
294 elif m == "g": # get
298 flags = a[2]
295 flags = a[2]
299 repo.ui.note(_("getting %s\n") % f)
296 repo.ui.note(_("getting %s\n") % f)
300 t = mctx.filectx(f).data()
297 t = mctx.filectx(f).data()
301 repo.wwrite(f, t, flags)
298 repo.wwrite(f, t, flags)
302 updated += 1
299 updated += 1
303 elif m == "d": # directory rename
300 elif m == "d": # directory rename
304 f2, fd, flags = a[2:]
301 f2, fd, flags = a[2:]
305 if f:
302 if f:
306 repo.ui.note(_("moving %s to %s\n") % (f, fd))
303 repo.ui.note(_("moving %s to %s\n") % (f, fd))
307 t = wctx.filectx(f).data()
304 t = wctx.filectx(f).data()
308 repo.wwrite(fd, t, flags)
305 repo.wwrite(fd, t, flags)
309 util.unlink(repo.wjoin(f))
306 util.unlink(repo.wjoin(f))
310 if f2:
307 if f2:
311 repo.ui.note(_("getting %s to %s\n") % (f2, fd))
308 repo.ui.note(_("getting %s to %s\n") % (f2, fd))
312 t = mctx.filectx(f2).data()
309 t = mctx.filectx(f2).data()
313 repo.wwrite(fd, t, flags)
310 repo.wwrite(fd, t, flags)
314 updated += 1
311 updated += 1
315 elif m == "dr": # divergent renames
312 elif m == "dr": # divergent renames
316 fl = a[2]
313 fl = a[2]
317 repo.ui.warn(_("warning: detected divergent renames of %s to:\n") % f)
314 repo.ui.warn(_("warning: detected divergent renames of %s to:\n") % f)
318 for nf in fl:
315 for nf in fl:
319 repo.ui.warn(" %s\n" % nf)
316 repo.ui.warn(" %s\n" % nf)
320 elif m == "e": # exec
317 elif m == "e": # exec
321 flags = a[2]
318 flags = a[2]
322 util.set_flags(repo.wjoin(f), 'l' in flags, 'x' in flags)
319 util.set_flags(repo.wjoin(f), 'l' in flags, 'x' in flags)
323
320
324 return updated, merged, removed, unresolved
321 return updated, merged, removed, unresolved
325
322
326 def recordupdates(repo, action, branchmerge):
323 def recordupdates(repo, action, branchmerge):
327 "record merge actions to the dirstate"
324 "record merge actions to the dirstate"
328
325
329 for a in action:
326 for a in action:
330 f, m = a[:2]
327 f, m = a[:2]
331 if m == "r": # remove
328 if m == "r": # remove
332 if branchmerge:
329 if branchmerge:
333 repo.dirstate.remove(f)
330 repo.dirstate.remove(f)
334 else:
331 else:
335 repo.dirstate.forget(f)
332 repo.dirstate.forget(f)
336 elif m == "a": # re-add
333 elif m == "a": # re-add
337 if not branchmerge:
334 if not branchmerge:
338 repo.dirstate.add(f)
335 repo.dirstate.add(f)
339 elif m == "f": # forget
336 elif m == "f": # forget
340 repo.dirstate.forget(f)
337 repo.dirstate.forget(f)
341 elif m == "e": # exec change
338 elif m == "e": # exec change
342 repo.dirstate.normallookup(f)
339 repo.dirstate.normallookup(f)
343 elif m == "g": # get
340 elif m == "g": # get
344 if branchmerge:
341 if branchmerge:
345 repo.dirstate.normaldirty(f)
342 repo.dirstate.normaldirty(f)
346 else:
343 else:
347 repo.dirstate.normal(f)
344 repo.dirstate.normal(f)
348 elif m == "m": # merge
345 elif m == "m": # merge
349 f2, fd, flag, move = a[2:]
346 f2, fd, flag, move = a[2:]
350 if branchmerge:
347 if branchmerge:
351 # We've done a branch merge, mark this file as merged
348 # We've done a branch merge, mark this file as merged
352 # so that we properly record the merger later
349 # so that we properly record the merger later
353 repo.dirstate.merge(fd)
350 repo.dirstate.merge(fd)
354 if f != f2: # copy/rename
351 if f != f2: # copy/rename
355 if move:
352 if move:
356 repo.dirstate.remove(f)
353 repo.dirstate.remove(f)
357 if f != fd:
354 if f != fd:
358 repo.dirstate.copy(f, fd)
355 repo.dirstate.copy(f, fd)
359 else:
356 else:
360 repo.dirstate.copy(f2, fd)
357 repo.dirstate.copy(f2, fd)
361 else:
358 else:
362 # We've update-merged a locally modified file, so
359 # We've update-merged a locally modified file, so
363 # we set the dirstate to emulate a normal checkout
360 # we set the dirstate to emulate a normal checkout
364 # of that file some time in the past. Thus our
361 # of that file some time in the past. Thus our
365 # merge will appear as a normal local file
362 # merge will appear as a normal local file
366 # modification.
363 # modification.
367 repo.dirstate.normallookup(fd)
364 repo.dirstate.normallookup(fd)
368 if move:
365 if move:
369 repo.dirstate.forget(f)
366 repo.dirstate.forget(f)
370 elif m == "d": # directory rename
367 elif m == "d": # directory rename
371 f2, fd, flag = a[2:]
368 f2, fd, flag = a[2:]
372 if not f2 and f not in repo.dirstate:
369 if not f2 and f not in repo.dirstate:
373 # untracked file moved
370 # untracked file moved
374 continue
371 continue
375 if branchmerge:
372 if branchmerge:
376 repo.dirstate.add(fd)
373 repo.dirstate.add(fd)
377 if f:
374 if f:
378 repo.dirstate.remove(f)
375 repo.dirstate.remove(f)
379 repo.dirstate.copy(f, fd)
376 repo.dirstate.copy(f, fd)
380 if f2:
377 if f2:
381 repo.dirstate.copy(f2, fd)
378 repo.dirstate.copy(f2, fd)
382 else:
379 else:
383 repo.dirstate.normal(fd)
380 repo.dirstate.normal(fd)
384 if f:
381 if f:
385 repo.dirstate.forget(f)
382 repo.dirstate.forget(f)
386
383
387 def update(repo, node, branchmerge, force, partial):
384 def update(repo, node, branchmerge, force, partial):
388 """
385 """
389 Perform a merge between the working directory and the given node
386 Perform a merge between the working directory and the given node
390
387
391 branchmerge = whether to merge between branches
388 branchmerge = whether to merge between branches
392 force = whether to force branch merging or file overwriting
389 force = whether to force branch merging or file overwriting
393 partial = a function to filter file lists (dirstate not updated)
390 partial = a function to filter file lists (dirstate not updated)
394 """
391 """
395
392
396 wlock = repo.wlock()
393 wlock = repo.wlock()
397 try:
394 try:
398 wc = repo[None]
395 wc = repo[None]
399 if node is None:
396 if node is None:
400 # tip of current branch
397 # tip of current branch
401 try:
398 try:
402 node = repo.branchtags()[wc.branch()]
399 node = repo.branchtags()[wc.branch()]
403 except KeyError:
400 except KeyError:
404 if wc.branch() == "default": # no default branch!
401 if wc.branch() == "default": # no default branch!
405 node = repo.lookup("tip") # update to tip
402 node = repo.lookup("tip") # update to tip
406 else:
403 else:
407 raise util.Abort(_("branch %s not found") % wc.branch())
404 raise util.Abort(_("branch %s not found") % wc.branch())
408 overwrite = force and not branchmerge
405 overwrite = force and not branchmerge
409 pl = wc.parents()
406 pl = wc.parents()
410 p1, p2 = pl[0], repo[node]
407 p1, p2 = pl[0], repo[node]
411 pa = p1.ancestor(p2)
408 pa = p1.ancestor(p2)
412 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
409 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), str(p1), str(p2)
413 fastforward = False
410 fastforward = False
414
411
415 ### check phase
412 ### check phase
416 if not overwrite and len(pl) > 1:
413 if not overwrite and len(pl) > 1:
417 raise util.Abort(_("outstanding uncommitted merges"))
414 raise util.Abort(_("outstanding uncommitted merges"))
418 if branchmerge:
415 if branchmerge:
419 if pa == p2:
416 if pa == p2:
420 raise util.Abort(_("can't merge with ancestor"))
417 raise util.Abort(_("can't merge with ancestor"))
421 elif pa == p1:
418 elif pa == p1:
422 if p1.branch() != p2.branch():
419 if p1.branch() != p2.branch():
423 fastforward = True
420 fastforward = True
424 else:
421 else:
425 raise util.Abort(_("nothing to merge (use 'hg update'"
422 raise util.Abort(_("nothing to merge (use 'hg update'"
426 " or check 'hg heads')"))
423 " or check 'hg heads')"))
427 if not force and (wc.files() or wc.deleted()):
424 if not force and (wc.files() or wc.deleted()):
428 raise util.Abort(_("outstanding uncommitted changes "
425 raise util.Abort(_("outstanding uncommitted changes "
429 "(use 'hg status' to list changes)"))
426 "(use 'hg status' to list changes)"))
430 elif not overwrite:
427 elif not overwrite:
431 if pa == p1 or pa == p2: # linear
428 if pa == p1 or pa == p2: # linear
432 pass # all good
429 pass # all good
433 elif p1.branch() == p2.branch():
430 elif p1.branch() == p2.branch():
434 if wc.files() or wc.deleted():
431 if wc.files() or wc.deleted():
435 raise util.Abort(_("crosses branches (use 'hg merge' or "
432 raise util.Abort(_("crosses branches (use 'hg merge' or "
436 "'hg update -C' to discard changes)"))
433 "'hg update -C' to discard changes)"))
437 raise util.Abort(_("crosses branches (use 'hg merge' "
434 raise util.Abort(_("crosses branches (use 'hg merge' "
438 "or 'hg update -C')"))
435 "or 'hg update -C')"))
439 elif wc.files() or wc.deleted():
436 elif wc.files() or wc.deleted():
440 raise util.Abort(_("crosses named branches (use "
437 raise util.Abort(_("crosses named branches (use "
441 "'hg update -C' to discard changes)"))
438 "'hg update -C' to discard changes)"))
442 else:
439 else:
443 # Allow jumping branches if there are no changes
440 # Allow jumping branches if there are no changes
444 overwrite = True
441 overwrite = True
445
442
446 ### calculate phase
443 ### calculate phase
447 action = []
444 action = []
448 if not force:
445 if not force:
449 _checkunknown(wc, p2)
446 _checkunknown(wc, p2)
450 if not util.checkcase(repo.path):
447 if not util.checkcase(repo.path):
451 _checkcollision(p2)
448 _checkcollision(p2)
452 action += _forgetremoved(wc, p2, branchmerge)
449 action += _forgetremoved(wc, p2, branchmerge)
453 action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
450 action += manifestmerge(repo, wc, p2, pa, overwrite, partial)
454
451
455 ### apply phase
452 ### apply phase
456 if not branchmerge: # just jump to the new rev
453 if not branchmerge: # just jump to the new rev
457 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
454 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, ''
458 if not partial:
455 if not partial:
459 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
456 repo.hook('preupdate', throw=True, parent1=xp1, parent2=xp2)
460
457
461 stats = applyupdates(repo, action, wc, p2)
458 stats = applyupdates(repo, action, wc, p2)
462
459
463 if not partial:
460 if not partial:
464 recordupdates(repo, action, branchmerge)
461 recordupdates(repo, action, branchmerge)
465 repo.dirstate.setparents(fp1, fp2)
462 repo.dirstate.setparents(fp1, fp2)
466 if not branchmerge and not fastforward:
463 if not branchmerge and not fastforward:
467 repo.dirstate.setbranch(p2.branch())
464 repo.dirstate.setbranch(p2.branch())
468 repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3])
465 repo.hook('update', parent1=xp1, parent2=xp2, error=stats[3])
469
466
470 return stats
467 return stats
471 finally:
468 finally:
472 wlock.release()
469 wlock.release()
@@ -1,35 +1,35 b''
1 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
1 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
2 resolving manifests
3 overwrite None partial False
4 ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0
5 searching for copies back to rev 1
2 searching for copies back to rev 1
6 unmatched files in other:
3 unmatched files in other:
7 b
4 b
8 c
5 c
9 all copies found (* = to merge, ! = divergent):
6 all copies found (* = to merge, ! = divergent):
10 c -> a *
7 c -> a *
11 b -> a *
8 b -> a *
12 checking for directory renames
9 checking for directory renames
10 resolving manifests
11 overwrite None partial False
12 ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0
13 a: remote moved to c -> m
13 a: remote moved to c -> m
14 a: remote moved to b -> m
14 a: remote moved to b -> m
15 preserving a for resolve of b
15 preserving a for resolve of b
16 preserving a for resolve of c
16 preserving a for resolve of c
17 removing a
17 removing a
18 picked tool 'internal:merge' for b (binary False symlink False)
18 picked tool 'internal:merge' for b (binary False symlink False)
19 merging a and b to b
19 merging a and b to b
20 my b@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052
20 my b@fb3948d97f07+ other b@40da226db0f0 ancestor a@583c7b748052
21 premerge successful
21 premerge successful
22 picked tool 'internal:merge' for c (binary False symlink False)
22 picked tool 'internal:merge' for c (binary False symlink False)
23 merging a and c to c
23 merging a and c to c
24 my c@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052
24 my c@fb3948d97f07+ other c@40da226db0f0 ancestor a@583c7b748052
25 premerge successful
25 premerge successful
26 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
26 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
27 (branch merge, don't forget to commit)
27 (branch merge, don't forget to commit)
28 -- b --
28 -- b --
29 0
29 0
30 1
30 1
31 2
31 2
32 -- c --
32 -- c --
33 0
33 0
34 1
34 1
35 2
35 2
@@ -1,42 +1,42 b''
1 created new head
1 created new head
2 changeset: 0:310fd17130da
2 changeset: 0:310fd17130da
3 user: test
3 user: test
4 date: Mon Jan 12 13:46:40 1970 +0000
4 date: Mon Jan 12 13:46:40 1970 +0000
5 summary: add foo
5 summary: add foo
6
6
7 changeset: 1:7731dad1c2b9
7 changeset: 1:7731dad1c2b9
8 user: test
8 user: test
9 date: Mon Jan 12 13:46:40 1970 +0000
9 date: Mon Jan 12 13:46:40 1970 +0000
10 summary: cp foo bar; change both
10 summary: cp foo bar; change both
11
11
12 resolving manifests
13 overwrite None partial False
14 ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9
15 searching for copies back to rev 1
12 searching for copies back to rev 1
16 unmatched files in other:
13 unmatched files in other:
17 bar
14 bar
18 all copies found (* = to merge, ! = divergent):
15 all copies found (* = to merge, ! = divergent):
19 bar -> foo *
16 bar -> foo *
20 checking for directory renames
17 checking for directory renames
18 resolving manifests
19 overwrite None partial False
20 ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9
21 foo: versions differ -> m
21 foo: versions differ -> m
22 foo: remote copied to bar -> m
22 foo: remote copied to bar -> m
23 preserving foo for resolve of bar
23 preserving foo for resolve of bar
24 preserving foo for resolve of foo
24 preserving foo for resolve of foo
25 picked tool 'internal:merge' for bar (binary False symlink False)
25 picked tool 'internal:merge' for bar (binary False symlink False)
26 merging foo and bar to bar
26 merging foo and bar to bar
27 my bar@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da
27 my bar@2092631ce82b+ other bar@7731dad1c2b9 ancestor foo@310fd17130da
28 premerge successful
28 premerge successful
29 picked tool 'internal:merge' for foo (binary False symlink False)
29 picked tool 'internal:merge' for foo (binary False symlink False)
30 merging foo
30 merging foo
31 my foo@2092631ce82b+ other foo@7731dad1c2b9 ancestor foo@310fd17130da
31 my foo@2092631ce82b+ other foo@7731dad1c2b9 ancestor foo@310fd17130da
32 premerge successful
32 premerge successful
33 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
33 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
34 (branch merge, don't forget to commit)
34 (branch merge, don't forget to commit)
35 -- foo --
35 -- foo --
36 line 0
36 line 0
37 line 1
37 line 1
38 line 2-1
38 line 2-1
39 -- bar --
39 -- bar --
40 line 0
40 line 0
41 line 1
41 line 1
42 line 2-2
42 line 2-2
@@ -1,20 +1,20 b''
1 reverting foo
1 reverting foo
2 changeset 2:4d9e78aaceee backs out changeset 1:b515023e500e
2 changeset 2:4d9e78aaceee backs out changeset 1:b515023e500e
3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 searching for copies back to rev 1
5 unmatched files in local:
6 bar
4 resolving manifests
7 resolving manifests
5 overwrite None partial False
8 overwrite None partial False
6 ancestor bbd179dfa0a7 local 71766447bdbb+ remote 4d9e78aaceee
9 ancestor bbd179dfa0a7 local 71766447bdbb+ remote 4d9e78aaceee
7 searching for copies back to rev 1
8 unmatched files in local:
9 bar
10 foo: remote is newer -> g
10 foo: remote is newer -> g
11 getting foo
11 getting foo
12 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
12 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
13 (branch merge, don't forget to commit)
13 (branch merge, don't forget to commit)
14 n 0 -2 unset foo
14 n 0 -2 unset foo
15 M foo
15 M foo
16 c6fc755d7e68f49f880599da29f15add41f42f5a 644 foo
16 c6fc755d7e68f49f880599da29f15add41f42f5a 644 foo
17 rev offset length base linkrev nodeid p1 p2
17 rev offset length base linkrev nodeid p1 p2
18 0 0 5 0 0 2ed2a3912a0b 000000000000 000000000000
18 0 0 5 0 0 2ed2a3912a0b 000000000000 000000000000
19 1 5 9 1 1 6f4310b00b9a 2ed2a3912a0b 000000000000
19 1 5 9 1 1 6f4310b00b9a 2ed2a3912a0b 000000000000
20 2 14 5 2 2 c6fc755d7e68 6f4310b00b9a 000000000000
20 2 14 5 2 2 c6fc755d7e68 6f4310b00b9a 000000000000
@@ -1,58 +1,58 b''
1 adding 1
1 adding 1
2 adding 2
2 adding 2
3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
4 created new head
4 created new head
5 resolving manifests
6 overwrite None partial False
7 ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c
8 searching for copies back to rev 1
5 searching for copies back to rev 1
9 unmatched files in other:
6 unmatched files in other:
10 1a
7 1a
11 all copies found (* = to merge, ! = divergent):
8 all copies found (* = to merge, ! = divergent):
12 1a -> 1
9 1a -> 1
13 checking for directory renames
10 checking for directory renames
11 resolving manifests
12 overwrite None partial False
13 ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c
14 1: other deleted -> r
14 1: other deleted -> r
15 1a: remote created -> g
15 1a: remote created -> g
16 removing 1
16 removing 1
17 getting 1a
17 getting 1a
18 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
18 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
19 (branch merge, don't forget to commit)
19 (branch merge, don't forget to commit)
20 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
20 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
21 created new head
21 created new head
22 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
22 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
23 resolving manifests
24 overwrite None partial False
25 ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96
26 searching for copies back to rev 1
23 searching for copies back to rev 1
27 unmatched files in local:
24 unmatched files in local:
28 1a
25 1a
29 all copies found (* = to merge, ! = divergent):
26 all copies found (* = to merge, ! = divergent):
30 1a -> 1 *
27 1a -> 1 *
31 checking for directory renames
28 checking for directory renames
29 resolving manifests
30 overwrite None partial False
31 ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96
32 1a: local copied/moved to 1 -> m
32 1a: local copied/moved to 1 -> m
33 preserving 1a for resolve of 1a
33 preserving 1a for resolve of 1a
34 picked tool 'internal:merge' for 1a (binary False symlink False)
34 picked tool 'internal:merge' for 1a (binary False symlink False)
35 merging 1a and 1 to 1a
35 merging 1a and 1 to 1a
36 my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
36 my 1a@ac7575e3c052+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
37 premerge successful
37 premerge successful
38 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
38 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
39 (branch merge, don't forget to commit)
39 (branch merge, don't forget to commit)
40 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
40 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
41 resolving manifests
42 overwrite None partial False
43 ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052
44 searching for copies back to rev 1
41 searching for copies back to rev 1
45 unmatched files in other:
42 unmatched files in other:
46 1a
43 1a
47 all copies found (* = to merge, ! = divergent):
44 all copies found (* = to merge, ! = divergent):
48 1a -> 1 *
45 1a -> 1 *
49 checking for directory renames
46 checking for directory renames
47 resolving manifests
48 overwrite None partial False
49 ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052
50 1: remote moved to 1a -> m
50 1: remote moved to 1a -> m
51 preserving 1 for resolve of 1a
51 preserving 1 for resolve of 1a
52 removing 1
52 removing 1
53 picked tool 'internal:merge' for 1a (binary False symlink False)
53 picked tool 'internal:merge' for 1a (binary False symlink False)
54 merging 1 and 1a to 1a
54 merging 1 and 1a to 1a
55 my 1a@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d
55 my 1a@746e9549ea96+ other 1a@ac7575e3c052 ancestor 1@81f4b099af3d
56 premerge successful
56 premerge successful
57 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
57 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
58 (branch merge, don't forget to commit)
58 (branch merge, don't forget to commit)
@@ -1,94 +1,94 b''
1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 created new head
2 created new head
3 merging bar and foo to bar
3 merging bar and foo to bar
4 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
4 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
5 (branch merge, don't forget to commit)
5 (branch merge, don't forget to commit)
6 % contents of bar should be line0 line1 line2
6 % contents of bar should be line0 line1 line2
7 line0
7 line0
8 line1
8 line1
9 line2
9 line2
10 rev offset length base linkrev nodeid p1 p2
10 rev offset length base linkrev nodeid p1 p2
11 0 0 77 0 2 da78c0659611 000000000000 000000000000
11 0 0 77 0 2 da78c0659611 000000000000 000000000000
12 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
12 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
13 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
13 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
14 rev offset length base linkrev nodeid p1 p2
14 rev offset length base linkrev nodeid p1 p2
15 0 0 7 0 0 690b295714ae 000000000000 000000000000
15 0 0 7 0 0 690b295714ae 000000000000 000000000000
16 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
16 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
17 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
17 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
18 created new head
18 created new head
19 4:2d2f9a22c82b 2:0a3ab4856510
19 4:2d2f9a22c82b 2:0a3ab4856510
20 3:7d3b554bfdf1 2:0a3ab4856510 1:5cd961e4045d
20 3:7d3b554bfdf1 2:0a3ab4856510 1:5cd961e4045d
21 2:0a3ab4856510 0:2665aaee66e9
21 2:0a3ab4856510 0:2665aaee66e9
22 1:5cd961e4045d
22 1:5cd961e4045d
23 0:2665aaee66e9
23 0:2665aaee66e9
24 % this should use bar@rev2 as the ancestor
24 % this should use bar@rev2 as the ancestor
25 searching for copies back to rev 1
25 resolving manifests
26 resolving manifests
26 overwrite None partial False
27 overwrite None partial False
27 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
28 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
28 searching for copies back to rev 1
29 bar: versions differ -> m
29 bar: versions differ -> m
30 preserving bar for resolve of bar
30 preserving bar for resolve of bar
31 picked tool 'internal:merge' for bar (binary False symlink False)
31 picked tool 'internal:merge' for bar (binary False symlink False)
32 merging bar
32 merging bar
33 my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510
33 my bar@2d2f9a22c82b+ other bar@7d3b554bfdf1 ancestor bar@0a3ab4856510
34 premerge successful
34 premerge successful
35 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
35 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
36 (branch merge, don't forget to commit)
36 (branch merge, don't forget to commit)
37 % contents of bar should be line1 line2
37 % contents of bar should be line1 line2
38 line1
38 line1
39 line2
39 line2
40 rev offset length base linkrev nodeid p1 p2
40 rev offset length base linkrev nodeid p1 p2
41 0 0 77 0 2 da78c0659611 000000000000 000000000000
41 0 0 77 0 2 da78c0659611 000000000000 000000000000
42 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
42 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
43 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
43 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
44 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
44 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
45
45
46
46
47 requesting all changes
47 requesting all changes
48 adding changesets
48 adding changesets
49 adding manifests
49 adding manifests
50 adding file changes
50 adding file changes
51 added 3 changesets with 3 changes to 2 files (+1 heads)
51 added 3 changesets with 3 changes to 2 files (+1 heads)
52 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
52 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
53 merging foo and bar to bar
53 merging foo and bar to bar
54 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
54 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
55 (branch merge, don't forget to commit)
55 (branch merge, don't forget to commit)
56 % contents of bar should be line0 line1 line2
56 % contents of bar should be line0 line1 line2
57 line0
57 line0
58 line1
58 line1
59 line2
59 line2
60 rev offset length base linkrev nodeid p1 p2
60 rev offset length base linkrev nodeid p1 p2
61 0 0 77 0 2 da78c0659611 000000000000 000000000000
61 0 0 77 0 2 da78c0659611 000000000000 000000000000
62 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
62 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
63 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
63 bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
64 rev offset length base linkrev nodeid p1 p2
64 rev offset length base linkrev nodeid p1 p2
65 0 0 7 0 0 690b295714ae 000000000000 000000000000
65 0 0 7 0 0 690b295714ae 000000000000 000000000000
66 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
66 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
67 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
67 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
68 created new head
68 created new head
69 4:2d2f9a22c82b 2:0a3ab4856510
69 4:2d2f9a22c82b 2:0a3ab4856510
70 3:96ab80c60897 1:5cd961e4045d 2:0a3ab4856510
70 3:96ab80c60897 1:5cd961e4045d 2:0a3ab4856510
71 2:0a3ab4856510 0:2665aaee66e9
71 2:0a3ab4856510 0:2665aaee66e9
72 1:5cd961e4045d
72 1:5cd961e4045d
73 0:2665aaee66e9
73 0:2665aaee66e9
74 % this should use bar@rev2 as the ancestor
74 % this should use bar@rev2 as the ancestor
75 searching for copies back to rev 1
75 resolving manifests
76 resolving manifests
76 overwrite None partial False
77 overwrite None partial False
77 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
78 ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
78 searching for copies back to rev 1
79 bar: versions differ -> m
79 bar: versions differ -> m
80 preserving bar for resolve of bar
80 preserving bar for resolve of bar
81 picked tool 'internal:merge' for bar (binary False symlink False)
81 picked tool 'internal:merge' for bar (binary False symlink False)
82 merging bar
82 merging bar
83 my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510
83 my bar@2d2f9a22c82b+ other bar@96ab80c60897 ancestor bar@0a3ab4856510
84 premerge successful
84 premerge successful
85 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
85 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
86 (branch merge, don't forget to commit)
86 (branch merge, don't forget to commit)
87 % contents of bar should be line1 line2
87 % contents of bar should be line1 line2
88 line1
88 line1
89 line2
89 line2
90 rev offset length base linkrev nodeid p1 p2
90 rev offset length base linkrev nodeid p1 p2
91 0 0 77 0 2 da78c0659611 000000000000 000000000000
91 0 0 77 0 2 da78c0659611 000000000000 000000000000
92 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
92 1 77 76 0 3 4b358025380b 000000000000 da78c0659611
93 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
93 2 153 7 2 4 4defe5eec418 da78c0659611 000000000000
94 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
94 3 160 13 3 5 4663501da27b 4defe5eec418 4b358025380b
@@ -1,27 +1,27 b''
1 adding a
1 adding a
2 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 created new head
3 created new head
4 searching for copies back to rev 1
4 resolving manifests
5 resolving manifests
5 overwrite None partial False
6 overwrite None partial False
6 ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
7 ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
7 searching for copies back to rev 1
8 conflicting flags for a
8 conflicting flags for a
9 (n)one, e(x)ec or sym(l)ink? n
9 (n)one, e(x)ec or sym(l)ink? n
10 a: update permissions -> e
10 a: update permissions -> e
11 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
11 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
12 (branch merge, don't forget to commit)
12 (branch merge, don't forget to commit)
13 % symlink is local parent, executable is other
13 % symlink is local parent, executable is other
14 a has no flags (default for conflicts)
14 a has no flags (default for conflicts)
15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
16 searching for copies back to rev 1
16 resolving manifests
17 resolving manifests
17 overwrite None partial False
18 overwrite None partial False
18 ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
19 ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
19 searching for copies back to rev 1
20 conflicting flags for a
20 conflicting flags for a
21 (n)one, e(x)ec or sym(l)ink? n
21 (n)one, e(x)ec or sym(l)ink? n
22 a: remote is newer -> g
22 a: remote is newer -> g
23 getting a
23 getting a
24 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
24 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
25 (branch merge, don't forget to commit)
25 (branch merge, don't forget to commit)
26 % symlink is other parent, executable is local
26 % symlink is other parent, executable is local
27 a has no flags (default for conflicts)
27 a has no flags (default for conflicts)
@@ -1,77 +1,77 b''
1 updating working directory
1 updating working directory
2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 pulling from ../test-a
3 pulling from ../test-a
4 searching for changes
4 searching for changes
5 adding changesets
5 adding changesets
6 adding manifests
6 adding manifests
7 adding file changes
7 adding file changes
8 added 1 changesets with 1 changes to 1 files (+1 heads)
8 added 1 changesets with 1 changes to 1 files (+1 heads)
9 (run 'hg heads' to see heads, 'hg merge' to merge)
9 (run 'hg heads' to see heads, 'hg merge' to merge)
10 merging test.txt
10 merging test.txt
11 warning: conflicts during merge.
11 warning: conflicts during merge.
12 merging test.txt failed!
12 merging test.txt failed!
13 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
13 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
14 use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
14 use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
15 pulling from ../test-a
15 pulling from ../test-a
16 searching for changes
16 searching for changes
17 adding changesets
17 adding changesets
18 adding manifests
18 adding manifests
19 adding file changes
19 adding file changes
20 added 1 changesets with 1 changes to 1 files (+1 heads)
20 added 1 changesets with 1 changes to 1 files (+1 heads)
21 (run 'hg heads' to see heads, 'hg merge' to merge)
21 (run 'hg heads' to see heads, 'hg merge' to merge)
22 searching for copies back to rev 1
22 resolving manifests
23 resolving manifests
23 overwrite None partial False
24 overwrite None partial False
24 ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
25 ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
25 searching for copies back to rev 1
26 test.txt: versions differ -> m
26 test.txt: versions differ -> m
27 preserving test.txt for resolve of test.txt
27 preserving test.txt for resolve of test.txt
28 picked tool 'internal:merge' for test.txt (binary False symlink False)
28 picked tool 'internal:merge' for test.txt (binary False symlink False)
29 merging test.txt
29 merging test.txt
30 my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
30 my test.txt@451c744aabcc+ other test.txt@a070d41e8360 ancestor test.txt@faaea63e63a9
31 warning: conflicts during merge.
31 warning: conflicts during merge.
32 merging test.txt failed!
32 merging test.txt failed!
33 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
33 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
34 use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
34 use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
35 one
35 one
36 <<<<<<< local
36 <<<<<<< local
37 two-point-five
37 two-point-five
38 =======
38 =======
39 two-point-one
39 two-point-one
40 >>>>>>> other
40 >>>>>>> other
41 three
41 three
42 rev offset length base linkrev nodeid p1 p2
42 rev offset length base linkrev nodeid p1 p2
43 0 0 7 0 0 01365c4cca56 000000000000 000000000000
43 0 0 7 0 0 01365c4cca56 000000000000 000000000000
44 1 7 9 1 1 7b013192566a 01365c4cca56 000000000000
44 1 7 9 1 1 7b013192566a 01365c4cca56 000000000000
45 2 16 15 2 2 8fe46a3eb557 01365c4cca56 000000000000
45 2 16 15 2 2 8fe46a3eb557 01365c4cca56 000000000000
46 3 31 27 2 3 fc3148072371 7b013192566a 8fe46a3eb557
46 3 31 27 2 3 fc3148072371 7b013192566a 8fe46a3eb557
47 4 58 25 4 4 d40249267ae3 8fe46a3eb557 000000000000
47 4 58 25 4 4 d40249267ae3 8fe46a3eb557 000000000000
48 changeset: 4:a070d41e8360
48 changeset: 4:a070d41e8360
49 tag: tip
49 tag: tip
50 parent: 2:faaea63e63a9
50 parent: 2:faaea63e63a9
51 user: test
51 user: test
52 date: Mon Jan 12 13:46:40 1970 +0000
52 date: Mon Jan 12 13:46:40 1970 +0000
53 summary: two -> two-point-one
53 summary: two -> two-point-one
54
54
55 changeset: 3:451c744aabcc
55 changeset: 3:451c744aabcc
56 parent: 1:e409be6afcc0
56 parent: 1:e409be6afcc0
57 parent: 2:faaea63e63a9
57 parent: 2:faaea63e63a9
58 user: test
58 user: test
59 date: Mon Jan 12 13:46:40 1970 +0000
59 date: Mon Jan 12 13:46:40 1970 +0000
60 summary: Merge 1
60 summary: Merge 1
61
61
62 changeset: 2:faaea63e63a9
62 changeset: 2:faaea63e63a9
63 parent: 0:095c92b91f1a
63 parent: 0:095c92b91f1a
64 user: test
64 user: test
65 date: Mon Jan 12 13:46:40 1970 +0000
65 date: Mon Jan 12 13:46:40 1970 +0000
66 summary: Numbers as words
66 summary: Numbers as words
67
67
68 changeset: 1:e409be6afcc0
68 changeset: 1:e409be6afcc0
69 user: test
69 user: test
70 date: Mon Jan 12 13:46:40 1970 +0000
70 date: Mon Jan 12 13:46:40 1970 +0000
71 summary: 2 -> 2.5
71 summary: 2 -> 2.5
72
72
73 changeset: 0:095c92b91f1a
73 changeset: 0:095c92b91f1a
74 user: test
74 user: test
75 date: Mon Jan 12 13:46:40 1970 +0000
75 date: Mon Jan 12 13:46:40 1970 +0000
76 summary: Initial
76 summary: Initial
77
77
@@ -1,75 +1,75 b''
1 adding a/a
1 adding a/a
2 adding a/b
2 adding a/b
3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 moving a/a to b/a
4 moving a/a to b/a
5 moving a/b to b/b
5 moving a/b to b/b
6 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
6 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
7 created new head
7 created new head
8 resolving manifests
9 overwrite None partial False
10 ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
11 searching for copies back to rev 1
8 searching for copies back to rev 1
12 unmatched files in local:
9 unmatched files in local:
13 a/c
10 a/c
14 a/d
11 a/d
15 unmatched files in other:
12 unmatched files in other:
16 b/a
13 b/a
17 b/b
14 b/b
18 all copies found (* = to merge, ! = divergent):
15 all copies found (* = to merge, ! = divergent):
19 b/a -> a/a
16 b/a -> a/a
20 b/b -> a/b
17 b/b -> a/b
21 checking for directory renames
18 checking for directory renames
22 dir a/ -> b/
19 dir a/ -> b/
23 file a/c -> b/c
20 file a/c -> b/c
24 file a/d -> b/d
21 file a/d -> b/d
22 resolving manifests
23 overwrite None partial False
24 ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
25 a/d: remote renamed directory to b/d -> d
25 a/d: remote renamed directory to b/d -> d
26 a/c: remote renamed directory to b/c -> d
26 a/c: remote renamed directory to b/c -> d
27 a/b: other deleted -> r
27 a/b: other deleted -> r
28 a/a: other deleted -> r
28 a/a: other deleted -> r
29 b/a: remote created -> g
29 b/a: remote created -> g
30 b/b: remote created -> g
30 b/b: remote created -> g
31 removing a/a
31 removing a/a
32 removing a/b
32 removing a/b
33 moving a/c to b/c
33 moving a/c to b/c
34 moving a/d to b/d
34 moving a/d to b/d
35 getting b/a
35 getting b/a
36 getting b/b
36 getting b/b
37 4 files updated, 0 files merged, 2 files removed, 0 files unresolved
37 4 files updated, 0 files merged, 2 files removed, 0 files unresolved
38 (branch merge, don't forget to commit)
38 (branch merge, don't forget to commit)
39 a/* b/a b/b b/c b/d
39 a/* b/a b/b b/c b/d
40 M b/a
40 M b/a
41 M b/b
41 M b/b
42 A b/c
42 A b/c
43 a/c
43 a/c
44 R a/a
44 R a/a
45 R a/b
45 R a/b
46 R a/c
46 R a/c
47 ? b/d
47 ? b/d
48 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
48 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
49 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
49 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
50 resolving manifests
51 overwrite None partial False
52 ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
53 searching for copies back to rev 1
50 searching for copies back to rev 1
54 unmatched files in local:
51 unmatched files in local:
55 b/a
52 b/a
56 b/b
53 b/b
57 b/d
54 b/d
58 unmatched files in other:
55 unmatched files in other:
59 a/c
56 a/c
60 all copies found (* = to merge, ! = divergent):
57 all copies found (* = to merge, ! = divergent):
61 b/a -> a/a
58 b/a -> a/a
62 b/b -> a/b
59 b/b -> a/b
63 checking for directory renames
60 checking for directory renames
64 dir a/ -> b/
61 dir a/ -> b/
65 file a/c -> b/c
62 file a/c -> b/c
63 resolving manifests
64 overwrite None partial False
65 ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
66 None: local renamed directory to b/c -> d
66 None: local renamed directory to b/c -> d
67 getting a/c to b/c
67 getting a/c to b/c
68 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
68 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
69 (branch merge, don't forget to commit)
69 (branch merge, don't forget to commit)
70 a/* b/a b/b b/c b/d
70 a/* b/a b/b b/c b/d
71 A b/c
71 A b/c
72 a/c
72 a/c
73 ? b/d
73 ? b/d
74 created new head
74 created new head
75 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
75 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
@@ -1,43 +1,43 b''
1 checkout
1 checkout
2 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
2 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
3 created new head
3 created new head
4 merge
4 merge
5 resolving manifests
6 overwrite None partial False
7 ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
8 searching for copies back to rev 1
5 searching for copies back to rev 1
9 unmatched files in local:
6 unmatched files in local:
10 c2
7 c2
11 unmatched files in other:
8 unmatched files in other:
12 b
9 b
13 b2
10 b2
14 all copies found (* = to merge, ! = divergent):
11 all copies found (* = to merge, ! = divergent):
15 c2 -> a2 !
12 c2 -> a2 !
16 b -> a *
13 b -> a *
17 b2 -> a2 !
14 b2 -> a2 !
18 checking for directory renames
15 checking for directory renames
19 a2: divergent renames -> dr
16 a2: divergent renames -> dr
17 resolving manifests
18 overwrite None partial False
19 ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
20 a: remote moved to b -> m
20 a: remote moved to b -> m
21 b2: remote created -> g
21 b2: remote created -> g
22 preserving a for resolve of b
22 preserving a for resolve of b
23 removing a
23 removing a
24 picked tool 'internal:merge' for b (binary False symlink False)
24 picked tool 'internal:merge' for b (binary False symlink False)
25 merging a and b to b
25 merging a and b to b
26 my b@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
26 my b@f26ec4fc3fa3+ other b@8e765a822af2 ancestor a@af1939970a1c
27 premerge successful
27 premerge successful
28 warning: detected divergent renames of a2 to:
28 warning: detected divergent renames of a2 to:
29 c2
29 c2
30 b2
30 b2
31 getting b2
31 getting b2
32 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
32 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
33 (branch merge, don't forget to commit)
33 (branch merge, don't forget to commit)
34 M b
34 M b
35 a
35 a
36 M b2
36 M b2
37 R a
37 R a
38 C c2
38 C c2
39 blahblah
39 blahblah
40 rev offset length base linkrev nodeid p1 p2
40 rev offset length base linkrev nodeid p1 p2
41 0 0 67 0 1 dc51707dfc98 000000000000 000000000000
41 0 0 67 0 1 dc51707dfc98 000000000000 000000000000
42 1 67 72 1 3 b2494a44f0a9 000000000000 dc51707dfc98
42 1 67 72 1 3 b2494a44f0a9 000000000000 dc51707dfc98
43 b renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
43 b renamed from a:dd03b83622e78778b403775d0d074b9ac7387a66
@@ -1,601 +1,601 b''
1 created new head
1 created new head
2 --------------
2 --------------
3 test L:up a R:nc a b W: - 1 get local a to b
3 test L:up a R:nc a b W: - 1 get local a to b
4 --------------
4 --------------
5 resolving manifests
6 overwrite None partial False
7 ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
8 searching for copies back to rev 1
5 searching for copies back to rev 1
9 unmatched files in other:
6 unmatched files in other:
10 b
7 b
11 all copies found (* = to merge, ! = divergent):
8 all copies found (* = to merge, ! = divergent):
12 b -> a *
9 b -> a *
13 checking for directory renames
10 checking for directory renames
11 resolving manifests
12 overwrite None partial False
13 ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
14 rev: versions differ -> m
14 rev: versions differ -> m
15 a: remote copied to b -> m
15 a: remote copied to b -> m
16 preserving a for resolve of b
16 preserving a for resolve of b
17 preserving rev for resolve of rev
17 preserving rev for resolve of rev
18 picked tool 'python ../merge' for b (binary False symlink False)
18 picked tool 'python ../merge' for b (binary False symlink False)
19 merging a and b to b
19 merging a and b to b
20 my b@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
20 my b@e300d1c794ec+ other b@735846fee2d7 ancestor a@924404dff337
21 premerge successful
21 premerge successful
22 picked tool 'python ../merge' for rev (binary False symlink False)
22 picked tool 'python ../merge' for rev (binary False symlink False)
23 merging rev
23 merging rev
24 my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337
24 my rev@e300d1c794ec+ other rev@735846fee2d7 ancestor rev@924404dff337
25 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
25 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
26 (branch merge, don't forget to commit)
26 (branch merge, don't forget to commit)
27 --------------
27 --------------
28 M b
28 M b
29 a
29 a
30 C a
30 C a
31 --------------
31 --------------
32
32
33 created new head
33 created new head
34 --------------
34 --------------
35 test L:nc a b R:up a W: - 2 get rem change to a and b
35 test L:nc a b R:up a W: - 2 get rem change to a and b
36 --------------
36 --------------
37 resolving manifests
38 overwrite None partial False
39 ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
40 searching for copies back to rev 1
37 searching for copies back to rev 1
41 unmatched files in local:
38 unmatched files in local:
42 b
39 b
43 all copies found (* = to merge, ! = divergent):
40 all copies found (* = to merge, ! = divergent):
44 b -> a *
41 b -> a *
45 checking for directory renames
42 checking for directory renames
43 resolving manifests
44 overwrite None partial False
45 ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
46 a: remote is newer -> g
46 a: remote is newer -> g
47 b: local copied/moved to a -> m
47 b: local copied/moved to a -> m
48 rev: versions differ -> m
48 rev: versions differ -> m
49 preserving b for resolve of b
49 preserving b for resolve of b
50 preserving rev for resolve of rev
50 preserving rev for resolve of rev
51 getting a
51 getting a
52 picked tool 'python ../merge' for b (binary False symlink False)
52 picked tool 'python ../merge' for b (binary False symlink False)
53 merging b and a to b
53 merging b and a to b
54 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
54 my b@ac809aeed39a+ other a@f4db7e329e71 ancestor a@924404dff337
55 premerge successful
55 premerge successful
56 picked tool 'python ../merge' for rev (binary False symlink False)
56 picked tool 'python ../merge' for rev (binary False symlink False)
57 merging rev
57 merging rev
58 my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337
58 my rev@ac809aeed39a+ other rev@f4db7e329e71 ancestor rev@924404dff337
59 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
59 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
60 (branch merge, don't forget to commit)
60 (branch merge, don't forget to commit)
61 --------------
61 --------------
62 M a
62 M a
63 M b
63 M b
64 a
64 a
65 --------------
65 --------------
66
66
67 created new head
67 created new head
68 --------------
68 --------------
69 test L:up a R:nm a b W: - 3 get local a change to b, remove a
69 test L:up a R:nm a b W: - 3 get local a change to b, remove a
70 --------------
70 --------------
71 resolving manifests
72 overwrite None partial False
73 ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
74 searching for copies back to rev 1
71 searching for copies back to rev 1
75 unmatched files in other:
72 unmatched files in other:
76 b
73 b
77 all copies found (* = to merge, ! = divergent):
74 all copies found (* = to merge, ! = divergent):
78 b -> a *
75 b -> a *
79 checking for directory renames
76 checking for directory renames
77 resolving manifests
78 overwrite None partial False
79 ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
80 rev: versions differ -> m
80 rev: versions differ -> m
81 a: remote moved to b -> m
81 a: remote moved to b -> m
82 preserving a for resolve of b
82 preserving a for resolve of b
83 preserving rev for resolve of rev
83 preserving rev for resolve of rev
84 removing a
84 removing a
85 picked tool 'python ../merge' for b (binary False symlink False)
85 picked tool 'python ../merge' for b (binary False symlink False)
86 merging a and b to b
86 merging a and b to b
87 my b@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
87 my b@e300d1c794ec+ other b@e03727d2d66b ancestor a@924404dff337
88 premerge successful
88 premerge successful
89 picked tool 'python ../merge' for rev (binary False symlink False)
89 picked tool 'python ../merge' for rev (binary False symlink False)
90 merging rev
90 merging rev
91 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
91 my rev@e300d1c794ec+ other rev@e03727d2d66b ancestor rev@924404dff337
92 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
92 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
93 (branch merge, don't forget to commit)
93 (branch merge, don't forget to commit)
94 --------------
94 --------------
95 M b
95 M b
96 a
96 a
97 --------------
97 --------------
98
98
99 created new head
99 created new head
100 --------------
100 --------------
101 test L:nm a b R:up a W: - 4 get remote change to b
101 test L:nm a b R:up a W: - 4 get remote change to b
102 --------------
102 --------------
103 resolving manifests
104 overwrite None partial False
105 ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
106 searching for copies back to rev 1
103 searching for copies back to rev 1
107 unmatched files in local:
104 unmatched files in local:
108 b
105 b
109 all copies found (* = to merge, ! = divergent):
106 all copies found (* = to merge, ! = divergent):
110 b -> a *
107 b -> a *
111 checking for directory renames
108 checking for directory renames
109 resolving manifests
110 overwrite None partial False
111 ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
112 b: local copied/moved to a -> m
112 b: local copied/moved to a -> m
113 rev: versions differ -> m
113 rev: versions differ -> m
114 preserving b for resolve of b
114 preserving b for resolve of b
115 preserving rev for resolve of rev
115 preserving rev for resolve of rev
116 picked tool 'python ../merge' for b (binary False symlink False)
116 picked tool 'python ../merge' for b (binary False symlink False)
117 merging b and a to b
117 merging b and a to b
118 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
118 my b@ecf3cb2a4219+ other a@f4db7e329e71 ancestor a@924404dff337
119 premerge successful
119 premerge successful
120 picked tool 'python ../merge' for rev (binary False symlink False)
120 picked tool 'python ../merge' for rev (binary False symlink False)
121 merging rev
121 merging rev
122 my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337
122 my rev@ecf3cb2a4219+ other rev@f4db7e329e71 ancestor rev@924404dff337
123 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
123 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
124 (branch merge, don't forget to commit)
124 (branch merge, don't forget to commit)
125 --------------
125 --------------
126 M b
126 M b
127 a
127 a
128 --------------
128 --------------
129
129
130 created new head
130 created new head
131 --------------
131 --------------
132 test L: R:nc a b W: - 5 get b
132 test L: R:nc a b W: - 5 get b
133 --------------
133 --------------
134 resolving manifests
135 overwrite None partial False
136 ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
137 searching for copies back to rev 1
134 searching for copies back to rev 1
138 unmatched files in other:
135 unmatched files in other:
139 b
136 b
140 all copies found (* = to merge, ! = divergent):
137 all copies found (* = to merge, ! = divergent):
141 b -> a
138 b -> a
142 checking for directory renames
139 checking for directory renames
140 resolving manifests
141 overwrite None partial False
142 ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
143 rev: versions differ -> m
143 rev: versions differ -> m
144 b: remote created -> g
144 b: remote created -> g
145 preserving rev for resolve of rev
145 preserving rev for resolve of rev
146 getting b
146 getting b
147 picked tool 'python ../merge' for rev (binary False symlink False)
147 picked tool 'python ../merge' for rev (binary False symlink False)
148 merging rev
148 merging rev
149 my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337
149 my rev@94b33a1b7f2d+ other rev@735846fee2d7 ancestor rev@924404dff337
150 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
150 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
151 (branch merge, don't forget to commit)
151 (branch merge, don't forget to commit)
152 --------------
152 --------------
153 M b
153 M b
154 C a
154 C a
155 --------------
155 --------------
156
156
157 created new head
157 created new head
158 --------------
158 --------------
159 test L:nc a b R: W: - 6 nothing
159 test L:nc a b R: W: - 6 nothing
160 --------------
160 --------------
161 resolving manifests
162 overwrite None partial False
163 ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
164 searching for copies back to rev 1
161 searching for copies back to rev 1
165 unmatched files in local:
162 unmatched files in local:
166 b
163 b
167 all copies found (* = to merge, ! = divergent):
164 all copies found (* = to merge, ! = divergent):
168 b -> a
165 b -> a
169 checking for directory renames
166 checking for directory renames
167 resolving manifests
168 overwrite None partial False
169 ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
170 rev: versions differ -> m
170 rev: versions differ -> m
171 preserving rev for resolve of rev
171 preserving rev for resolve of rev
172 picked tool 'python ../merge' for rev (binary False symlink False)
172 picked tool 'python ../merge' for rev (binary False symlink False)
173 merging rev
173 merging rev
174 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
174 my rev@ac809aeed39a+ other rev@97c705ade336 ancestor rev@924404dff337
175 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
175 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
176 (branch merge, don't forget to commit)
176 (branch merge, don't forget to commit)
177 --------------
177 --------------
178 C a
178 C a
179 C b
179 C b
180 --------------
180 --------------
181
181
182 created new head
182 created new head
183 --------------
183 --------------
184 test L: R:nm a b W: - 7 get b
184 test L: R:nm a b W: - 7 get b
185 --------------
185 --------------
186 resolving manifests
187 overwrite None partial False
188 ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
189 searching for copies back to rev 1
186 searching for copies back to rev 1
190 unmatched files in other:
187 unmatched files in other:
191 b
188 b
192 all copies found (* = to merge, ! = divergent):
189 all copies found (* = to merge, ! = divergent):
193 b -> a
190 b -> a
194 checking for directory renames
191 checking for directory renames
192 resolving manifests
193 overwrite None partial False
194 ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
195 a: other deleted -> r
195 a: other deleted -> r
196 rev: versions differ -> m
196 rev: versions differ -> m
197 b: remote created -> g
197 b: remote created -> g
198 preserving rev for resolve of rev
198 preserving rev for resolve of rev
199 removing a
199 removing a
200 getting b
200 getting b
201 picked tool 'python ../merge' for rev (binary False symlink False)
201 picked tool 'python ../merge' for rev (binary False symlink False)
202 merging rev
202 merging rev
203 my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337
203 my rev@94b33a1b7f2d+ other rev@e03727d2d66b ancestor rev@924404dff337
204 1 files updated, 1 files merged, 1 files removed, 0 files unresolved
204 1 files updated, 1 files merged, 1 files removed, 0 files unresolved
205 (branch merge, don't forget to commit)
205 (branch merge, don't forget to commit)
206 --------------
206 --------------
207 M b
207 M b
208 --------------
208 --------------
209
209
210 created new head
210 created new head
211 --------------
211 --------------
212 test L:nm a b R: W: - 8 nothing
212 test L:nm a b R: W: - 8 nothing
213 --------------
213 --------------
214 resolving manifests
215 overwrite None partial False
216 ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
217 searching for copies back to rev 1
214 searching for copies back to rev 1
218 unmatched files in local:
215 unmatched files in local:
219 b
216 b
220 all copies found (* = to merge, ! = divergent):
217 all copies found (* = to merge, ! = divergent):
221 b -> a
218 b -> a
222 checking for directory renames
219 checking for directory renames
220 resolving manifests
221 overwrite None partial False
222 ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
223 rev: versions differ -> m
223 rev: versions differ -> m
224 preserving rev for resolve of rev
224 preserving rev for resolve of rev
225 picked tool 'python ../merge' for rev (binary False symlink False)
225 picked tool 'python ../merge' for rev (binary False symlink False)
226 merging rev
226 merging rev
227 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
227 my rev@ecf3cb2a4219+ other rev@97c705ade336 ancestor rev@924404dff337
228 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
228 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
229 (branch merge, don't forget to commit)
229 (branch merge, don't forget to commit)
230 --------------
230 --------------
231 C b
231 C b
232 --------------
232 --------------
233
233
234 created new head
234 created new head
235 --------------
235 --------------
236 test L:um a b R:um a b W: - 9 do merge with ancestor in a
236 test L:um a b R:um a b W: - 9 do merge with ancestor in a
237 --------------
237 --------------
238 searching for copies back to rev 1
238 resolving manifests
239 resolving manifests
239 overwrite None partial False
240 overwrite None partial False
240 ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
241 ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
241 searching for copies back to rev 1
242 b: versions differ -> m
242 b: versions differ -> m
243 rev: versions differ -> m
243 rev: versions differ -> m
244 preserving b for resolve of b
244 preserving b for resolve of b
245 preserving rev for resolve of rev
245 preserving rev for resolve of rev
246 picked tool 'python ../merge' for b (binary False symlink False)
246 picked tool 'python ../merge' for b (binary False symlink False)
247 merging b
247 merging b
248 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
248 my b@ec03c2ca8642+ other b@79cc6877a3b7 ancestor a@924404dff337
249 picked tool 'python ../merge' for rev (binary False symlink False)
249 picked tool 'python ../merge' for rev (binary False symlink False)
250 merging rev
250 merging rev
251 my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337
251 my rev@ec03c2ca8642+ other rev@79cc6877a3b7 ancestor rev@924404dff337
252 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
252 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
253 (branch merge, don't forget to commit)
253 (branch merge, don't forget to commit)
254 --------------
254 --------------
255 M b
255 M b
256 --------------
256 --------------
257
257
258 created new head
258 created new head
259 --------------
259 --------------
260 test L:nm a b R:nm a c W: - 11 get c, keep b
260 test L:nm a b R:nm a c W: - 11 get c, keep b
261 --------------
261 --------------
262 resolving manifests
263 overwrite None partial False
264 ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
265 searching for copies back to rev 1
262 searching for copies back to rev 1
266 unmatched files in local:
263 unmatched files in local:
267 b
264 b
268 unmatched files in other:
265 unmatched files in other:
269 c
266 c
270 all copies found (* = to merge, ! = divergent):
267 all copies found (* = to merge, ! = divergent):
271 c -> a !
268 c -> a !
272 b -> a !
269 b -> a !
273 checking for directory renames
270 checking for directory renames
274 a: divergent renames -> dr
271 a: divergent renames -> dr
272 resolving manifests
273 overwrite None partial False
274 ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
275 rev: versions differ -> m
275 rev: versions differ -> m
276 c: remote created -> g
276 c: remote created -> g
277 preserving rev for resolve of rev
277 preserving rev for resolve of rev
278 warning: detected divergent renames of a to:
278 warning: detected divergent renames of a to:
279 b
279 b
280 c
280 c
281 getting c
281 getting c
282 picked tool 'python ../merge' for rev (binary False symlink False)
282 picked tool 'python ../merge' for rev (binary False symlink False)
283 merging rev
283 merging rev
284 my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337
284 my rev@ecf3cb2a4219+ other rev@e6abcc1a30c2 ancestor rev@924404dff337
285 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
285 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
286 (branch merge, don't forget to commit)
286 (branch merge, don't forget to commit)
287 --------------
287 --------------
288 M c
288 M c
289 C b
289 C b
290 --------------
290 --------------
291
291
292 created new head
292 created new head
293 --------------
293 --------------
294 test L:nc a b R:up b W: - 12 merge b no ancestor
294 test L:nc a b R:up b W: - 12 merge b no ancestor
295 --------------
295 --------------
296 searching for copies back to rev 1
296 resolving manifests
297 resolving manifests
297 overwrite None partial False
298 overwrite None partial False
298 ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
299 ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
299 searching for copies back to rev 1
300 b: versions differ -> m
300 b: versions differ -> m
301 rev: versions differ -> m
301 rev: versions differ -> m
302 preserving b for resolve of b
302 preserving b for resolve of b
303 preserving rev for resolve of rev
303 preserving rev for resolve of rev
304 picked tool 'python ../merge' for b (binary False symlink False)
304 picked tool 'python ../merge' for b (binary False symlink False)
305 merging b
305 merging b
306 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
306 my b@ac809aeed39a+ other b@af30c7647fc7 ancestor b@000000000000
307 picked tool 'python ../merge' for rev (binary False symlink False)
307 picked tool 'python ../merge' for rev (binary False symlink False)
308 merging rev
308 merging rev
309 my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337
309 my rev@ac809aeed39a+ other rev@af30c7647fc7 ancestor rev@924404dff337
310 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
310 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
311 (branch merge, don't forget to commit)
311 (branch merge, don't forget to commit)
312 --------------
312 --------------
313 M b
313 M b
314 C a
314 C a
315 --------------
315 --------------
316
316
317 created new head
317 created new head
318 --------------
318 --------------
319 test L:up b R:nm a b W: - 13 merge b no ancestor
319 test L:up b R:nm a b W: - 13 merge b no ancestor
320 --------------
320 --------------
321 searching for copies back to rev 1
321 resolving manifests
322 resolving manifests
322 overwrite None partial False
323 overwrite None partial False
323 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
324 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
324 searching for copies back to rev 1
325 a: other deleted -> r
325 a: other deleted -> r
326 b: versions differ -> m
326 b: versions differ -> m
327 rev: versions differ -> m
327 rev: versions differ -> m
328 preserving b for resolve of b
328 preserving b for resolve of b
329 preserving rev for resolve of rev
329 preserving rev for resolve of rev
330 removing a
330 removing a
331 picked tool 'python ../merge' for b (binary False symlink False)
331 picked tool 'python ../merge' for b (binary False symlink False)
332 merging b
332 merging b
333 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
333 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
334 picked tool 'python ../merge' for rev (binary False symlink False)
334 picked tool 'python ../merge' for rev (binary False symlink False)
335 merging rev
335 merging rev
336 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
336 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
337 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
337 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
338 (branch merge, don't forget to commit)
338 (branch merge, don't forget to commit)
339 --------------
339 --------------
340 M b
340 M b
341 --------------
341 --------------
342
342
343 created new head
343 created new head
344 --------------
344 --------------
345 test L:nc a b R:up a b W: - 14 merge b no ancestor
345 test L:nc a b R:up a b W: - 14 merge b no ancestor
346 --------------
346 --------------
347 searching for copies back to rev 1
347 resolving manifests
348 resolving manifests
348 overwrite None partial False
349 overwrite None partial False
349 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
350 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
350 searching for copies back to rev 1
351 a: remote is newer -> g
351 a: remote is newer -> g
352 b: versions differ -> m
352 b: versions differ -> m
353 rev: versions differ -> m
353 rev: versions differ -> m
354 preserving b for resolve of b
354 preserving b for resolve of b
355 preserving rev for resolve of rev
355 preserving rev for resolve of rev
356 getting a
356 getting a
357 picked tool 'python ../merge' for b (binary False symlink False)
357 picked tool 'python ../merge' for b (binary False symlink False)
358 merging b
358 merging b
359 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
359 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
360 picked tool 'python ../merge' for rev (binary False symlink False)
360 picked tool 'python ../merge' for rev (binary False symlink False)
361 merging rev
361 merging rev
362 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
362 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
363 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
363 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
364 (branch merge, don't forget to commit)
364 (branch merge, don't forget to commit)
365 --------------
365 --------------
366 M a
366 M a
367 M b
367 M b
368 --------------
368 --------------
369
369
370 created new head
370 created new head
371 --------------
371 --------------
372 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
372 test L:up b R:nm a b W: - 15 merge b no ancestor, remove a
373 --------------
373 --------------
374 searching for copies back to rev 1
374 resolving manifests
375 resolving manifests
375 overwrite None partial False
376 overwrite None partial False
376 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
377 ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
377 searching for copies back to rev 1
378 a: other deleted -> r
378 a: other deleted -> r
379 b: versions differ -> m
379 b: versions differ -> m
380 rev: versions differ -> m
380 rev: versions differ -> m
381 preserving b for resolve of b
381 preserving b for resolve of b
382 preserving rev for resolve of rev
382 preserving rev for resolve of rev
383 removing a
383 removing a
384 picked tool 'python ../merge' for b (binary False symlink False)
384 picked tool 'python ../merge' for b (binary False symlink False)
385 merging b
385 merging b
386 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
386 my b@59318016310c+ other b@e03727d2d66b ancestor b@000000000000
387 picked tool 'python ../merge' for rev (binary False symlink False)
387 picked tool 'python ../merge' for rev (binary False symlink False)
388 merging rev
388 merging rev
389 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
389 my rev@59318016310c+ other rev@e03727d2d66b ancestor rev@924404dff337
390 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
390 0 files updated, 2 files merged, 1 files removed, 0 files unresolved
391 (branch merge, don't forget to commit)
391 (branch merge, don't forget to commit)
392 --------------
392 --------------
393 M b
393 M b
394 --------------
394 --------------
395
395
396 created new head
396 created new head
397 --------------
397 --------------
398 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
398 test L:nc a b R:up a b W: - 16 get a, merge b no ancestor
399 --------------
399 --------------
400 searching for copies back to rev 1
400 resolving manifests
401 resolving manifests
401 overwrite None partial False
402 overwrite None partial False
402 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
403 ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
403 searching for copies back to rev 1
404 a: remote is newer -> g
404 a: remote is newer -> g
405 b: versions differ -> m
405 b: versions differ -> m
406 rev: versions differ -> m
406 rev: versions differ -> m
407 preserving b for resolve of b
407 preserving b for resolve of b
408 preserving rev for resolve of rev
408 preserving rev for resolve of rev
409 getting a
409 getting a
410 picked tool 'python ../merge' for b (binary False symlink False)
410 picked tool 'python ../merge' for b (binary False symlink False)
411 merging b
411 merging b
412 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
412 my b@ac809aeed39a+ other b@8dbce441892a ancestor b@000000000000
413 picked tool 'python ../merge' for rev (binary False symlink False)
413 picked tool 'python ../merge' for rev (binary False symlink False)
414 merging rev
414 merging rev
415 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
415 my rev@ac809aeed39a+ other rev@8dbce441892a ancestor rev@924404dff337
416 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
416 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
417 (branch merge, don't forget to commit)
417 (branch merge, don't forget to commit)
418 --------------
418 --------------
419 M a
419 M a
420 M b
420 M b
421 --------------
421 --------------
422
422
423 created new head
423 created new head
424 --------------
424 --------------
425 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
425 test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor
426 --------------
426 --------------
427 searching for copies back to rev 1
427 resolving manifests
428 resolving manifests
428 overwrite None partial False
429 overwrite None partial False
429 ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
430 ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
430 searching for copies back to rev 1
431 b: versions differ -> m
431 b: versions differ -> m
432 rev: versions differ -> m
432 rev: versions differ -> m
433 preserving b for resolve of b
433 preserving b for resolve of b
434 preserving rev for resolve of rev
434 preserving rev for resolve of rev
435 picked tool 'python ../merge' for b (binary False symlink False)
435 picked tool 'python ../merge' for b (binary False symlink False)
436 merging b
436 merging b
437 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
437 my b@0b76e65c8289+ other b@735846fee2d7 ancestor b@000000000000
438 picked tool 'python ../merge' for rev (binary False symlink False)
438 picked tool 'python ../merge' for rev (binary False symlink False)
439 merging rev
439 merging rev
440 my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337
440 my rev@0b76e65c8289+ other rev@735846fee2d7 ancestor rev@924404dff337
441 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
441 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
442 (branch merge, don't forget to commit)
442 (branch merge, don't forget to commit)
443 --------------
443 --------------
444 M b
444 M b
445 C a
445 C a
446 --------------
446 --------------
447
447
448 created new head
448 created new head
449 --------------
449 --------------
450 test L:nm a b R:up a b W: - 18 merge b no ancestor
450 test L:nm a b R:up a b W: - 18 merge b no ancestor
451 --------------
451 --------------
452 searching for copies back to rev 1
452 resolving manifests
453 resolving manifests
453 overwrite None partial False
454 overwrite None partial False
454 ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
455 ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
455 searching for copies back to rev 1
456 b: versions differ -> m
456 b: versions differ -> m
457 rev: versions differ -> m
457 rev: versions differ -> m
458 remote changed a which local deleted
458 remote changed a which local deleted
459 use (c)hanged version or leave (d)eleted? c
459 use (c)hanged version or leave (d)eleted? c
460 a: prompt recreating -> g
460 a: prompt recreating -> g
461 preserving b for resolve of b
461 preserving b for resolve of b
462 preserving rev for resolve of rev
462 preserving rev for resolve of rev
463 getting a
463 getting a
464 picked tool 'python ../merge' for b (binary False symlink False)
464 picked tool 'python ../merge' for b (binary False symlink False)
465 merging b
465 merging b
466 my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000
466 my b@ecf3cb2a4219+ other b@8dbce441892a ancestor b@000000000000
467 picked tool 'python ../merge' for rev (binary False symlink False)
467 picked tool 'python ../merge' for rev (binary False symlink False)
468 merging rev
468 merging rev
469 my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337
469 my rev@ecf3cb2a4219+ other rev@8dbce441892a ancestor rev@924404dff337
470 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
470 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
471 (branch merge, don't forget to commit)
471 (branch merge, don't forget to commit)
472 --------------
472 --------------
473 M a
473 M a
474 M b
474 M b
475 --------------
475 --------------
476
476
477 created new head
477 created new head
478 --------------
478 --------------
479 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
479 test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a
480 --------------
480 --------------
481 searching for copies back to rev 1
481 resolving manifests
482 resolving manifests
482 overwrite None partial False
483 overwrite None partial False
483 ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
484 ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
484 searching for copies back to rev 1
485 local changed a which remote deleted
485 local changed a which remote deleted
486 use (c)hanged version or (d)elete? c
486 use (c)hanged version or (d)elete? c
487 a: prompt keep -> a
487 a: prompt keep -> a
488 b: versions differ -> m
488 b: versions differ -> m
489 rev: versions differ -> m
489 rev: versions differ -> m
490 preserving b for resolve of b
490 preserving b for resolve of b
491 preserving rev for resolve of rev
491 preserving rev for resolve of rev
492 picked tool 'python ../merge' for b (binary False symlink False)
492 picked tool 'python ../merge' for b (binary False symlink False)
493 merging b
493 merging b
494 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
494 my b@0b76e65c8289+ other b@e03727d2d66b ancestor b@000000000000
495 picked tool 'python ../merge' for rev (binary False symlink False)
495 picked tool 'python ../merge' for rev (binary False symlink False)
496 merging rev
496 merging rev
497 my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337
497 my rev@0b76e65c8289+ other rev@e03727d2d66b ancestor rev@924404dff337
498 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
498 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
499 (branch merge, don't forget to commit)
499 (branch merge, don't forget to commit)
500 --------------
500 --------------
501 M b
501 M b
502 C a
502 C a
503 --------------
503 --------------
504
504
505 created new head
505 created new head
506 --------------
506 --------------
507 test L:up a R:um a b W: - 20 merge a and b to b, remove a
507 test L:up a R:um a b W: - 20 merge a and b to b, remove a
508 --------------
508 --------------
509 resolving manifests
510 overwrite None partial False
511 ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
512 searching for copies back to rev 1
509 searching for copies back to rev 1
513 unmatched files in other:
510 unmatched files in other:
514 b
511 b
515 all copies found (* = to merge, ! = divergent):
512 all copies found (* = to merge, ! = divergent):
516 b -> a *
513 b -> a *
517 checking for directory renames
514 checking for directory renames
515 resolving manifests
516 overwrite None partial False
517 ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
518 rev: versions differ -> m
518 rev: versions differ -> m
519 a: remote moved to b -> m
519 a: remote moved to b -> m
520 preserving a for resolve of b
520 preserving a for resolve of b
521 preserving rev for resolve of rev
521 preserving rev for resolve of rev
522 removing a
522 removing a
523 picked tool 'python ../merge' for b (binary False symlink False)
523 picked tool 'python ../merge' for b (binary False symlink False)
524 merging a and b to b
524 merging a and b to b
525 my b@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
525 my b@e300d1c794ec+ other b@79cc6877a3b7 ancestor a@924404dff337
526 picked tool 'python ../merge' for rev (binary False symlink False)
526 picked tool 'python ../merge' for rev (binary False symlink False)
527 merging rev
527 merging rev
528 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
528 my rev@e300d1c794ec+ other rev@79cc6877a3b7 ancestor rev@924404dff337
529 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
529 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
530 (branch merge, don't forget to commit)
530 (branch merge, don't forget to commit)
531 --------------
531 --------------
532 M b
532 M b
533 a
533 a
534 --------------
534 --------------
535
535
536 created new head
536 created new head
537 --------------
537 --------------
538 test L:um a b R:up a W: - 21 merge a and b to b
538 test L:um a b R:up a W: - 21 merge a and b to b
539 --------------
539 --------------
540 resolving manifests
541 overwrite None partial False
542 ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
543 searching for copies back to rev 1
540 searching for copies back to rev 1
544 unmatched files in local:
541 unmatched files in local:
545 b
542 b
546 all copies found (* = to merge, ! = divergent):
543 all copies found (* = to merge, ! = divergent):
547 b -> a *
544 b -> a *
548 checking for directory renames
545 checking for directory renames
546 resolving manifests
547 overwrite None partial False
548 ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
549 b: local copied/moved to a -> m
549 b: local copied/moved to a -> m
550 rev: versions differ -> m
550 rev: versions differ -> m
551 preserving b for resolve of b
551 preserving b for resolve of b
552 preserving rev for resolve of rev
552 preserving rev for resolve of rev
553 picked tool 'python ../merge' for b (binary False symlink False)
553 picked tool 'python ../merge' for b (binary False symlink False)
554 merging b and a to b
554 merging b and a to b
555 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
555 my b@ec03c2ca8642+ other a@f4db7e329e71 ancestor a@924404dff337
556 picked tool 'python ../merge' for rev (binary False symlink False)
556 picked tool 'python ../merge' for rev (binary False symlink False)
557 merging rev
557 merging rev
558 my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337
558 my rev@ec03c2ca8642+ other rev@f4db7e329e71 ancestor rev@924404dff337
559 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
559 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
560 (branch merge, don't forget to commit)
560 (branch merge, don't forget to commit)
561 --------------
561 --------------
562 M b
562 M b
563 a
563 a
564 --------------
564 --------------
565
565
566 created new head
566 created new head
567 --------------
567 --------------
568 test L:nm a b R:up a c W: - 23 get c, keep b
568 test L:nm a b R:up a c W: - 23 get c, keep b
569 --------------
569 --------------
570 resolving manifests
571 overwrite None partial False
572 ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
573 searching for copies back to rev 1
570 searching for copies back to rev 1
574 unmatched files in local:
571 unmatched files in local:
575 b
572 b
576 unmatched files in other:
573 unmatched files in other:
577 c
574 c
578 all copies found (* = to merge, ! = divergent):
575 all copies found (* = to merge, ! = divergent):
579 b -> a *
576 b -> a *
580 checking for directory renames
577 checking for directory renames
578 resolving manifests
579 overwrite None partial False
580 ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
581 b: local copied/moved to a -> m
581 b: local copied/moved to a -> m
582 rev: versions differ -> m
582 rev: versions differ -> m
583 c: remote created -> g
583 c: remote created -> g
584 preserving b for resolve of b
584 preserving b for resolve of b
585 preserving rev for resolve of rev
585 preserving rev for resolve of rev
586 picked tool 'python ../merge' for b (binary False symlink False)
586 picked tool 'python ../merge' for b (binary False symlink False)
587 merging b and a to b
587 merging b and a to b
588 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
588 my b@ecf3cb2a4219+ other a@2b958612230f ancestor a@924404dff337
589 premerge successful
589 premerge successful
590 getting c
590 getting c
591 picked tool 'python ../merge' for rev (binary False symlink False)
591 picked tool 'python ../merge' for rev (binary False symlink False)
592 merging rev
592 merging rev
593 my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337
593 my rev@ecf3cb2a4219+ other rev@2b958612230f ancestor rev@924404dff337
594 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
594 1 files updated, 2 files merged, 0 files removed, 0 files unresolved
595 (branch merge, don't forget to commit)
595 (branch merge, don't forget to commit)
596 --------------
596 --------------
597 M b
597 M b
598 a
598 a
599 M c
599 M c
600 --------------
600 --------------
601
601
@@ -1,159 +1,159 b''
1 adding a
1 adding a
2 updating working directory
2 updating working directory
3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
4 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
5 diff -r 33aaa84a386b a
5 diff -r 33aaa84a386b a
6 --- a/a
6 --- a/a
7 +++ b/a
7 +++ b/a
8 @@ -1,1 +1,1 @@
8 @@ -1,1 +1,1 @@
9 -a
9 -a
10 +abc
10 +abc
11 adding b
11 adding b
12 M a
12 M a
13 changeset: 0:33aaa84a386b
13 changeset: 0:33aaa84a386b
14 user: test
14 user: test
15 date: Mon Jan 12 13:46:40 1970 +0000
15 date: Mon Jan 12 13:46:40 1970 +0000
16 summary: 1
16 summary: 1
17
17
18 searching for copies back to rev 1
19 unmatched files in other:
20 b
18 resolving manifests
21 resolving manifests
19 overwrite False partial False
22 overwrite False partial False
20 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
23 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
21 searching for copies back to rev 1
22 unmatched files in other:
23 b
24 a: versions differ -> m
24 a: versions differ -> m
25 b: remote created -> g
25 b: remote created -> g
26 preserving a for resolve of a
26 preserving a for resolve of a
27 picked tool 'true' for a (binary False symlink False)
27 picked tool 'true' for a (binary False symlink False)
28 merging a
28 merging a
29 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
29 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
30 getting b
30 getting b
31 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
31 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
32 changeset: 1:802f095af299
32 changeset: 1:802f095af299
33 tag: tip
33 tag: tip
34 user: test
34 user: test
35 date: Mon Jan 12 13:46:40 1970 +0000
35 date: Mon Jan 12 13:46:40 1970 +0000
36 summary: 2
36 summary: 2
37
37
38 resolving manifests
38 resolving manifests
39 overwrite False partial False
39 overwrite False partial False
40 ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
40 ancestor 802f095af299 local 802f095af299+ remote 33aaa84a386b
41 a: versions differ -> m
41 a: versions differ -> m
42 b: other deleted -> r
42 b: other deleted -> r
43 preserving a for resolve of a
43 preserving a for resolve of a
44 removing b
44 removing b
45 picked tool 'true' for a (binary False symlink False)
45 picked tool 'true' for a (binary False symlink False)
46 merging a
46 merging a
47 my a@802f095af299+ other a@33aaa84a386b ancestor a@33aaa84a386b
47 my a@802f095af299+ other a@33aaa84a386b ancestor a@33aaa84a386b
48 premerge successful
48 premerge successful
49 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
49 0 files updated, 1 files merged, 1 files removed, 0 files unresolved
50 changeset: 0:33aaa84a386b
50 changeset: 0:33aaa84a386b
51 user: test
51 user: test
52 date: Mon Jan 12 13:46:40 1970 +0000
52 date: Mon Jan 12 13:46:40 1970 +0000
53 summary: 1
53 summary: 1
54
54
55 abort: there is nothing to merge - use "hg update" instead
55 abort: there is nothing to merge - use "hg update" instead
56 failed
56 failed
57 changeset: 0:33aaa84a386b
57 changeset: 0:33aaa84a386b
58 user: test
58 user: test
59 date: Mon Jan 12 13:46:40 1970 +0000
59 date: Mon Jan 12 13:46:40 1970 +0000
60 summary: 1
60 summary: 1
61
61
62 searching for copies back to rev 1
63 unmatched files in other:
64 b
62 resolving manifests
65 resolving manifests
63 overwrite False partial False
66 overwrite False partial False
64 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
67 ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
65 searching for copies back to rev 1
66 unmatched files in other:
67 b
68 a: versions differ -> m
68 a: versions differ -> m
69 b: remote created -> g
69 b: remote created -> g
70 preserving a for resolve of a
70 preserving a for resolve of a
71 picked tool 'true' for a (binary False symlink False)
71 picked tool 'true' for a (binary False symlink False)
72 merging a
72 merging a
73 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
73 my a@33aaa84a386b+ other a@802f095af299 ancestor a@33aaa84a386b
74 getting b
74 getting b
75 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
75 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
76 changeset: 1:802f095af299
76 changeset: 1:802f095af299
77 tag: tip
77 tag: tip
78 user: test
78 user: test
79 date: Mon Jan 12 13:46:40 1970 +0000
79 date: Mon Jan 12 13:46:40 1970 +0000
80 summary: 2
80 summary: 2
81
81
82 changeset: 1:802f095af299
82 changeset: 1:802f095af299
83 tag: tip
83 tag: tip
84 user: test
84 user: test
85 date: Mon Jan 12 13:46:40 1970 +0000
85 date: Mon Jan 12 13:46:40 1970 +0000
86 files: a b
86 files: a b
87 description:
87 description:
88 2
88 2
89
89
90
90
91 changeset: 0:33aaa84a386b
91 changeset: 0:33aaa84a386b
92 user: test
92 user: test
93 date: Mon Jan 12 13:46:40 1970 +0000
93 date: Mon Jan 12 13:46:40 1970 +0000
94 files: a
94 files: a
95 description:
95 description:
96 1
96 1
97
97
98
98
99 diff -r 802f095af299 a
99 diff -r 802f095af299 a
100 --- a/a
100 --- a/a
101 +++ b/a
101 +++ b/a
102 @@ -1,1 +1,1 @@
102 @@ -1,1 +1,1 @@
103 -a2
103 -a2
104 +abc
104 +abc
105 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
105 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
106 adding b
106 adding b
107 created new head
107 created new head
108 M a
108 M a
109 changeset: 1:802f095af299
109 changeset: 1:802f095af299
110 user: test
110 user: test
111 date: Mon Jan 12 13:46:40 1970 +0000
111 date: Mon Jan 12 13:46:40 1970 +0000
112 summary: 2
112 summary: 2
113
113
114 abort: crosses branches (use 'hg merge' or 'hg update -C' to discard changes)
114 abort: crosses branches (use 'hg merge' or 'hg update -C' to discard changes)
115 failed
115 failed
116 abort: outstanding uncommitted changes (use 'hg status' to list changes)
116 abort: outstanding uncommitted changes (use 'hg status' to list changes)
117 failed
117 failed
118 searching for copies back to rev 1
118 resolving manifests
119 resolving manifests
119 overwrite False partial False
120 overwrite False partial False
120 ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
121 ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
121 searching for copies back to rev 1
122 a: versions differ -> m
122 a: versions differ -> m
123 b: versions differ -> m
123 b: versions differ -> m
124 preserving a for resolve of a
124 preserving a for resolve of a
125 preserving b for resolve of b
125 preserving b for resolve of b
126 picked tool 'true' for a (binary False symlink False)
126 picked tool 'true' for a (binary False symlink False)
127 merging a
127 merging a
128 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
128 my a@802f095af299+ other a@030602aee63d ancestor a@33aaa84a386b
129 picked tool 'true' for b (binary False symlink False)
129 picked tool 'true' for b (binary False symlink False)
130 merging b
130 merging b
131 my b@802f095af299+ other b@030602aee63d ancestor b@000000000000
131 my b@802f095af299+ other b@030602aee63d ancestor b@000000000000
132 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
132 0 files updated, 2 files merged, 0 files removed, 0 files unresolved
133 (branch merge, don't forget to commit)
133 (branch merge, don't forget to commit)
134 changeset: 1:802f095af299
134 changeset: 1:802f095af299
135 user: test
135 user: test
136 date: Mon Jan 12 13:46:40 1970 +0000
136 date: Mon Jan 12 13:46:40 1970 +0000
137 summary: 2
137 summary: 2
138
138
139 changeset: 2:030602aee63d
139 changeset: 2:030602aee63d
140 tag: tip
140 tag: tip
141 parent: 0:33aaa84a386b
141 parent: 0:33aaa84a386b
142 user: test
142 user: test
143 date: Mon Jan 12 13:46:40 1970 +0000
143 date: Mon Jan 12 13:46:40 1970 +0000
144 summary: 3
144 summary: 3
145
145
146 diff -r 802f095af299 a
146 diff -r 802f095af299 a
147 --- a/a
147 --- a/a
148 +++ b/a
148 +++ b/a
149 @@ -1,1 +1,1 @@
149 @@ -1,1 +1,1 @@
150 -a2
150 -a2
151 +abc
151 +abc
152 adding a
152 adding a
153 pulling from ../a
153 pulling from ../a
154 requesting all changes
154 requesting all changes
155 adding changesets
155 adding changesets
156 adding manifests
156 adding manifests
157 adding file changes
157 adding file changes
158 added 1 changesets with 1 changes to 1 files
158 added 1 changesets with 1 changes to 1 files
159 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
159 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -1,55 +1,55 b''
1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2 Main should be gone
2 Main should be gone
3 a
3 a
4 created new head
4 created new head
5 changeset: 3:ded32b0db104
5 changeset: 3:ded32b0db104
6 tag: tip
6 tag: tip
7 user: test
7 user: test
8 date: Mon Jan 12 13:46:40 1970 +0000
8 date: Mon Jan 12 13:46:40 1970 +0000
9 summary: Added side2
9 summary: Added side2
10
10
11 changeset: 2:92a816cea698
11 changeset: 2:92a816cea698
12 parent: 0:537353581d3d
12 parent: 0:537353581d3d
13 user: test
13 user: test
14 date: Mon Jan 12 13:46:40 1970 +0000
14 date: Mon Jan 12 13:46:40 1970 +0000
15 summary: Added side1
15 summary: Added side1
16
16
17 changeset: 1:221226fb2bd8
17 changeset: 1:221226fb2bd8
18 user: test
18 user: test
19 date: Mon Jan 12 13:46:40 1970 +0000
19 date: Mon Jan 12 13:46:40 1970 +0000
20 summary: Added main
20 summary: Added main
21
21
22 changeset: 0:537353581d3d
22 changeset: 0:537353581d3d
23 user: test
23 user: test
24 date: Mon Jan 12 13:46:40 1970 +0000
24 date: Mon Jan 12 13:46:40 1970 +0000
25 summary: Added a
25 summary: Added a
26
26
27 Should have two heads, side2 and main
27 Should have two heads, side2 and main
28 changeset: 3:ded32b0db104
28 changeset: 3:ded32b0db104
29 tag: tip
29 tag: tip
30 user: test
30 user: test
31 date: Mon Jan 12 13:46:40 1970 +0000
31 date: Mon Jan 12 13:46:40 1970 +0000
32 summary: Added side2
32 summary: Added side2
33
33
34 changeset: 1:221226fb2bd8
34 changeset: 1:221226fb2bd8
35 user: test
35 user: test
36 date: Mon Jan 12 13:46:40 1970 +0000
36 date: Mon Jan 12 13:46:40 1970 +0000
37 summary: Added main
37 summary: Added main
38
38
39 Should show a side1 side2
39 Should show a side1 side2
40 a
40 a
41 side1
41 side1
42 side2
42 side2
43 resolving manifests
43 resolving manifests
44 overwrite True partial False
44 overwrite True partial False
45 ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
45 ancestor ded32b0db104+ local ded32b0db104+ remote 221226fb2bd8
46 side2: other deleted -> r
46 side2: other deleted -> r
47 side1: other deleted -> r
47 side1: other deleted -> r
48 main: remote created -> g
48 main: remote created -> g
49 removing side1
49 removing side1
50 removing side2
50 removing side2
51 getting main
51 getting main
52 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
52 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
53 Should only show a main
53 Should only show a main
54 a
54 a
55 main
55 main
General Comments 0
You need to be logged in to leave comments. Login now