plan for these
This commit is contained in:
parent
f39b7c3663
commit
1d9bad51d2
2 changed files with 57 additions and 0 deletions
|
@ -0,0 +1,47 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 8"""
|
||||
date="2021-05-21T17:05:48Z"
|
||||
content="""
|
||||
I think Ilya is on the right track with recording the last treeish scanned
|
||||
for keys and diffing to the current treeish. This seems worth implementing.
|
||||
|
||||
So, plan:
|
||||
|
||||
* When dropping a file, after checking that it's not preferred content,
|
||||
or when needed for <https://git-annex.branchable.com/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/>
|
||||
* When the stat of the index differs from the last recorded stat
|
||||
* Generate a tree from the index with `git write-tree`, and when it
|
||||
differs from the last recorded such tree
|
||||
* `git diff-index --cached` with the last recorded tree, parse and cat
|
||||
the links, and update the keys database associated files with the keys
|
||||
it found. Note that it can also remove associated files when files get
|
||||
deleted, which is currently not done.
|
||||
* Then, look up in the keys database the associated files of the key, and
|
||||
also check if the preferred content matches any of those other files.
|
||||
So in the example above, it won't drop `archive/bar` because `foo` is
|
||||
still preferred content.
|
||||
|
||||
This would not notice if a file was moved or deleted but that was not
|
||||
staged in the index yet. I think that's ok -- If the file is moved and not
|
||||
staged yet, it's not been added to git, so it's acceptable for git-annex to
|
||||
not try to keep content around for it (git-annex unused would not either
|
||||
in similar situations). If the file is deleted, git-annex might not drop
|
||||
the content yet because it's still present in the index, but the same
|
||||
happens if you delete a file and then `git annex drop .`, because it skips
|
||||
over the deleted file whether or not it's staged in the index.
|
||||
|
||||
It seems sufficient to only do this when dropping a file, not in other
|
||||
commands. That means the associated files database remains incomplete
|
||||
for other commands, not including recent changes to locked files.
|
||||
Since this is only a problem for dropping, and the associated files
|
||||
database is not needed for locked files generally, that seems ok, although
|
||||
it would certianly be a nice simplification if the database was always
|
||||
kept up-to-date. Since the update could be a pretty expensive operation,
|
||||
probably best to keep it for the drops that really need it.
|
||||
|
||||
Note that the `git write-tree` would mean that using git-annex could
|
||||
create these tree objects, which never end up getting used. gc would
|
||||
eventually delete them, but there might be a situation where doing this
|
||||
a lot bloats the repo.
|
||||
"""]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 4"""
|
||||
date="2021-05-21T17:29:09Z"
|
||||
content="""
|
||||
I have a plan over in [[bugs/indeterminite_preferred_content_state_for_duplicated_file]]
|
||||
and will be working on it over there.
|
||||
|
||||
Linked worktrees seems out of scope for this though.
|
||||
"""]]
|
Loading…
Reference in a new issue