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