comparison mercurial/context.py @ 6743:86e8187b721a

simplify flag handling add _checklink var to dirstate introduce dirstate.flagfunc switch users of util.execfunc/linkfunc to flagfunc change manifestdict.set to take a flags string change ctx.fileflags to ctx.flags change gitmode func to a dict remove util.execfunc/linkfunc
author Matt Mackall <mpm@selenic.com>
date Thu, 26 Jun 2008 13:46:34 -0500
parents 2d54e7c1e69d
children d3691d31fc9c
comparison
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