mercurial/bundle2.py
changeset 20948 329cd74b52bd
parent 20947 c33d7bf53812
child 20949 571f2903ff1e
equal deleted inserted replaced
20947:c33d7bf53812 20948:329cd74b52bd
   181         assert lparttype not in parthandlermapping
   181         assert lparttype not in parthandlermapping
   182         parthandlermapping[lparttype] = func
   182         parthandlermapping[lparttype] = func
   183         return func
   183         return func
   184     return _decorator
   184     return _decorator
   185 
   185 
       
   186 class bundleoperation(object):
       
   187     """an object that represents a single bundling process
       
   188 
       
   189     Its purpose is to carry unbundle-related objects and states.
       
   190 
       
   191     A new object should be created at the beginning of each bundle processing.
       
   192     The object is to be returned by the processing function.
       
   193 
       
   194     The object has very little content now it will ultimately contain:
       
   195     * an access to the repo the bundle is applied to,
       
   196     * a ui object,
       
   197     * a way to retrieve a transaction to add changes to the repo,
       
   198     * a way to record the result of processing each part,
       
   199     * a way to construct a bundle response when applicable.
       
   200     """
       
   201 
       
   202     def __init__(self, repo):
       
   203         self.repo = repo
       
   204         self.ui = repo.ui
       
   205 
   186 def processbundle(repo, unbundler):
   206 def processbundle(repo, unbundler):
   187     """This function process a bundle, apply effect to/from a repo
   207     """This function process a bundle, apply effect to/from a repo
   188 
   208 
   189     It iterates over each part then searches for and uses the proper handling
   209     It iterates over each part then searches for and uses the proper handling
   190     code to process the part. Parts are processed in order.
   210     code to process the part. Parts are processed in order.
   192     This is very early version of this function that will be strongly reworked
   212     This is very early version of this function that will be strongly reworked
   193     before final usage.
   213     before final usage.
   194 
   214 
   195     Unknown Mandatory part will abort the process.
   215     Unknown Mandatory part will abort the process.
   196     """
   216     """
   197     ui = repo.ui
   217     op = bundleoperation(repo)
   198     # todo:
   218     # todo:
   199     # - replace this is a init function soon.
   219     # - replace this is a init function soon.
   200     # - exception catching
   220     # - exception catching
   201     unbundler.params
   221     unbundler.params
   202     iterparts = iter(unbundler)
   222     iterparts = iter(unbundler)
   205             parttype = part.type
   225             parttype = part.type
   206             # part key are matched lower case
   226             # part key are matched lower case
   207             key = parttype.lower()
   227             key = parttype.lower()
   208             try:
   228             try:
   209                 handler = parthandlermapping[key]
   229                 handler = parthandlermapping[key]
   210                 ui.debug('found an handler for part %r\n' % parttype)
   230                 op.ui.debug('found a handler for part %r\n' % parttype)
   211             except KeyError:
   231             except KeyError:
   212                 if key != parttype: # mandatory parts
   232                 if key != parttype: # mandatory parts
   213                     # todo:
   233                     # todo:
   214                     # - use a more precise exception
   234                     # - use a more precise exception
   215                     raise
   235                     raise
   216                 ui.debug('ignoring unknown advisory part %r\n' % key)
   236                 op.ui.debug('ignoring unknown advisory part %r\n' % key)
   217                 # todo:
   237                 # todo:
   218                 # - consume the part once we use streaming
   238                 # - consume the part once we use streaming
   219                 continue
   239                 continue
   220             handler(repo, part)
   240             handler(op, part)
   221     except Exception:
   241     except Exception:
   222         for part in iterparts:
   242         for part in iterparts:
   223             pass # consume the bundle content
   243             pass # consume the bundle content
   224         raise
   244         raise
   225 
   245