Skip to content
Snippets Groups Projects
  • Gregory Szorc's avatar
    953839de96ab
    bundle2: store changeset count when creating file bundles · 953839de96ab
    Gregory Szorc authored
    The bundle2 changegroup part has an advisory param saying how many
    changesets are in the part. Before this patch, we were setting
    this part when generating bundle2 parts via the wire protocol but
    not when generating local bundle2 files.
    
    A side effect of not setting the changeset count part is that progress
    bars don't work when applying changesets. As the tests show, this
    impacted clone bundles, shelve, backup bundles, `hg unbundle`, and
    anything touching bundle2 files.
    
    This patch adds a backdoor to allow us to pass state from
    changegroup generation into the unbundler. We store the number
    of changesets in the changegroup in this state and use it to
    populate the aforementioned advisory part parameter when generating
    the bundle2 bundle.
    
    I concede that I'm not thrilled by how state is being passed in
    changegroup.py (it feels a bit hacky). I would love to overhaul the
    rather confusing set of functions in changegroup.py with something that
    passes rich objects around instead of e.g. low-level generators.
    However, given the code freeze for 3.9 is imminent, I'd rather not
    undertake this endeavor right now. This feels like the easiest way
    to get the parameter added to the changegroup part.
    953839de96ab
    History
    bundle2: store changeset count when creating file bundles
    Gregory Szorc authored
    The bundle2 changegroup part has an advisory param saying how many
    changesets are in the part. Before this patch, we were setting
    this part when generating bundle2 parts via the wire protocol but
    not when generating local bundle2 files.
    
    A side effect of not setting the changeset count part is that progress
    bars don't work when applying changesets. As the tests show, this
    impacted clone bundles, shelve, backup bundles, `hg unbundle`, and
    anything touching bundle2 files.
    
    This patch adds a backdoor to allow us to pass state from
    changegroup generation into the unbundler. We store the number
    of changesets in the changegroup in this state and use it to
    populate the aforementioned advisory part parameter when generating
    the bundle2 bundle.
    
    I concede that I'm not thrilled by how state is being passed in
    changegroup.py (it feels a bit hacky). I would love to overhaul the
    rather confusing set of functions in changegroup.py with something that
    passes rich objects around instead of e.g. low-level generators.
    However, given the code freeze for 3.9 is imminent, I'd rather not
    undertake this endeavor right now. This feels like the easiest way
    to get the parameter added to the changegroup part.