mercurial/manifest.py
changeset 4995 e45fc5d03798
parent 4635 63b9d2deed48
child 5328 8d00788ca578
equal deleted inserted replaced
4994:d36310dd51d7 4995:e45fc5d03798
    21         "test for executable in manifest flags"
    21         "test for executable in manifest flags"
    22         return "x" in self.flags(f)
    22         return "x" in self.flags(f)
    23     def linkf(self, f):
    23     def linkf(self, f):
    24         "test for symlink in manifest flags"
    24         "test for symlink in manifest flags"
    25         return "l" in self.flags(f)
    25         return "l" in self.flags(f)
    26     def rawset(self, f, entry):
       
    27         self[f] = bin(entry[:40])
       
    28         fl = entry[40:-1]
       
    29         if fl: self._flags[f] = fl
       
    30     def set(self, f, execf=False, linkf=False):
    26     def set(self, f, execf=False, linkf=False):
    31         if linkf: self._flags[f] = "l"
    27         if linkf: self._flags[f] = "l"
    32         elif execf: self._flags[f] = "x"
    28         elif execf: self._flags[f] = "x"
    33         else: self._flags[f] = ""
    29         else: self._flags[f] = ""
    34     def copy(self):
    30     def copy(self):
    38     def __init__(self, opener):
    34     def __init__(self, opener):
    39         self.mapcache = None
    35         self.mapcache = None
    40         self.listcache = None
    36         self.listcache = None
    41         revlog.__init__(self, opener, "00manifest.i")
    37         revlog.__init__(self, opener, "00manifest.i")
    42 
    38 
    43     def parselines(self, lines):
    39     def parse(self, lines):
    44         for l in lines.splitlines(1):
    40         mfdict = manifestdict()
    45             yield l.split('\0')
    41         for l in lines.splitlines():
       
    42             f, n = l.split('\0')
       
    43             if len(n) > 40:
       
    44                 mfdict._flags[f] = n[40:]
       
    45                 mfdict[f] = bin(n[:40])
       
    46             else:
       
    47                 mfdict[f] = bin(n)
       
    48         return mfdict
    46 
    49 
    47     def readdelta(self, node):
    50     def readdelta(self, node):
    48         delta = mdiff.patchtext(self.delta(node))
    51         return self.parse(mdiff.patchtext(self.delta(node)))
    49         deltamap = manifestdict()
       
    50         for f, n in self.parselines(delta):
       
    51             deltamap.rawset(f, n)
       
    52         return deltamap
       
    53 
    52 
    54     def read(self, node):
    53     def read(self, node):
    55         if node == nullid: return manifestdict() # don't upset local cache
    54         if node == nullid: return manifestdict() # don't upset local cache
    56         if self.mapcache and self.mapcache[0] == node:
    55         if self.mapcache and self.mapcache[0] == node:
    57             return self.mapcache[1]
    56             return self.mapcache[1]
    58         text = self.revision(node)
    57         text = self.revision(node)
    59         self.listcache = array.array('c', text)
    58         self.listcache = array.array('c', text)
    60         mapping = manifestdict()
    59         mapping = self.parse(text)
    61         for f, n in self.parselines(text):
       
    62             mapping.rawset(f, n)
       
    63         self.mapcache = (node, mapping)
    60         self.mapcache = (node, mapping)
    64         return mapping
    61         return mapping
    65 
    62 
    66     def _search(self, m, s, lo=0, hi=None):
    63     def _search(self, m, s, lo=0, hi=None):
    67         '''return a tuple (start, end) that says where to find s within m.
    64         '''return a tuple (start, end) that says where to find s within m.