hmm
This commit is contained in:
parent
73d04d5565
commit
48a89f0f92
1 changed files with 60 additions and 0 deletions
|
@ -0,0 +1,60 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 1"""
|
||||
date="2017-08-15T18:45:21Z"
|
||||
content="""
|
||||
It would be kind of nice to not have to worry about keys containing spaces.
|
||||
(Only space is allowed currently, not other whitespace.) But that ship has
|
||||
long sailed and it would be very ugly to force changing repositories using
|
||||
WORM keys with spaces to WORM keys without spaces. About as ugly as
|
||||
entirely dropping WORM, which might not be a bad long-term goal.
|
||||
|
||||
Here's a few approaches for fixing this in the external special remote protocol:
|
||||
|
||||
1. Mangle keys containing spaces as they are sent via the protocol
|
||||
and de-mangle as they're received.
|
||||
Eg, convert ' ' to 's' and convert 's' to 'ss' etc.
|
||||
(Perhaps pick a better letter than 's' -- '%' and ',' and '&' are
|
||||
already used for other escaping.)
|
||||
2. Make "VERSION 2" be the same as the current protocol, except Key
|
||||
(and other parameters) are quoted in some way.
|
||||
3. Make "VERSION 2" be the same as the current protocol, except using NUL
|
||||
rather than space to separate parameters. Perhaps also to separate
|
||||
protocol commands from their parameters, but then "VERSION 2" would
|
||||
be an exception to the rule.
|
||||
|
||||
Of course the advantage of #1 is that it doesn't need any modifications to all
|
||||
the external special remotes. Such modifications would take quite a while,
|
||||
and probably wouldn't even start until a git-annex supporting "VERSION 2"
|
||||
was widely available, ie years even to start.
|
||||
|
||||
Using NUL is conceptually the simplest implementation, but it may cause
|
||||
issues for implementing external special remotes in some languages. Shell
|
||||
scripts are probably not good at NULs, for example.
|
||||
|
||||
One problem with approach #1 is, what if a key containing a space in the
|
||||
protocol happened to already work with the protocol parser in an external
|
||||
special remote? This seems at least possible. And so content would already
|
||||
be stored on the external special remote under the real key, not the
|
||||
mangled key. When git-annex starts mangling the key, retreiving the content
|
||||
from the special remote would then fail.
|
||||
|
||||
For that to happen, the external special remote would need a parser that
|
||||
when it sees "TRANSFER STORE Key File", parses it with File as the last
|
||||
word, so supporting multi-word Key. The documentation does currently say
|
||||
that "The filename will not contain any whitespace." Actually, I tested it,
|
||||
and with a WORM key with spaces, that documentation is generally wrong,
|
||||
since the File is based on the Key, it also contains whitespace, most of
|
||||
the time. One exception is when using direct mode, if the work tree file
|
||||
has been renamed to not contain whitespace.
|
||||
|
||||
So, approach #1 seems to call for auditing of external special remotes
|
||||
and/or a warning to their implementors about that issue. This would also
|
||||
be an opportunity to correct the documentation about spaces in the
|
||||
filename, and make sure that they all support that.
|
||||
|
||||
Another problem with key mangling is if an external special remote takes
|
||||
the mangled key, and passes it to some other git-annex command, like `git annex
|
||||
setpresentkey` or something. I seem to remember datalad doing this kind of
|
||||
thing.
|
||||
"""]]
|
Loading…
Add table
Add a link
Reference in a new issue