Mercurial > hg
changeset 20948:329cd74b52bd
bundle2: introduce a bundleoperation object
This object will hold all data and state gathered through the processing of a
bundle. This will allow:
- each handler to be aware of the things unbundled so far
- the caller to retrieve data about the execution
- bear useful object and logic (like repo, transaction)
- bear possible bundle2 reply triggered by the unbundling.
For now the object is very simple but it will grow at the same time as the
bundle2 implementation.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 02 Apr 2014 22:24:44 -0700 |
parents | c33d7bf53812 |
children | 571f2903ff1e |
files | mercurial/bundle2.py tests/test-bundle2.t |
diffstat | 2 files changed, 27 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/bundle2.py Wed Apr 02 13:50:57 2014 -0700 +++ b/mercurial/bundle2.py Wed Apr 02 22:24:44 2014 -0700 @@ -183,6 +183,26 @@ return func return _decorator +class bundleoperation(object): + """an object that represents a single bundling process + + Its purpose is to carry unbundle-related objects and states. + + A new object should be created at the beginning of each bundle processing. + The object is to be returned by the processing function. + + The object has very little content now it will ultimately contain: + * an access to the repo the bundle is applied to, + * a ui object, + * a way to retrieve a transaction to add changes to the repo, + * a way to record the result of processing each part, + * a way to construct a bundle response when applicable. + """ + + def __init__(self, repo): + self.repo = repo + self.ui = repo.ui + def processbundle(repo, unbundler): """This function process a bundle, apply effect to/from a repo @@ -194,7 +214,7 @@ Unknown Mandatory part will abort the process. """ - ui = repo.ui + op = bundleoperation(repo) # todo: # - replace this is a init function soon. # - exception catching @@ -207,17 +227,17 @@ key = parttype.lower() try: handler = parthandlermapping[key] - ui.debug('found an handler for part %r\n' % parttype) + op.ui.debug('found a handler for part %r\n' % parttype) except KeyError: if key != parttype: # mandatory parts # todo: # - use a more precise exception raise - ui.debug('ignoring unknown advisory part %r\n' % key) + op.ui.debug('ignoring unknown advisory part %r\n' % key) # todo: # - consume the part once we use streaming continue - handler(repo, part) + handler(op, part) except Exception: for part in iterparts: pass # consume the bundle content
--- a/tests/test-bundle2.t Wed Apr 02 13:50:57 2014 -0700 +++ b/tests/test-bundle2.t Wed Apr 02 22:24:44 2014 -0700 @@ -21,11 +21,11 @@ > assert len(ELEPHANTSSONG) == 178 # future test say 178 bytes, trust it. > > @bundle2.parthandler('test:song') - > def songhandler(repo, part): + > def songhandler(op, part): > """handle a "test:song" bundle2 part, printing the lyrics on stdin""" - > repo.ui.write('The choir start singing:\n') + > op.ui.write('The choir starts singing:\n') > for line in part.data.split('\n'): - > repo.ui.write(' %s\n' % line) + > op.ui.write(' %s\n' % line) > > @command('bundle2', > [('', 'param', [], 'stream level parameter'),