git-annex/doc/internals
Joey Hess fc37243ffe
convert git-remote-annex to not include old pushed refs in new bundle
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
2024-04-30 14:30:09 -04:00
..
hashing
key_format response 2020-02-20 16:21:34 -04:00
lockdown Added a comment 2022-05-20 18:09:45 +00:00
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 response 2018-02-22 12:59:44 -04:00
comment_8_9dccdd3a9556ceef54e318cd5c8a50ad._comment Added a comment 2018-09-19 16:07:45 +00:00
comment_9_40442b012886ad698f448c262f0d7f4c._comment Added a comment: representing unlocked state of files 2019-09-19 18:02:31 +00:00
comment_10_c4298babd96b2596bd4f6ad828212c92._comment Added a comment: duplicate objects? 2019-11-30 14:04:17 +00:00
comment_11_9758bb3a17f63b4dcf51742ea482dbe9._comment Added a comment: same contents with different keys 2019-11-30 16:51:58 +00:00
comment_12_f0325cefa5cd53a5a897046606137cef._comment Added a comment: no collisions 2019-11-30 20:37:00 +00:00
comment_13_e45b6fa035a30703618448a0f764f935._comment Added a comment 2019-11-30 21:11:53 +00:00
comment_14_3f62751c2dd041f4ead1c6580ea5eec1._comment Added a comment: hardlinking identical files in annex may break invariants 2019-11-30 21:36:38 +00:00
comment_15_c3d12d14e4d044f39829c5d92f523655._comment Added a comment: migrating... 2019-11-30 22:30:06 +00:00
comment_16_2455c898d6c77a5437a2c1532144bb8a._comment response 2020-02-20 16:26:52 -04:00
comment_17_df13b7e66963a6d2673e49f52afb978a._comment Added a comment: why othertmp to be on the same file system? 2022-12-13 14:15:28 +00:00
comment_18_1adce7945940b9c384c2383261388dd9._comment convert renameFile to moveFile to support cross-device moves 2022-12-20 15:17:50 -04:00
git-remote-annex.mdwn convert git-remote-annex to not include old pushed refs in new bundle 2024-04-30 14:30:09 -04:00
hashing.mdwn be more explicit about new hash format 2019-04-01 19:52:00 +00:00
key_format.mdwn expand 2020-07-03 14:42:04 -04:00
lockdown.mdwn Added annex.freezecontent-command and annex.thawcontent-command configs 2021-06-21 14:40:52 -04:00
pointer_file.mdwn fully specify the pointer file format 2022-02-23 14:20:31 -04:00