D6008: context: add specialized way of getting copy source file only

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Sat Feb 23 17:09:00 UTC 2019


martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  I'm working on support for storing copy metadata in the changeset
  instead of the filelog. I don't intend to include the file nodeid
  there, but most callers don't need that anyway. This patch introduces
  a method similar to ctx.renamed(), but the new method returns only the
  source filename, not the nodeid. Subsequent patches will move callers
  over to this new method.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6008

AFFECTED FILES
  hgext/remotefilelog/remotefilectx.py
  mercurial/context.py

CHANGE DETAILS

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -691,6 +691,8 @@
         return self._changectx
     def renamed(self):
         return self._copied
+    def copysource(self):
+        return self._copied and self._copied[0]
     def repo(self):
         return self._repo
     def size(self):
@@ -1703,6 +1705,8 @@
         if not rp:
             return None
         return rp, self._changectx._parents[0]._manifest.get(rp, nullid)
+    def copysource(self):
+        return self._repo.dirstate.copied(self._path)
 
     def size(self):
         return self._repo.wvfs.lstat(self._path).st_size
@@ -2148,6 +2152,9 @@
             return None
         return path, self._changectx._parents[0]._manifest.get(path, nullid)
 
+    def copysource(self):
+        return self._parent.copydata(self._path)
+
     def size(self):
         return self._parent.size(self._path)
 
diff --git a/hgext/remotefilelog/remotefilectx.py b/hgext/remotefilelog/remotefilectx.py
--- a/hgext/remotefilelog/remotefilectx.py
+++ b/hgext/remotefilelog/remotefilectx.py
@@ -136,6 +136,10 @@
                 pass
         return renamed
 
+    def copysource(self):
+        copy = self.renamed()
+        return copy and copy[0]
+
     def ancestormap(self):
         if not self._ancestormap:
             self._ancestormap = self.filelog().ancestormap(self._filenode)



To: martinvonz, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list