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