Mercurial > hgrepos > DevTools > mercurial-extensions
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 31:0597395e2d18 | 32:cfa53f8a6607 |
|---|---|
| 98 | 98 |
| 99 # | 99 # |
| 100 # Monkey patch archival's archivers classes so that an archiver's "addfile()" | 100 # Monkey patch archival's archivers classes so that an archiver's "addfile()" |
| 101 # expands keywords | 101 # expands keywords |
| 102 # | 102 # |
| 103 | 103 for ac in ("fileit", "tarit", "zipit",): |
| 104 orig_fileit_addfile = archival.fileit.addfile | 104 patch_archiver_class(ac) |
| 105 def new_fileit_addfile(self, name, mode, isline, data): | |
| 106 print "FILE-ARCHIVER: --------------->", name, mode, isline | |
| 107 return orig_fileit_addfile(self, name, mode, isline, data) | |
| 108 archival.fileit.addfile = new_fileit_addfile | |
| 109 | |
| 110 orig_tarit_addfile = archival.tarit.addfile | |
| 111 def new_tarit_addfile(self, name, mode, isline, data): | |
| 112 print "TAR-ARCHIVER: ----------->", name, mode, isline | |
| 113 return orig_tarit_addfile(self, name, mode, isline, data) | |
| 114 archival.tarit.addfile = new_tarit_addfile | |
| 115 | |
| 116 orig_zipit_addfile = archival.zipit.addfile | |
| 117 def new_zipit_addfile(self, name, mode, isline, data): | |
| 118 print "ZIP-ARCHIVER: ----------->", name, mode, isline | |
| 119 return orig_zipit_addfile(self, name, mode, isline, data) | |
| 120 archival.zipit.addfile = new_zipit_addfile | |
| 121 | 105 |
| 122 archival.archive(repo, dest, node, kind, not opts.get('no_decode'), | 106 archival.archive(repo, dest, node, kind, not opts.get('no_decode'), |
| 123 matchfn, prefix, subrepos=opts.get('subrepos')) | 107 matchfn, prefix, subrepos=opts.get('subrepos')) |
| 124 | 108 |
| 125 # XXX FIXME: Should we restore the original methods here? | 109 # XXX FIXME: Should the original methods be restored here? |
| 110 | |
| 111 | |
| 112 def patch_archiver_class(archivername): | |
| 113 """Patch an archiver class and return the original unbound method""" | |
| 114 | |
| 115 archiver_class = getattr(archival, archivername) | |
| 116 orig_addfile = getattr(archiver_class, "addfile") | |
| 117 | |
| 118 def new_addfile(self, name, mode, isline, data): | |
| 119 print "==> ARCHIVER(%s)" % archivername, name, mode, isline | |
| 120 return orig_addfile(self, name, mode, isline, data) | |
| 121 | |
| 122 setattr(archiver_class, "addfile", new_addfile) | |
| 123 return orig_addfile | |
| 126 | 124 |
| 127 | 125 |
| 128 def filter2(s, params, ui, **kwargs): | 126 def filter2(s, params, ui, **kwargs): |
| 129 print "=============>", repr(params), repr(kwargs) | 127 print "=============>", repr(params), repr(kwargs) |
| 130 return s | 128 return s |
