# HG changeset patch # User Matt Mackall # Date 1155675490 18000 # Node ID dd41ad984f71f55ab5ac2bb3d566eac518247608 # Parent 95cc73523983f2904cd5f2f8154f9a7b455fb84c merge: factor out exec bit merge function diff -r 95cc73523983 -r dd41ad984f71 mercurial/merge.py --- a/mercurial/merge.py Tue Aug 15 15:45:45 2006 -0500 +++ b/mercurial/merge.py Tue Aug 15 15:58:10 2006 -0500 @@ -10,6 +10,11 @@ from demandload import * demandload(globals(), "util os tempfile") +def fmerge(f, local, other, ancestor): + """merge executable flags""" + a, b, c = ancestor.execf(f), local.execf(f), other.execf(f) + return ((a^b) | (a^c)) ^ a + def merge3(repo, fn, my, other, p1, p2): """perform a 3-way merge in the working directory""" @@ -144,11 +149,7 @@ # are both different from the ancestor? if n != a and m2[f] != a: repo.ui.debug(_(" %s versions differ, resolve\n") % f) - # merge executable bits - # "if we changed or they changed, change in merge" - a, b, c = ma.execf(f), mw.execf(f), m2.execf(f) - mode = ((a^b) | (a^c)) ^ a - merge[f] = (mode, m1.get(f, nullid), m2[f]) + merge[f] = (fmerge(f, mw, m2, ma), m1.get(f, nullid), m2[f]) s = 1 # are we clobbering? # is remote's version newer? @@ -167,9 +168,7 @@ repo.ui.debug(_(" updating permissions for %s\n") % f) util.set_exec(repo.wjoin(f), m2.execf(f)) else: - a, b, c = ma.execf(f), mw.execf(f), m2.execf(f) - mode = ((a^b) | (a^c)) ^ a - if mode != b: + if fmerge(f, mw, m2, ma) != mw.execf(f): repo.ui.debug(_(" updating permissions for %s\n") % f) util.set_exec(repo.wjoin(f), mode)