On 2023-10-31 05:30, Junio C Hamano wrote:
Hugo Sales <hugo@xxxxxxx> writes:
Both are plausible, and "mkdir -p" does not have such a nasty
ambiguity. That is what makes me unsure about the new feature
(again, either with required "-p" or with implied "-p").
I think the ambiguity is resolved by the inclusion of lack thereof
of a trailing `/`.
The question is not if we can come up with a rule that the user can
use to disambiguate. It is if the user will find that such a rule
is a naturally acceptable way to disambiguate.
When both of
git mv file there/exists/such/a/directory
git mv file there/exists/such/a/directory/
create "there/exists/such/a/directory/file" and removes "file", with
or without a trailing slash, "you should add a slash if you want a
directory, and otherwise you should not add a slash" is a rather
arbitrary rule. Let's not go there. I still view the downside more
grave than having to occasionally do "mkdir".
Please note that the above-described git-mv operation succeeds with no
trailing slash if "there/exists/such/a/directory" doesn't already exist
as a directory, and creates "there/exists/such/a/directory" as a file.
With the trailing slash, the git-mv operation succeeds only if
"there/exists/such/a/directory" already exists as a directory, and fails
otherwise.
A quite similar ambiguity exists in cp(1) in mv(1), which is also
resolved by the use of the trailing slash character. However, I've
encountered only one person aware of that disambiguation, and in cp(1)
only, but in the "I always include the trailing slash" way, without
actually understanding it fully. Maybe I need to encounter more people,
I don't know.