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