Merge: save away mode bit so that we don't need manifest later

This commit is contained in:
Matt Mackall 2006-08-09 17:11:01 -05:00
parent 7c0506a4f5
commit f048c758d8

View File

@ -157,19 +157,19 @@ def update(repo, node, branchmerge=False, force=False, partial=None,
# "if we changed or they changed, change in merge"
a, b, c = mfa.execf(f), mfw.execf(f), mf2.execf(f)
mode = ((a^b) | (a^c)) ^ a
merge[f] = (m1.get(f, nullid), m2[f], mode)
merge[f] = (mode, m1.get(f, nullid), m2[f])
s = 1
# are we clobbering?
# is remote's version newer?
# or are we going back in time?
elif overwrite or m2[f] != a or (p2 == pa and mw[f] == m1[f]):
repo.ui.debug(_(" remote %s is newer, get\n") % f)
get[f] = m2[f]
get[f] = (m2.execf(f), m2[f])
s = 1
elif f in umap or f in added:
# this unknown file is the same as the checkout
# we need to reset the dirstate if the file was added
get[f] = m2[f]
get[f] = (m2.execf(f), m2[f])
if not s and mfw.execf(f) != mf2.execf(f):
if overwrite:
@ -221,14 +221,14 @@ def update(repo, node, branchmerge=False, force=False, partial=None,
(_("remote changed %s which local deleted\n") % f) +
_("(k)eep or (d)elete?"), _("[kd]"), _("k"))
if r == _("k"):
get[f] = n
get[f] = (m2.execf(f), n)
elif f not in ma:
repo.ui.debug(_("remote created %s\n") % f)
get[f] = n
get[f] = (m2.execf(f), n)
else:
if overwrite or p2 == pa: # going backwards?
repo.ui.debug(_("local deleted %s, recreating\n") % f)
get[f] = n
get[f] = (m2.execf(f), n)
else:
repo.ui.debug(_("local deleted %s\n") % f)
@ -236,7 +236,7 @@ def update(repo, node, branchmerge=False, force=False, partial=None,
if overwrite:
for f in merge:
get[f] = merge[f][1]
get[f] = merge[f][:2]
merge = {}
if linear_path or overwrite:
@ -254,12 +254,13 @@ def update(repo, node, branchmerge=False, force=False, partial=None,
files = get.keys()
files.sort()
for f in files:
flag, node = get[f]
if f[0] == "/":
continue
repo.ui.note(_("getting %s\n") % f)
t = repo.file(f).read(get[f])
t = repo.file(f).read(node)
repo.wwrite(f, t)
util.set_exec(repo.wjoin(f), mf2.execf(f))
util.set_exec(repo.wjoin(f), flag)
if not partial:
if branchmerge:
repo.dirstate.update([f], 'n', st_mtime=-1)
@ -272,7 +273,7 @@ def update(repo, node, branchmerge=False, force=False, partial=None,
files.sort()
for f in files:
repo.ui.status(_("merging %s\n") % f)
my, other, flag = merge[f]
flag, my, other = merge[f]
ret = merge3(repo, f, my, other, xp1, xp2)
if ret:
unresolved.append(f)