Mercurial > hg-stable
changeset 22971:3fe571c74b27
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.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Tue, 14 Oct 2014 00:06:46 -0700 |
parents | d82e2223f132 |
children | 44b16b59b80a |
files | mercurial/changegroup.py mercurial/exchange.py tests/test-bundle2-exchange.t |
diffstat | 3 files changed, 19 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- 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