Mercurial > hg
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 |