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 |