mercurial/context.py
changeset 6743 86e8187b721a
parent 6742 2d54e7c1e69d
child 6744 d3691d31fc9c
equal deleted inserted replaced
6742:2d54e7c1e69d 6743:86e8187b721a
   116         return node, flag
   116         return node, flag
   117 
   117 
   118     def filenode(self, path):
   118     def filenode(self, path):
   119         return self._fileinfo(path)[0]
   119         return self._fileinfo(path)[0]
   120 
   120 
   121     def fileflags(self, path):
   121     def flags(self, path):
   122         try:
   122         try:
   123             return self._fileinfo(path)[1]
   123             return self._fileinfo(path)[1]
   124         except revlog.LookupError:
   124         except revlog.LookupError:
   125             return ''
   125             return ''
   126 
   126 
   235         return filectx(self._repo, self._path, fileid=fileid,
   235         return filectx(self._repo, self._path, fileid=fileid,
   236                        filelog=self._filelog)
   236                        filelog=self._filelog)
   237 
   237 
   238     def filerev(self): return self._filerev
   238     def filerev(self): return self._filerev
   239     def filenode(self): return self._filenode
   239     def filenode(self): return self._filenode
   240     def fileflags(self): return self._changectx.fileflags(self._path)
   240     def flags(self): return self._changectx.flags(self._path)
   241     def isexec(self): return 'x' in self.fileflags()
   241     def isexec(self): return 'x' in self.flags()
   242     def islink(self): return 'l' in self.fileflags()
   242     def islink(self): return 'l' in self.flags()
   243     def filelog(self): return self._filelog
   243     def filelog(self): return self._filelog
   244 
   244 
   245     def rev(self):
   245     def rev(self):
   246         if '_changectx' in self.__dict__:
   246         if '_changectx' in self.__dict__:
   247             return self._changectx.rev()
   247             return self._changectx.rev()
   507     def _buildmanifest(self):
   507     def _buildmanifest(self):
   508         """generate a manifest corresponding to the working directory"""
   508         """generate a manifest corresponding to the working directory"""
   509 
   509 
   510         man = self._parents[0].manifest().copy()
   510         man = self._parents[0].manifest().copy()
   511         copied = self._repo.dirstate.copies()
   511         copied = self._repo.dirstate.copies()
   512         is_exec = util.execfunc(self._repo.root,
   512         cf = lambda x: man.flags(copied.get(x, x))
   513                                 lambda p: man.execf(copied.get(p,p)))
   513         ff = self._repo.dirstate.flagfunc(cf)
   514         is_link = util.linkfunc(self._repo.root,
       
   515                                 lambda p: man.linkf(copied.get(p,p)))
       
   516         modified, added, removed, deleted, unknown = self._status[:5]
   514         modified, added, removed, deleted, unknown = self._status[:5]
   517         for i, l in (("a", added), ("m", modified), ("u", unknown)):
   515         for i, l in (("a", added), ("m", modified), ("u", unknown)):
   518             for f in l:
   516             for f in l:
   519                 man[f] = man.get(copied.get(f, f), nullid) + i
   517                 man[f] = man.get(copied.get(f, f), nullid) + i
   520                 try:
   518                 try:
   521                     man.set(f, is_exec(f), is_link(f))
   519                     man.set(f, ff(f))
   522                 except OSError:
   520                 except OSError:
   523                     pass
   521                     pass
   524 
   522 
   525         for f in deleted + removed:
   523         for f in deleted + removed:
   526             if f in man:
   524             if f in man:
   553         return t
   551         return t
   554 
   552 
   555     def children(self):
   553     def children(self):
   556         return []
   554         return []
   557 
   555 
   558     def fileflags(self, path):
   556     def flags(self, path):
   559         if '_manifest' in self.__dict__:
   557         if '_manifest' in self.__dict__:
   560             try:
   558             try:
   561                 return self._manifest.flags(path)
   559                 return self._manifest.flags(path)
   562             except KeyError:
   560             except KeyError:
   563                 return ''
   561                 return ''
   564 
   562 
   565         pnode = self._parents[0].changeset()[0]
   563         pnode = self._parents[0].changeset()[0]
   566         orig = self._repo.dirstate.copies().get(path, path)
   564         orig = self._repo.dirstate.copies().get(path, path)
   567         node, flag = self._repo.manifest.find(pnode, orig)
   565         node, flag = self._repo.manifest.find(pnode, orig)
   568         is_link = util.linkfunc(self._repo.root,
       
   569                                 lambda p: flag and 'l' in flag)
       
   570         is_exec = util.execfunc(self._repo.root,
       
   571                                 lambda p: flag and 'x' in flag)
       
   572         try:
   566         try:
   573             return (is_link(path) and 'l' or '') + (is_exec(path) and 'x' or '')
   567             ff = self._repo.dirstate.flagfunc(lambda x: flag or '')
       
   568             return ff(path)
   574         except OSError:
   569         except OSError:
   575             pass
   570             pass
   576 
   571 
   577         if not node or path in self.deleted() or path in self.removed():
   572         if not node or path in self.deleted() or path in self.removed():
   578             return ''
   573             return ''
   722     def deleted(self): return self._status[3]
   717     def deleted(self): return self._status[3]
   723     def unknown(self): return self._status[4]
   718     def unknown(self): return self._status[4]
   724     def clean(self): return self._status[5]
   719     def clean(self): return self._status[5]
   725     def branch(self): return self._extra['branch']
   720     def branch(self): return self._extra['branch']
   726     def extra(self): return self._extra
   721     def extra(self): return self._extra
       
   722     def flags(self, f): return self[f].flags()
   727 
   723 
   728     def parents(self):
   724     def parents(self):
   729         """return contexts for each parent changeset"""
   725         """return contexts for each parent changeset"""
   730         return self._parents
   726         return self._parents
   731 
   727 
   748 
   744 
   749     def __nonzero__(self): return True
   745     def __nonzero__(self): return True
   750     def __str__(self): return "%s@%s" % (self.path(), self._changectx)
   746     def __str__(self): return "%s@%s" % (self.path(), self._changectx)
   751     def path(self): return self._path
   747     def path(self): return self._path
   752     def data(self): return self._data
   748     def data(self): return self._data
   753     def fileflags(self): return self._flags
   749     def flags(self): return self._flags
   754     def isexec(self): return 'x' in self._flags
   750     def isexec(self): return 'x' in self._flags
   755     def islink(self): return 'l' in self._flags
   751     def islink(self): return 'l' in self._flags
   756     def renamed(self): return self._copied
   752     def renamed(self): return self._copied
   757 
   753