##// END OF EJS Templates
workingctx: correctly compute the flag for noexec filesystems+merge...
Benoit Boissinot -
r10921:fb89cd21 stable
parent child Browse files
Show More
@@ -589,12 +589,23 b' class workingctx(changectx):'
589
589
590 man = self._parents[0].manifest().copy()
590 man = self._parents[0].manifest().copy()
591 copied = self._repo.dirstate.copies()
591 copied = self._repo.dirstate.copies()
592 cf = lambda x: man.flags(copied.get(x, x))
592 if len(self._parents) > 1:
593 man2 = self.p2().manifest()
594 def getman(f):
595 if f in man:
596 return man
597 return man2
598 else:
599 getman = lambda f: man
600 def cf(f):
601 f = copied.get(f, f)
602 return getman(f).flags(f)
593 ff = self._repo.dirstate.flagfunc(cf)
603 ff = self._repo.dirstate.flagfunc(cf)
594 modified, added, removed, deleted, unknown = self._status[:5]
604 modified, added, removed, deleted, unknown = self._status[:5]
595 for i, l in (("a", added), ("m", modified), ("u", unknown)):
605 for i, l in (("a", added), ("m", modified), ("u", unknown)):
596 for f in l:
606 for f in l:
597 man[f] = man.get(copied.get(f, f), nullid) + i
607 orig = copied.get(f, f)
608 man[f] = getman(orig).get(orig, nullid) + i
598 try:
609 try:
599 man.set(f, ff(f))
610 man.set(f, ff(f))
600 except OSError:
611 except OSError:
@@ -669,16 +680,21 b' class workingctx(changectx):'
669 except KeyError:
680 except KeyError:
670 return ''
681 return ''
671
682
672 pnode = self._parents[0].changeset()[0]
673 orig = self._repo.dirstate.copies().get(path, path)
683 orig = self._repo.dirstate.copies().get(path, path)
674 node, flag = self._repo.manifest.find(pnode, orig)
675 try:
676 ff = self._repo.dirstate.flagfunc(lambda x: flag or '')
677 return ff(path)
678 except OSError:
679 pass
680
684
681 if not node or path in self.deleted() or path in self.removed():
685 def findflag(ctx):
686 mnode = ctx.changeset()[0]
687 node, flag = self._repo.manifest.find(mnode, orig)
688 ff = self._repo.dirstate.flagfunc(lambda x: flag or None)
689 try:
690 return ff(orig)
691 except OSError:
692 pass
693
694 flag = findflag(self._parents[0])
695 if flag is None and len(self.parents()) > 1:
696 flag = findflag(self._parents[1])
697 if flag is None or self._repo.dirstate[path] == 'r':
682 return ''
698 return ''
683 return flag
699 return flag
684
700
General Comments 0
You need to be logged in to leave comments. Login now