almost have a plan
This commit is contained in:
parent
10af498be1
commit
13a8706cda
3 changed files with 103 additions and 0 deletions
|
@ -0,0 +1,46 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 3"""
|
||||||
|
date="2021-05-13T16:10:39Z"
|
||||||
|
content="""
|
||||||
|
Hmm, it seems possible that two repos could use the same uuid for a
|
||||||
|
remote, but have different configurations for it. Eg, an internal use repo
|
||||||
|
that might even embed creds for the remote, and a public use repo that
|
||||||
|
relies on public http urls to download from the remote.
|
||||||
|
|
||||||
|
So there would then be 3 things that need to be able to be specified:
|
||||||
|
|
||||||
|
* keys to copy
|
||||||
|
* uuids whose per-key information should be copied (or ones to skip)
|
||||||
|
* uuids whose non-per-key information should be copied (or ones to skip)
|
||||||
|
(remote description, special remote config, trust, group, preferred
|
||||||
|
content, etc)
|
||||||
|
|
||||||
|
Might as well add, for completeness:
|
||||||
|
|
||||||
|
* whether to copy global config settings, or not (numcopies, mincopies,
|
||||||
|
git-annex-config, group-preferred-content, difference.log)
|
||||||
|
|
||||||
|
Could get more granular than this, eg only copying some metadata fields and
|
||||||
|
not others, or description but not trust log, but I'd want to see a use
|
||||||
|
case. A line has to be drawn somewhere or it just gets ridiculous, and the
|
||||||
|
user might as well pull up [[internals]] and git-filter-branch and
|
||||||
|
post-process the tree generated by this command.
|
||||||
|
|
||||||
|
So a UI for these 3 or 4 things..
|
||||||
|
|
||||||
|
git-annex copy-branch --keys-from=path
|
||||||
|
--include-key-information-for=repo
|
||||||
|
--exclude-key-information-for=repo
|
||||||
|
--include-config-for=repo
|
||||||
|
--exclude-config-for=repo
|
||||||
|
--include-global-config
|
||||||
|
--exclude-global-config
|
||||||
|
|
||||||
|
Eg:
|
||||||
|
|
||||||
|
git-annex copy-branch --keys-from=.
|
||||||
|
--exclude-key-information-for=privateremote
|
||||||
|
--exclude-config-for=privateremote
|
||||||
|
--include-global-config
|
||||||
|
"""]]
|
|
@ -0,0 +1,17 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 4"""
|
||||||
|
date="2021-05-13T16:29:41Z"
|
||||||
|
content="""
|
||||||
|
The other axis is, I guess, should it include past commits to the git-annex
|
||||||
|
branch, or only the current data? I'm inclined toward only the current
|
||||||
|
data. The only thing that uses past data really is `git-annex log` and it's just
|
||||||
|
not worth the added time expense. And also `git annex forget` already
|
||||||
|
throws away the past data.
|
||||||
|
|
||||||
|
There is the added wart of exported treeishes being grafted into the
|
||||||
|
git-annex branch (to avoid them being lost in GC in some edge cases).
|
||||||
|
It would need to do like `git annex forget` was recently fixed to, and
|
||||||
|
include those grafts when throwing away the rest of the history.
|
||||||
|
(See [[!commit 8e7dc958d20861a91562918e24e071f70d34cf5b]])
|
||||||
|
"""]]
|
|
@ -0,0 +1,40 @@
|
||||||
|
[[!comment format=mdwn
|
||||||
|
username="joey"
|
||||||
|
subject="""comment 5"""
|
||||||
|
date="2021-05-13T16:55:36Z"
|
||||||
|
content="""
|
||||||
|
The filtering of uuids from logs this command needs is very closely
|
||||||
|
related to how the git-annex branch is filtered when dropping dead uuids
|
||||||
|
and keys.
|
||||||
|
|
||||||
|
Annex.Branch.Transitions.dropDead could alsmost be used as-is, just
|
||||||
|
providing it a trustmap that has the excluded uuids marked as dead.
|
||||||
|
|
||||||
|
But, it does not currently modify the trustLog, which makes sense for
|
||||||
|
transitions, but for this the trust log needs to include only the desired
|
||||||
|
uuids.
|
||||||
|
|
||||||
|
And, providing a trustmap does have the problem that,
|
||||||
|
if a uuid is mentioned in the branch without being in uuid.log,
|
||||||
|
it would not be in the trustmap, and so it would not be excluded. One way
|
||||||
|
for that to happen is well, using this command to copy only per-key info
|
||||||
|
for a remote, but not config for a remote. Hmm. Using a filtering
|
||||||
|
function, rather than a trustmap, would avoid this problem. But,
|
||||||
|
dropDead does some processing to handle sameas-uuid pointing to a dead
|
||||||
|
uuid, including a special case involving remoteLog.
|
||||||
|
|
||||||
|
Implementation plan:
|
||||||
|
|
||||||
|
* Address above problems with dropDead, somehow, so it can be reused.
|
||||||
|
* Add a function (in Logs) from a key to all possible git-annex branch log
|
||||||
|
files for that key.
|
||||||
|
* For each key seeked, run that function, query the branch to see which
|
||||||
|
log files exist, and pass through dropDead to filter and populate
|
||||||
|
the temporary index. This way, the command does not need to buffer
|
||||||
|
the whole set of keys in memory.
|
||||||
|
* Get a list of all non-key logs
|
||||||
|
`(topLevelNewUUIDBasedLogs++topLevelOldUUIDBasedLogs++otherLogs)`,
|
||||||
|
and pass them all through dropDead as well.
|
||||||
|
* Refactor regraftexports from Annex.Branch, and call it after
|
||||||
|
constructing the filtered index.
|
||||||
|
"""]]
|
Loading…
Reference in a new issue