comparison mercurial/merge.py @ 2997:545d33aa3f82

merge: add backwards variable
author Matt Mackall <mpm@selenic.com>
date Mon, 21 Aug 2006 14:21:42 -0500
parents 8743188f4d2e
children 833677bc9791
comparison
equal deleted inserted replaced
2974:eef469259745 2997:545d33aa3f82
68 raise util.Abort(_("outstanding uncommitted merges")) 68 raise util.Abort(_("outstanding uncommitted merges"))
69 69
70 p1, p2 = pl[0], node 70 p1, p2 = pl[0], node
71 pa = repo.changelog.ancestor(p1, p2) 71 pa = repo.changelog.ancestor(p1, p2)
72 72
73 # are we going backwards?
74 backwards = (pa == p2)
75
73 # is there a linear path from p1 to p2? 76 # is there a linear path from p1 to p2?
74 linear_path = (pa == p1 or pa == p2) 77 linear_path = (pa == p1 or pa == p2)
75 if branchmerge and linear_path: 78 if branchmerge and linear_path:
76 raise util.Abort(_("there is nothing to merge, just use " 79 raise util.Abort(_("there is nothing to merge, just use "
77 "'hg update' or look at 'hg heads'")) 80 "'hg update' or look at 'hg heads'"))
152 repo.ui.debug(_(" %s versions differ, resolve\n") % f) 155 repo.ui.debug(_(" %s versions differ, resolve\n") % f)
153 merge[f] = (fmerge(f, mw, m2, ma), m1.get(f, nullid), m2[f]) 156 merge[f] = (fmerge(f, mw, m2, ma), m1.get(f, nullid), m2[f])
154 s = 1 157 s = 1
155 # are we clobbering? 158 # are we clobbering?
156 # is remote's version newer? 159 # is remote's version newer?
157 # or are we going back in time? 160 # or are we going back in time and clean?
158 elif overwrite or m2[f] != a or (p2 == pa and mw[f] == m1[f]): 161 elif overwrite or m2[f] != a or (backwards and mw[f] == m1[f]):
159 repo.ui.debug(_(" remote %s is newer, get\n") % f) 162 repo.ui.debug(_(" remote %s is newer, get\n") % f)
160 get[f] = (m2.execf(f), m2[f]) 163 get[f] = (m2.execf(f), m2[f])
161 s = 1 164 s = 1
162 elif f in umap or f in added: 165 elif f in umap or f in added:
163 # this unknown file is the same as the checkout 166 # this unknown file is the same as the checkout
190 # file is created on branch or in working directory 193 # file is created on branch or in working directory
191 if overwrite and f not in umap: 194 if overwrite and f not in umap:
192 repo.ui.debug(_("remote deleted %s, clobbering\n") % f) 195 repo.ui.debug(_("remote deleted %s, clobbering\n") % f)
193 remove.append(f) 196 remove.append(f)
194 elif n == m1.get(f, nullid): # same as parent 197 elif n == m1.get(f, nullid): # same as parent
195 if p2 == pa: # going backwards? 198 if backwards:
196 repo.ui.debug(_("remote deleted %s\n") % f) 199 repo.ui.debug(_("remote deleted %s\n") % f)
197 remove.append(f) 200 remove.append(f)
198 else: 201 else:
199 repo.ui.debug(_("local modified %s, keeping\n") % f) 202 repo.ui.debug(_("local modified %s, keeping\n") % f)
200 else: 203 else:
215 get[f] = (m2.execf(f), n) 218 get[f] = (m2.execf(f), n)
216 elif f not in ma: 219 elif f not in ma:
217 repo.ui.debug(_("remote created %s\n") % f) 220 repo.ui.debug(_("remote created %s\n") % f)
218 get[f] = (m2.execf(f), n) 221 get[f] = (m2.execf(f), n)
219 else: 222 else:
220 if overwrite or p2 == pa: # going backwards? 223 if overwrite or backwards:
221 repo.ui.debug(_("local deleted %s, recreating\n") % f) 224 repo.ui.debug(_("local deleted %s, recreating\n") % f)
222 get[f] = (m2.execf(f), n) 225 get[f] = (m2.execf(f), n)
223 else: 226 else:
224 repo.ui.debug(_("local deleted %s\n") % f) 227 repo.ui.debug(_("local deleted %s\n") % f)
225 228