largefiles: replace manifestdict.__contains__, don't extend class
authorMartin von Zweigbergk <martinvonz@google.com>
Mon, 09 Mar 2015 17:13:22 -0700
changeset 24276 2720f967a7b1
parent 24275 e1cb460a3524
child 24277 22d560fe1516
largefiles: replace manifestdict.__contains__, don't extend class We're soon going to add an alternative manifest class (treemanifest). Rather than extending both those classes by largesfiles versions, let's replace the method on the manifest instances.
hgext/largefiles/reposetup.py
--- a/hgext/largefiles/reposetup.py	Sun Mar 08 16:50:57 2015 -0400
+++ b/hgext/largefiles/reposetup.py	Mon Mar 09 17:13:22 2015 -0700
@@ -10,7 +10,7 @@
 import copy
 import os
 
-from mercurial import error, manifest, match as match_, util
+from mercurial import error, match as match_, util
 from mercurial.i18n import _
 from mercurial import scmutil, localrepo
 
@@ -38,17 +38,17 @@
         def __getitem__(self, changeid):
             ctx = super(lfilesrepo, self).__getitem__(changeid)
             if self.lfstatus:
-                class lfilesmanifestdict(manifest.manifestdict):
-                    def __contains__(self, filename):
-                        orig = super(lfilesmanifestdict, self).__contains__
-                        return orig(filename) or orig(lfutil.standin(filename))
                 class lfilesctx(ctx.__class__):
                     def files(self):
                         filenames = super(lfilesctx, self).files()
                         return [lfutil.splitstandin(f) or f for f in filenames]
                     def manifest(self):
                         man1 = super(lfilesctx, self).manifest()
-                        man1.__class__ = lfilesmanifestdict
+                        orig = man1.__contains__
+                        def __contains__(self, filename):
+                            return (orig(filename) or
+                                    orig(lfutil.standin(filename)))
+                        man1.__contains__ = __contains__.__get__(man1)
                         return man1
                     def filectx(self, path, fileid=None, filelog=None):
                         orig = super(lfilesctx, self).filectx