Skip to content
Snippets Groups Projects
Commit 84614212 authored by Pierre-Yves David's avatar Pierre-Yves David :octopus:
Browse files

flags: actually merge flags in simplemerge

Since b86fc43e4b73, the local flag were blindly taken. This resulted in bug when
rename are involved. exec flag change are now properly merged (when merged from
the rename side).

Another bug is affecting this when merging from the side without the rename.

Differential Revision: https://phab.mercurial-scm.org/D8533
parent 783f0595
No related branches found
No related tags found
No related merge requests found
......@@ -22,4 +22,5 @@
from . import (
error,
mdiff,
node as nodemod,
pycompat,
......@@ -25,4 +26,5 @@
pycompat,
util,
)
from .utils import stringutil
......@@ -449,6 +451,17 @@
return result
def _bytes_to_set(b):
"""turns a multiple bytes (usually flags) into a set of individual byte"""
return set(b[x : x + 1] for x in range(len(b)))
def is_null(ctx):
if not util.safehasattr(ctx, "node"):
return False
return ctx.node() != nodemod.nullid
def simplemerge(ui, localctx, basectx, otherctx, **opts):
"""Performs the simplemerge algorithm.
......@@ -503,4 +516,16 @@
else:
mergedtext += line
# merge flags if necessary
flags = localctx.flags()
localflags = _bytes_to_set(flags)
otherflags = _bytes_to_set(otherctx.flags())
if is_null(basectx) and localflags != otherflags:
baseflags = _bytes_to_set(basectx.flags())
flags = localflags & otherflags
for f in localflags.symmetric_difference(otherflags):
if f not in baseflags:
flags.add(f)
flags = b''.join(sorted(flags))
if not opts.get(b'print'):
......@@ -506,5 +531,5 @@
if not opts.get(b'print'):
localctx.write(mergedtext, localctx.flags())
localctx.write(mergedtext, flags)
if m3.conflicts and not mode == b'union':
return 1
......@@ -195,7 +195,6 @@
M z
a
$ [ -x z ] || echo "executable bit lost"
executable bit lost
merge them (from the chmod side)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment