mercurial/context.py
changeset 2652 f23973ea3107
parent 2629 a49534aac47d
child 2858 345bac2bc4ec
equal deleted inserted replaced
2651:6414ee2eb688 2652:f23973ea3107
     9     """A changecontext object makes access to data related to a particular
     9     """A changecontext object makes access to data related to a particular
    10     changeset convenient."""
    10     changeset convenient."""
    11     def __init__(self, repo, changeid):
    11     def __init__(self, repo, changeid):
    12         """changeid is a revision number, node, or tag"""
    12         """changeid is a revision number, node, or tag"""
    13         self._repo = repo
    13         self._repo = repo
    14         self._id = changeid
       
    15 
    14 
    16         self._node = self._repo.lookup(self._id)
    15         self._node = self._repo.lookup(changeid)
    17         self._rev = self._repo.changelog.rev(self._node)
    16         self._rev = self._repo.changelog.rev(self._node)
    18 
    17 
    19     def changeset(self):
    18     def changeset(self):
    20         try:
    19         try:
    21             return self._changeset
    20             return self._changeset
    72     def __init__(self, repo, path, changeid=None, fileid=None):
    71     def __init__(self, repo, path, changeid=None, fileid=None):
    73         """changeid can be a changeset revision, node, or tag.
    72         """changeid can be a changeset revision, node, or tag.
    74            fileid can be a file revision or node."""
    73            fileid can be a file revision or node."""
    75         self._repo = repo
    74         self._repo = repo
    76         self._path = path
    75         self._path = path
    77         self._id = changeid
       
    78         self._fileid = fileid
       
    79 
    76 
    80         if self._id:
    77         assert changeid or fileid
       
    78 
       
    79         if not fileid:
    81             # if given a changeset id, go ahead and look up the file
    80             # if given a changeset id, go ahead and look up the file
    82             self._changeset = self._repo.changelog.read(self._id)
    81             self._changeid = changeid
    83             node, flag = self._repo.manifest.find(self._changeset[0], path)
    82             self._changectx = self.changectx()
    84             self._filelog = self._repo.file(self._path)
    83             self._filelog = self._repo.file(self._path)
    85             self._filenode = node
    84             self._filenode = self._changectx.filenode(self._path)
    86         elif self._fileid:
    85         else:
    87             # else be lazy
    86             # else be lazy
    88             self._filelog = self._repo.file(self._path)
    87             self._filelog = self._repo.file(self._path)
    89             self._filenode = self._filelog.lookup(self._fileid)
    88             self._filenode = self._filelog.lookup(fileid)
       
    89             self._changeid = self._filelog.linkrev(self._filenode)
    90         self._filerev = self._filelog.rev(self._filenode)
    90         self._filerev = self._filelog.rev(self._filenode)
    91 
    91 
    92     def changeset(self):
    92     def changectx(self):
    93         try:
    93         try:
    94             return self._changeset
    94             return self._changectx
    95         except AttributeError:
    95         except AttributeError:
    96             self._changeset = self._repo.changelog.read(self.node())
    96             self._changectx = changectx(self._repo, self._changeid)
    97             return self._changeset
    97             return self._changectx
    98 
    98 
    99     def filerev(self): return self._filerev
    99     def filerev(self): return self._filerev
   100     def filenode(self): return self._filenode
   100     def filenode(self): return self._filenode
   101     def filelog(self): return self._filelog
   101     def filelog(self): return self._filelog
   102 
   102 
   103     def rev(self): return self.changeset().rev()
   103     def rev(self): return self.changectx().rev()
   104     def node(self): return self.changeset().node()
   104     def node(self): return self.changectx().node()
   105     def user(self): return self.changeset().user()
   105     def user(self): return self.changectx().user()
   106     def date(self): return self.changeset().date()
   106     def date(self): return self.changectx().date()
   107     def files(self): return self.changeset().files()
   107     def files(self): return self.changectx().files()
   108     def description(self): return self.changeset().description()
   108     def description(self): return self.changectx().description()
   109     def manifest(self): return self.changeset().manifest()
   109     def manifest(self): return self.changectx().manifest()
   110 
   110 
   111     def data(self): return self._filelog.read(self._filenode)
   111     def data(self): return self._filelog.read(self._filenode)
   112     def metadata(self): return self._filelog.readmeta(self._filenode)
   112     def metadata(self): return self._filelog.readmeta(self._filenode)
   113     def renamed(self): return self._filelog.renamed(self._filenode)
   113     def renamed(self): return self._filelog.renamed(self._filenode)
   114 
   114