changegroup: store source and url in the `hookargs` dict
We store the source and url of the current data into `transaction.hookargs` this
let us inherit it from upper layers that may have created a much wider
transaction. We have to modify bundle2 at the same time to register the source
and url in the transaction. We have to do it in the same patch otherwise, the
`addchangegroup` call would fill these values and the hook calling will crash
because of the duplicated 'source' and 'url' arguments passed to the hook call.
--- a/mercurial/changegroup.py Tue Oct 14 00:43:20 2014 -0700
+++ b/mercurial/changegroup.py Tue Oct 14 00:06:46 2014 -0700
@@ -602,9 +602,14 @@
oldheads = cl.heads()
tr = repo.transaction("\n".join([srctype, util.hidepassword(url)]))
+ # The transaction could have been created before and already carries source
+ # information. In this case we use the top level data. We overwrite the
+ # argument because we need to use the top level value (if they exist) in
+ # this function.
+ srctype = tr.hookargs.setdefault('source', srctype)
+ url = tr.hookargs.setdefault('url', url)
try:
- repo.hook('prechangegroup', throw=True, source=srctype, url=url,
- **tr.hookargs)
+ repo.hook('prechangegroup', throw=True, **tr.hookargs)
trp = weakref.proxy(tr)
# pull off the changeset group
@@ -692,8 +697,7 @@
else:
hookargs = dict(tr.hookargs)
hookargs['node'] = hex(cl.node(clstart))
- repo.hook('pretxnchangegroup', throw=True, source=srctype,
- url=url, pending=p, **hookargs)
+ repo.hook('pretxnchangegroup', throw=True, pending=p, **hookargs)
added = [cl.node(r) for r in xrange(clstart, clend)]
publishing = repo.ui.configbool('phases', 'publish', True)
@@ -739,13 +743,12 @@
# forcefully update the on-disk branch cache
repo.ui.debug("updating the branch cache\n")
- repo.hook("changegroup", source=srctype, url=url,
- **hookargs)
+ repo.hook("changegroup", **hookargs)
for n in added:
args = hookargs.copy()
args['node'] = hex(n)
- repo.hook("incoming", source=srctype, url=url, **args)
+ repo.hook("incoming", **args)
newheads = [h for h in repo.heads() if h not in oldheads]
repo.ui.log("incoming",
--- a/mercurial/exchange.py Tue Oct 14 00:43:20 2014 -0700
+++ b/mercurial/exchange.py Tue Oct 14 00:06:46 2014 -0700
@@ -1235,15 +1235,16 @@
if util.safehasattr(cg, 'params'):
try:
tr = repo.transaction('unbundle')
+ tr.hookargs['source'] = source
+ tr.hookargs['url'] = url
tr.hookargs['bundle2-exp'] = '1'
r = bundle2.processbundle(repo, cg, lambda: tr).reply
cl = repo.unfiltered().changelog
p = cl.writepending() and repo.root or ""
- repo.hook('b2x-pretransactionclose', throw=True, source=source,
- url=url, pending=p, **tr.hookargs)
+ repo.hook('b2x-pretransactionclose', throw=True, pending=p,
+ **tr.hookargs)
tr.close()
- repo.hook('b2x-transactionclose', source=source, url=url,
- **tr.hookargs)
+ repo.hook('b2x-transactionclose', **tr.hookargs)
except Exception, exc:
exc.duringunbundle2 = True
raise
--- a/tests/test-bundle2-exchange.t Tue Oct 14 00:43:20 2014 -0700
+++ b/tests/test-bundle2-exchange.t Tue Oct 14 00:06:46 2014 -0700
@@ -153,7 +153,7 @@
pushing to other
searching for changes
b2x-transactionclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2-EXP=1 HG_NEW_OBSMARKERS=1 HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_PHASES_MOVED=1 HG_SOURCE=push HG_URL=push
- changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_SOURCE=bundle2 HG_URL=bundle2
+ changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=eea13746799a9e0bfd88f29d3c2e9dc9389f524f HG_SOURCE=push HG_URL=push
remote: adding changesets
remote: adding manifests
remote: adding file changes
@@ -229,7 +229,7 @@
remote: 1 new obsolescence markers
updating bookmark book_5fdd
remote: b2x-transactionclose hook: HG_BOOKMARK_MOVED=1 HG_BUNDLE2-EXP=1 HG_NEW_OBSMARKERS=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
- remote: changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=bundle2 HG_URL=bundle2
+ remote: changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=5fddd98957c8a54a4d436dfe1da9d87f21a1b97b HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
$ hg -R other log -G
o 6:5fddd98957c8 draft Nicolas Dumazet <nicdumz.commits@gmail.com> book_5fdd C
|
@@ -456,7 +456,7 @@
searching for changes
transaction abort!
rollback completed
- changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=e7ec4e813ba6b07be2a0516ce1a74bb4e503f91a HG_SOURCE=bundle2 HG_URL=bundle2
+ changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=e7ec4e813ba6b07be2a0516ce1a74bb4e503f91a HG_SOURCE=push HG_URL=push
abort: b2x-pretransactionclose.failpush hook exited with status 1
[255]
@@ -466,7 +466,7 @@
abort: b2x-pretransactionclose.failpush hook exited with status 1
remote: transaction abort!
remote: rollback completed
- remote: changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=e7ec4e813ba6b07be2a0516ce1a74bb4e503f91a HG_SOURCE=bundle2 HG_URL=bundle2
+ remote: changegroup hook: HG_BUNDLE2-EXP=1 HG_NODE=e7ec4e813ba6b07be2a0516ce1a74bb4e503f91a HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
[255]
$ hg -R main push http://localhost:$HGPORT2/ -r e7ec4e813ba6