Commit graph

44657 commits

Author SHA1 Message Date
Joey Hess
d28adebd6b
number list 2024-05-01 12:19:12 -04:00
Joey Hess
0d0c891ff9
add headers for tocs 2024-05-01 12:18:14 -04:00
Joey Hess
4cd2c980d2
toc 2024-05-01 12:14:59 -04:00
Joey Hess
901e02ccc3
design work on proxies for exporttree=yes
Sponsored-by: Dartmouth College's OpenNeuro project
2024-05-01 12:07:57 -04:00
Joey Hess
e7333aa505
fix link 2024-05-01 11:08:57 -04:00
Joey Hess
9cdbcedc37
additional design work on proxies
Sponsored-by: Dartmouth College's OpenNeuro project
2024-05-01 11:08:10 -04:00
Joey Hess
a612fe7299
add todo linking to two design docs and some related todos
Tagging with projects/openneuro as Christopher Markiewicz has oked
them funding at least the initial design work on this.
2024-05-01 11:04:20 -04:00
Joey Hess
5b36e6b4fb
comments 2024-04-30 16:08:46 -04:00
Joey Hess
fa0bcba86e
add news item for git-annex 10.20240430 2024-04-30 15:27:37 -04:00
Joey Hess
d6ad5b9b50
releasing package git-annex version 10.20240430 2024-04-30 15:27:31 -04:00
Joey Hess
d4ed1d9977
comment 2024-04-30 15:20:25 -04:00
Joey Hess
f3cca8a9f8
applied patch 2024-04-30 15:17:38 -04:00
Gergely Risko
cb541b9ecd
Change --copies' meta parameter to NUMBER 2024-04-30 15:16:22 -04:00
Joey Hess
1f37d0b00d
promote comment to todo 2024-04-30 15:13:59 -04:00
Joey Hess
da712198d8
close 2024-04-30 14:48:25 -04:00
Joey Hess
46aae325af
Merge branch 'master' of ssh://git-annex.branchable.com 2024-04-30 14:44:59 -04:00
Joey Hess
7a9633312e
got git clone from git-remote-annex prototype working
eg git clone annex://`pwd` when the MANIFEST file is in the pwd.

This is easy in the prototype, just use $GIT_DIR, but in git-annex, it
will need to automatically git-annex init, and set up the special
remote, in order to be able to download the manifest and bundle keys
from it.

Sponsored-by: k0ld on Patreon
2024-04-30 14:40:49 -04:00
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
rshalaev
77065b8569 Added a comment: How to find last available version of a file? 2024-04-29 14:07:40 +00:00
yarikoptic
3302390894 Added a comment 2024-04-29 13:13:48 +00:00
nobodyinperson
2fcfabe499 Added a comment: annex.maxextensionlength and annex.maxextensions 2024-04-27 19:16:29 +00:00
nobodyinperson
6daa338e0c Initial report 2024-04-27 14:20:26 +00:00
Joey Hess
e5cfaf003c
found a bug 2024-04-26 17:11:30 -04:00
Joey Hess
8b56d6b283
fix conflicting push situation
In a situation where there are two repos that are diverged and each pushes
in turn to git-remote-annex, the first to push updates it. Then the second
push fails because it is not a fast-forward. The problem is, before git
push fails with "non-fast-forward", it actually calls git-remote-annex
with push.

So, to the user it appears as if the push failed, but it actually reached
the remote, and overwrote the other push!

The only solution to this seems to be for git-remote-annex push to notice
when a non-force-push would overwrite a ref stored in the remote, and
refuse to push that ref, returning an error to git. This seems strange,
why would git make remote helpers implement that when it later checks the
same thing itself?

With this fix, it's still possible for a race to overwrite a change to
the MANIFEST and lose work that was pushed from the other repo. But that
needs two pushes to be running at the same time. From the user's
perspective, that situation is the same as if one repo pushed new work,
then the other repo did a git push --force, overwriting the first repo's
push. In the first repo, another push will then fail as a non
fast-forward, and the user can recover as usual. But, a MANIFEST
overwrite will leave bundle files in the remote that are not listed in
the MANIFEST. It seems likely that git-annex will eventually be able to
detect that after the fact and clean it up. Eg, it can learn all bundles
that are stored in the remote using the location log, and compare them
to the MANIFEST to find bundles that got lost.

The race can also appear to the user as if they pushed a ref, but then
it got deleted from the remote. This happens when two two pushes are
pushing different ref names. This might be harder for the user to
notice; git fetch does not indicate that a remote ref got deleted.
They would have to use git fetch --prune to notice the deletion.
Once the user does notice, they can re-push their ref to recover.

Sponsored-by: Jack Hill on Patreon
2024-04-26 15:03:04 -04:00
Joey Hess
99491f572f
TOPDIR 2024-04-26 13:27:16 -04:00
nobodyinperson
477018756a 2024-04-26 13:16:52 +00:00
Joey Hess
84611e7ee6
todo 2024-04-26 04:03:10 -04:00
yarikoptic
5ac14f210e Added a comment 2024-04-25 21:11:56 +00:00
Joey Hess
e3c5f0079d
Merge branch 'master' of ssh://git-annex.branchable.com 2024-04-25 17:01:32 -04:00
Joey Hess
d895df1010
update 2024-04-25 17:01:17 -04:00
Joey Hess
6ff4300bd1
proof of concent for push to git bundles with MANIFEST
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
2024-04-25 16:55:19 -04:00
aurtzy
6cc89d71d3 Added a comment 2024-04-25 17:35:49 +00:00
mih
9c78ab198e Q on the cheapest test for an initialized annex 2024-04-25 15:15:24 +00:00
ErrGe
cafa9af811 2024-04-22 15:37:04 +00:00
ErrGe
67d92c3aee 2024-04-22 15:36:26 +00:00
ErrGe
649909cc94 2024-04-22 15:35:18 +00:00
Gergely Risko
9e88c93866 Delete bug, as I have patch for it 2024-04-22 17:31:17 +02:00
Joey Hess
c410b2bb73
annex.maxextensions configuration
Controls how many filename extensions to preserve.

Sponsored-by: the NIH-funded NICEMAN (ReproNim TR&D3) project
2024-04-18 14:23:38 -04:00
Joey Hess
b700c48b15
comment 2024-04-18 13:50:19 -04:00
Joey Hess
a1fd72b91a
update to focus on why this is still open 2024-04-18 12:40:53 -04:00
Joey Hess
7701bca2f6
Merge branch 'master' of ssh://git-annex.branchable.com 2024-04-18 10:05:37 -04:00
Joey Hess
ba9f207d4e
fix option desc pasted from pull 2024-04-18 10:05:11 -04:00
ErrGe
d6aa9606e2 Added a comment: but I'm talking about --help, isn't that in the source code? 2024-04-18 13:07:40 +00:00
tiko
97dd6e61c1 2024-04-18 09:58:20 +00:00
nobodyinperson
141c9d2331 Added a comment: Everyone can fix typos in the docs 2024-04-18 05:21:42 +00:00
ErrGe
9c0c7a7a1d 2024-04-18 01:19:19 +00:00
ErrGe
e44513cfe7 Added a comment: hook idea implementation is cool, but usage is not so simple for the enduser 2024-04-18 01:17:02 +00:00
Joey Hess
aa9db2694a
update 2024-04-17 16:19:20 -04:00
Joey Hess
d2709c6862
avoid accepting externaltype= and readonly= parameters for rclone
I think readonly= doesn't make sense here? externaltype= certianly
doesn't.
2024-04-17 15:41:55 -04:00
Joey Hess
d55e3f5fe2
Merge branch 'master' of ssh://git-annex.branchable.com 2024-04-17 15:27:09 -04:00