basectx: return a copied context if changeid is already a basectx
authorSean Farley <sean.michael.farley@gmail.com>
Tue, 06 Aug 2013 15:50:28 -0500
changeset 19538 049d6b5a4a59
parent 19537 6e3e8575276d
child 19539 79671c46bb46
basectx: return a copied context if changeid is already a basectx This implements a copy constructor so that we can pass a basectx-derived object in future refactorings.
mercurial/context.py
--- a/mercurial/context.py	Sat Jul 13 19:59:21 2013 -0500
+++ b/mercurial/context.py	Tue Aug 06 15:50:28 2013 -0500
@@ -24,7 +24,16 @@
     memctx: a context that represents changes in-memory and can also
             be committed."""
     def __new__(cls, repo, changeid='', *args, **kwargs):
-        return super(basectx, cls).__new__(cls)
+        if isinstance(changeid, basectx):
+            return changeid
+
+        o = super(basectx, cls).__new__(cls)
+
+        o._repo = repo
+        o._rev = nullrev
+        o._node = nullid
+
+        return o
 
 class changectx(basectx):
     """A changecontext object makes access to data related to a particular