Mercurial > hgrepos > DevTools > mercurial-extensions
diff extensions/kwarchive.py @ 32:cfa53f8a6607
Refactor the class' monkey-patching
| author | Franz Glasner <hg@dom66.de> |
|---|---|
| date | Sat, 11 Nov 2017 17:17:00 +0100 |
| parents | 0597395e2d18 |
| children | dc8db9693262 |
line wrap: on
line diff
--- 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):
