comparison hgext/transplant.py @ 13579:3cbb3c57a50e

transplant: added 'HGREVISION' variable to the environment passed to the 'filter' command Sometimes it is necessary to know the original revision ID in order to correctly rewrite the patch or commit message when transplanting. This patch follows the pattern set by the existing 'HGUSER' environment variable, and adds a test that covers both HGUSER and HGREVISION.
author Luke Plant <L.Plant.98@cantab.net>
date Fri, 11 Mar 2011 15:48:44 +0000
parents 3da456d0c885
children 2151703e7f84
comparison
equal deleted inserted replaced
13578:e720b3324e35 13579:3cbb3c57a50e
175 self.saveseries(revmap, merges) 175 self.saveseries(revmap, merges)
176 self.transplants.write() 176 self.transplants.write()
177 lock.release() 177 lock.release()
178 wlock.release() 178 wlock.release()
179 179
180 def filter(self, filter, changelog, patchfile): 180 def filter(self, filter, node, changelog, patchfile):
181 '''arbitrarily rewrite changeset before applying it''' 181 '''arbitrarily rewrite changeset before applying it'''
182 182
183 self.ui.status(_('filtering %s\n') % patchfile) 183 self.ui.status(_('filtering %s\n') % patchfile)
184 user, date, msg = (changelog[1], changelog[2], changelog[4]) 184 user, date, msg = (changelog[1], changelog[2], changelog[4])
185
186 fd, headerfile = tempfile.mkstemp(prefix='hg-transplant-') 185 fd, headerfile = tempfile.mkstemp(prefix='hg-transplant-')
187 fp = os.fdopen(fd, 'w') 186 fp = os.fdopen(fd, 'w')
188 fp.write("# HG changeset patch\n") 187 fp.write("# HG changeset patch\n")
189 fp.write("# User %s\n" % user) 188 fp.write("# User %s\n" % user)
190 fp.write("# Date %d %d\n" % date) 189 fp.write("# Date %d %d\n" % date)
192 fp.close() 191 fp.close()
193 192
194 try: 193 try:
195 util.system('%s %s %s' % (filter, util.shellquote(headerfile), 194 util.system('%s %s %s' % (filter, util.shellquote(headerfile),
196 util.shellquote(patchfile)), 195 util.shellquote(patchfile)),
197 environ={'HGUSER': changelog[1]}, 196 environ={'HGUSER': changelog[1],
197 'HGREVISION': revlog.hex(node),
198 },
198 onerr=util.Abort, errprefix=_('filter failed')) 199 onerr=util.Abort, errprefix=_('filter failed'))
199 user, date, msg = self.parselog(file(headerfile))[1:4] 200 user, date, msg = self.parselog(file(headerfile))[1:4]
200 finally: 201 finally:
201 os.unlink(headerfile) 202 os.unlink(headerfile)
202 203
207 '''apply the patch in patchfile to the repository as a transplant''' 208 '''apply the patch in patchfile to the repository as a transplant'''
208 (manifest, user, (time, timezone), files, message) = cl[:5] 209 (manifest, user, (time, timezone), files, message) = cl[:5]
209 date = "%d %d" % (time, timezone) 210 date = "%d %d" % (time, timezone)
210 extra = {'transplant_source': node} 211 extra = {'transplant_source': node}
211 if filter: 212 if filter:
212 (user, date, message) = self.filter(filter, cl, patchfile) 213 (user, date, message) = self.filter(filter, node, cl, patchfile)
213 214
214 if log: 215 if log:
215 # we don't translate messages inserted into commits 216 # we don't translate messages inserted into commits
216 message += '\n(transplanted from %s)' % revlog.hex(node) 217 message += '\n(transplanted from %s)' % revlog.hex(node)
217 218