mercurial/dirstate.py
changeset 4605 c867c11426ad
parent 4604 0f6853c15606
child 4606 9da7a4da650f
equal deleted inserted replaced
4604:0f6853c15606 4605:c867c11426ad
    18     def __init__(self, opener, ui, root):
    18     def __init__(self, opener, ui, root):
    19         self.opener = opener
    19         self.opener = opener
    20         self.root = root
    20         self.root = root
    21         self.dirty = 0
    21         self.dirty = 0
    22         self.ui = ui
    22         self.ui = ui
    23         self.fp = None
       
    24         self.pl = None
       
    25         self.dirs = None
    23         self.dirs = None
    26         self.copymap = {}
       
    27         self.ignorefunc = None
    24         self.ignorefunc = None
    28         self._branch = None
       
    29         self._slash = None
    25         self._slash = None
    30 
    26 
    31     def __getattr__(self, name):
    27     def __getattr__(self, name):
    32         if name == 'map':
    28         if name == 'map':
    33             self.read()
    29             self.read()
    34             return self.map
    30             return self.map
       
    31         elif name == 'copymap':
       
    32             self.read()
       
    33             return self.copymap
       
    34         elif name == '_branch':
       
    35             try:
       
    36                 self._branch = self.opener("branch").read().strip()\
       
    37                                or "default"
       
    38             except IOError:
       
    39                 self._branch = "default"
       
    40             return self._branch
       
    41         elif name == 'pl':
       
    42             self.pl = [nullid, nullid]
       
    43             try:
       
    44                 st = self.opener("dirstate").read(40)
       
    45                 if len(st) == 40:
       
    46                     self.pl = st[:20], st[20:40]
       
    47             except IOError, err:
       
    48                 if err.errno != errno.ENOENT: raise
       
    49             return self.pl
    35         else:
    50         else:
    36             raise AttributeError, name
    51             raise AttributeError, name
    37 
    52 
    38     def wjoin(self, f):
    53     def wjoin(self, f):
    39         return os.path.join(self.root, f)
    54         return os.path.join(self.root, f)
   160 
   175 
   161     def __contains__(self, key):
   176     def __contains__(self, key):
   162         return key in self.map
   177         return key in self.map
   163 
   178 
   164     def parents(self):
   179     def parents(self):
   165         if self.pl is None:
       
   166             self.pl = [nullid, nullid]
       
   167             try:
       
   168                 self.fp = self.opener('dirstate')
       
   169                 st = self.fp.read(40)
       
   170                 if len(st) == 40:
       
   171                     self.pl = st[:20], st[20:40]
       
   172             except IOError, err:
       
   173                 if err.errno != errno.ENOENT: raise
       
   174         return self.pl
   180         return self.pl
   175 
   181 
   176     def branch(self):
   182     def branch(self):
   177         if not self._branch:
       
   178             try:
       
   179                 self._branch = self.opener("branch").read().strip()\
       
   180                                or "default"
       
   181             except IOError:
       
   182                 self._branch = "default"
       
   183         return self._branch
   183         return self._branch
   184 
   184 
   185     def markdirty(self):
   185     def markdirty(self):
   186         if not self.dirty:
   186         if not self.dirty:
   187             self.dirty = 1
   187             self.dirty = 1
   225             map[f] = e[:4]
   225             map[f] = e[:4]
   226             pos = newpos
   226             pos = newpos
   227 
   227 
   228     def read(self):
   228     def read(self):
   229         self.map = {}
   229         self.map = {}
       
   230         self.copymap = {}
   230         self.pl = [nullid, nullid]
   231         self.pl = [nullid, nullid]
   231         try:
   232         try:
   232             if self.fp:
   233             st = self.opener("dirstate").read()
   233                 self.fp.seek(0)
       
   234                 st = self.fp.read()
       
   235                 self.fp = None
       
   236             else:
       
   237                 st = self.opener("dirstate").read()
       
   238             if st:
   234             if st:
   239                 self.parse(st)
   235                 self.parse(st)
   240         except IOError, err:
   236         except IOError, err:
   241             if err.errno != errno.ENOENT: raise
   237             if err.errno != errno.ENOENT: raise
   242 
   238