# HG changeset patch # User Franz Glasner # Date 1510417020 -3600 # Node ID cfa53f8a6607d3d10f54023ab1ded39826e27bcc # Parent 0597395e2d18b37971fadf6a46b4c96d42e429c8 Refactor the class' monkey-patching diff -r 0597395e2d18 -r cfa53f8a6607 extensions/kwarchive.py --- a/extensions/kwarchive.py Sat Nov 11 16:30:27 2017 +0100 +++ b/extensions/kwarchive.py Sat Nov 11 17:17:00 2017 +0100 @@ -100,29 +100,27 @@ # Monkey patch archival's archivers classes so that an archiver's "addfile()" # expands keywords # - - orig_fileit_addfile = archival.fileit.addfile - def new_fileit_addfile(self, name, mode, isline, data): - print "FILE-ARCHIVER: --------------->", name, mode, isline - return orig_fileit_addfile(self, name, mode, isline, data) - archival.fileit.addfile = new_fileit_addfile - - orig_tarit_addfile = archival.tarit.addfile - def new_tarit_addfile(self, name, mode, isline, data): - print "TAR-ARCHIVER: ----------->", name, mode, isline - return orig_tarit_addfile(self, name, mode, isline, data) - archival.tarit.addfile = new_tarit_addfile - - orig_zipit_addfile = archival.zipit.addfile - def new_zipit_addfile(self, name, mode, isline, data): - print "ZIP-ARCHIVER: ----------->", name, mode, isline - return orig_zipit_addfile(self, name, mode, isline, data) - archival.zipit.addfile = new_zipit_addfile + for ac in ("fileit", "tarit", "zipit",): + patch_archiver_class(ac) archival.archive(repo, dest, node, kind, not opts.get('no_decode'), matchfn, prefix, subrepos=opts.get('subrepos')) - # XXX FIXME: Should we restore the original methods here? + # XXX FIXME: Should the original methods be restored here? + + +def patch_archiver_class(archivername): + """Patch an archiver class and return the original unbound method""" + + archiver_class = getattr(archival, archivername) + orig_addfile = getattr(archiver_class, "addfile") + + def new_addfile(self, name, mode, isline, data): + print "==> ARCHIVER(%s)" % archivername, name, mode, isline + return orig_addfile(self, name, mode, isline, data) + + setattr(archiver_class, "addfile", new_addfile) + return orig_addfile def filter2(s, params, ui, **kwargs):