~ubuntu-branches/ubuntu/precise/mercurial/precise-security

« back to all changes in this revision

Viewing changes to mercurial/context.py

  • Committer: Package Import Robot
  • Author(s): Javi Merino
  • Date: 2011-11-01 22:40:40 UTC
  • mfrom: (1.2.23) (9.1.5 experimental)
  • Revision ID: package-import@ubuntu.com-20111101224040-orz0h407s0f5vk09
Tags: 2.0-1
* New upstream release 2.0
* Don't include empty directories in the package

Show diffs side-by-side

added added

removed removed

Lines of Context:
632
632
    def __contains__(self, key):
633
633
        return self._repo.dirstate[key] not in "?r"
634
634
 
 
635
    def _buildflagfunc(self):
 
636
        # Create a fallback function for getting file flags when the
 
637
        # filesystem doesn't support them
 
638
 
 
639
        copiesget = self._repo.dirstate.copies().get
 
640
 
 
641
        if len(self._parents) < 2:
 
642
            # when we have one parent, it's easy: copy from parent
 
643
            man = self._parents[0].manifest()
 
644
            def func(f):
 
645
                f = copiesget(f, f)
 
646
                return man.flags(f)
 
647
        else:
 
648
            # merges are tricky: we try to reconstruct the unstored
 
649
            # result from the merge (issue1802)
 
650
            p1, p2 = self._parents
 
651
            pa = p1.ancestor(p2)
 
652
            m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
 
653
 
 
654
            def func(f):
 
655
                f = copiesget(f, f) # may be wrong for merges with copies
 
656
                fl1, fl2, fla = m1.flags(f), m2.flags(f), ma.flags(f)
 
657
                if fl1 == fl2:
 
658
                    return fl1
 
659
                if fl1 == fla:
 
660
                    return fl2
 
661
                if fl2 == fla:
 
662
                    return fl1
 
663
                return '' # punt for conflicts
 
664
 
 
665
        return func
 
666
 
 
667
    @propertycache
 
668
    def _flagfunc(self):
 
669
        return self._repo.dirstate.flagfunc(self._buildflagfunc)
 
670
 
635
671
    @propertycache
636
672
    def _manifest(self):
637
673
        """generate a manifest corresponding to the working directory"""
640
676
            self.status(unknown=True)
641
677
 
642
678
        man = self._parents[0].manifest().copy()
643
 
        copied = self._repo.dirstate.copies()
644
679
        if len(self._parents) > 1:
645
680
            man2 = self.p2().manifest()
646
681
            def getman(f):
649
684
                return man2
650
685
        else:
651
686
            getman = lambda f: man
652
 
        def cf(f):
653
 
            f = copied.get(f, f)
654
 
            return getman(f).flags(f)
655
 
        ff = self._repo.dirstate.flagfunc(cf)
 
687
 
 
688
        copied = self._repo.dirstate.copies()
 
689
        ff = self._flagfunc
656
690
        modified, added, removed, deleted = self._status
657
691
        unknown = self._unknown
658
692
        for i, l in (("a", added), ("m", modified), ("u", unknown)):
767
801
            except KeyError:
768
802
                return ''
769
803
 
770
 
        orig = self._repo.dirstate.copies().get(path, path)
771
 
 
772
 
        def findflag(ctx):
773
 
            mnode = ctx.changeset()[0]
774
 
            node, flag = self._repo.manifest.find(mnode, orig)
775
 
            ff = self._repo.dirstate.flagfunc(lambda x: flag or '')
776
 
            try:
777
 
                return ff(path)
778
 
            except OSError:
779
 
                pass
780
 
 
781
 
        flag = findflag(self._parents[0])
782
 
        if flag is None and len(self.parents()) > 1:
783
 
            flag = findflag(self._parents[1])
784
 
        if flag is None or self._repo.dirstate[path] == 'r':
 
804
        try:
 
805
            return self._flagfunc(path)
 
806
        except OSError:
785
807
            return ''
786
 
        return flag
787
808
 
788
809
    def filectx(self, path, filelog=None):
789
810
        """get a file context from the working directory"""