6ff4300bd1
This is a shell script, so not final code, and it does not use git-annex at all, but it shows how to push to git bundles, listed in a MANIFEST, the same as the git-remote-annex program will eventually do. While developing this, I realized that the design needed to be changed slightly regarding where refs are stored. Since a push can delete a ref from a remote, storing each newly pushed ref in a bundle won't work, because deleting a ref would then entail deleting all old bundles and re-uploading from scratch. So instead, only the refs in the last bundle listed in the MANIFEST are the active refs. Any refs in prior bundles are just old refs that were stored previously (a reflog as it were). That means that, in a situation where two different people are pushing to the same special remote from different repos, whoever pushes last wins. Any refs pushed by the other person earlier will be ignored. This may not be desirable, and git-annex might be able use the git-annex branch to detect such situations and rescue the refs that got lost. Even without such a recovery process though, the refs that the other person thought they pushed will be preserved in their refs/namespaces/mine, so a pull followed by a push will generally resolve the situation. Note that the use of refs/namespaces/mine in the bundle is not really desirable, and it might be worth making a local clone of the repo in order to set up the refs that will be put in the bundle. Which seems to be the only way to avoid needing that. But it does need to maintain the refs/namespaces/mine/ in the git repo in order to remember what refs have been pushed to the remote before, in order to include them in the next bundle pushed. A name that includes the remote uuid will be needed in the final implementation. Anyway, this shell script seems to fully work, including incremental pushing, force pushing, and pushes that delete refs. Sponsored-by: Brett Eisenberg 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 |