fc37243ffe
Rather than requiring the last listed bundle in the manifest include all refs that are in the remote, build up refs from each bundle listed in the manifest. This fixes a bug where pushing first a new branch foo from one clone, and then pushing a new branch bar from another clone, caused the second push to lose branch foo. Now the second push will add a new bundle, but the foo ref in the bundle from the first push will still be used. Pushing a deletion of a ref now has to delete all bundles and push a new bundle with only the remaining refs in it. In a "list for-push", it now has to unbundle all bundles, in order for a deletion repush to have available all objects. (And a non-deletion push can also rely on refs/namespaces/mine/ being up-to-date.) It would have been possible to fix the bug by only making it do that unbundling in "list for-push", without changing what's stored in the bundles. But I think I prefer to populate the bundles this way. For one thing, deleting a pushed ref now really deletes all data relating to it, rather than leaving it present in old bundles. For another, it's easier to explain since there is no special case for the last bundle. And, it will often result in smaller bundles. Note that further efficiency gains are possible with respect to what objects are included in an incremental bundle. Two XXX comments document how to reduce excess objects. It didn't seem worth implementing those optimisations in this proof of concept code. Sponsored-by: Brock Spratlen on Patreon |
||
---|---|---|
.. | ||
hashing | ||
key_format | ||
lockdown | ||
comment_1_4b8ed353dca4f484b3b6eb463fa02fd8._comment | ||
comment_2_c19232d5cc4976c2e5b014aef6e8d9ec._comment | ||
comment_3_5a26ee5aab274f321a4ea6f8527f53bd._comment | ||
comment_4_81293b180fb09105ec158fdfef73d249._comment | ||
comment_5_354012b6a9ac11160eb926234d38051f._comment | ||
comment_7_7e40f744f9ac7f0403df9d1a2162a516._comment | ||
comment_7_9c82a2878f3feb1b2a95662ed25b234b._comment | ||
comment_8_9dccdd3a9556ceef54e318cd5c8a50ad._comment | ||
comment_9_40442b012886ad698f448c262f0d7f4c._comment | ||
comment_10_c4298babd96b2596bd4f6ad828212c92._comment | ||
comment_11_9758bb3a17f63b4dcf51742ea482dbe9._comment | ||
comment_12_f0325cefa5cd53a5a897046606137cef._comment | ||
comment_13_e45b6fa035a30703618448a0f764f935._comment | ||
comment_14_3f62751c2dd041f4ead1c6580ea5eec1._comment | ||
comment_15_c3d12d14e4d044f39829c5d92f523655._comment | ||
comment_16_2455c898d6c77a5437a2c1532144bb8a._comment | ||
comment_17_df13b7e66963a6d2673e49f52afb978a._comment | ||
comment_18_1adce7945940b9c384c2383261388dd9._comment | ||
git-remote-annex.mdwn | ||
hashing.mdwn | ||
key_format.mdwn | ||
lockdown.mdwn | ||
pointer_file.mdwn |