Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/context.py @ 6715:a3c41abfa828
context: add memctx for memory commits
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Thu, 19 Jun 2008 00:14:23 +0200 |
parents | f84f507c53d3 |
children | 4386a7706828 |
comparison
equal
deleted
inserted
replaced
6714:5f339b6a7eff | 6715:a3c41abfa828 |
---|---|
671 except OSError, err: | 671 except OSError, err: |
672 if err.errno != errno.ENOENT: raise | 672 if err.errno != errno.ENOENT: raise |
673 return (t, tz) | 673 return (t, tz) |
674 | 674 |
675 def cmp(self, text): return self._repo.wread(self._path) == text | 675 def cmp(self, text): return self._repo.wread(self._path) == text |
676 | |
677 class memctx(object): | |
678 """A memctx is a subset of changectx supposed to be built on memory | |
679 and passed to commit functions. | |
680 | |
681 NOTE: this interface and the related memfilectx are experimental and | |
682 may change without notice. | |
683 | |
684 parents - a pair of parent nodeids. | |
685 filectxfn - a callable taking (repo, memctx, path) arguments and | |
686 returning a memctx object. | |
687 date - any valid date string or (unixtime, offset), or None. | |
688 user - username string, or None. | |
689 extra - a dictionary of extra values, or None. | |
690 """ | |
691 def __init__(self, repo, parents, text, files, filectxfn, user=None, | |
692 date=None, extra=None): | |
693 self._repo = repo | |
694 self._rev = None | |
695 self._node = None | |
696 self._text = text | |
697 self._date = date and util.parsedate(date) or util.makedate() | |
698 self._user = user or self._repo.ui.username() | |
699 parents = [(p or nullid) for p in parents] | |
700 p1, p2 = parents | |
701 self._parents = [self._repo.changectx(p) for p in (p1, p2)] | |
702 files = list(files) | |
703 files.sort() | |
704 self._status = [files, [], [], [], []] | |
705 self._filectxfn = filectxfn | |
706 | |
707 self._extra = extra and extra.copy() or {} | |
708 if 'branch' not in self._extra: | |
709 self._extra['branch'] = 'default' | |
710 elif self._extra.get('branch') == '': | |
711 self._extra['branch'] = 'default' | |
712 | |
713 def __str__(self): | |
714 return str(self._parents[0]) + "+" | |
715 | |
716 def __nonzero__(self): | |
717 return True | |
718 | |
719 def user(self): return self._user | |
720 def date(self): return self._date | |
721 def description(self): return self._text | |
722 def files(self): return self.modified() | |
723 def modified(self): return self._status[0] | |
724 def added(self): return self._status[1] | |
725 def removed(self): return self._status[2] | |
726 def deleted(self): return self._status[3] | |
727 def unknown(self): return self._status[4] | |
728 def clean(self): return self._status[5] | |
729 def branch(self): return self._extra['branch'] | |
730 def extra(self): return self._extra | |
731 | |
732 def parents(self): | |
733 """return contexts for each parent changeset""" | |
734 return self._parents | |
735 | |
736 def filectx(self, path, filelog=None): | |
737 """get a file context from the working directory""" | |
738 return self._filectxfn(self._repo, self, path) | |
739 | |
740 class memfilectx(object): | |
741 """A memfilectx is a subset of filectx supposed to be built by client | |
742 code and passed to commit functions. | |
743 """ | |
744 def __init__(self, path, data, islink, isexec, copied): | |
745 """copied is the source file path, or None.""" | |
746 self._path = path | |
747 self._data = data | |
748 self._flags = (islink and 'l' or '') + (isexec and 'x' or '') | |
749 self._copied = None | |
750 if copied: | |
751 self._copied = (copied, nullid) | |
752 | |
753 def __nonzero__(self): return True | |
754 def __str__(self): return "%s@%s" % (self.path(), self._changectx) | |
755 def path(self): return self._path | |
756 def data(self): return self._data | |
757 def fileflags(self): return self._flags | |
758 def isexec(self): return 'x' in self._flags | |
759 def islink(self): return 'l' in self._flags | |
760 def renamed(self): return self._copied | |
761 |