Re: [PATCH v4 2/7] archive --add-file-with-contents: allow paths containing colons
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 19, 2022, 18:44 UTC
- Message-ID
- <xmqqh75lnz07.fsf@gitster.g>
- In-Reply-To
- <nycvar.QRO.7.76.6.2205192004490.352@tvgsbejvaqbjf.bet>
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 23 quoted lines
>> > git archive --format=zip >with_file_with_content.zip \ >> > + --add-file-with-content=\"$QUOTED\": \ >> > --add-file-with-content=hello:world $EMPTY_TREE && >> > test_when_finished "rm -rf tmp-unpack" && >> > mkdir tmp-unpack && ( >> > cd tmp-unpack && >> > "$GIT_UNZIP" ../with_file_with_content.zip && >> > test_path_is_file hello && >> > + test_path_is_file $QUOTED && >> >> Looks OK, even though it probably is a good idea to have dq around >> $QUOTED, so that future developers can easily insert SP into its >> value to use a bit more common but still a bit more problematic >> pathnames in the test. > > I actually decided against this because reading > > "$QUOTED" > > would mislead future me to think that the double quotes that enclose > $QUOTED are the quotes that the variable's name talks about. But the > quotes are actually the escaped ones that are passed to `git archive` > above.
> > So, to help future Dscho should they read this code six months from now or > even later, I wanted to specifically only add quotes to the `git archive` > call to make the intention abundantly clear.
If you find "$QUOTED" misleads any reader to think QUOTED may have some quote characters in there, you could rename it, of course, to signal what the value is (e.g. $PATHNAME) better.
But I think you misunderstood my comment completely.
What I meant was to write these lines like:
--add-file-with-content=\""$QUOTED"\": test_path_is_file "$QUOTED"
Because the value in QUOTED can have $IFS whitespaces in it (after all, allowing random letters like colon, quotes and whitespaces is why we are adding this unquote_c_style() call), and without the extra double quotes to protect the parameter expansion of $QUOTED, the command line is broken.
So, don't decide against it; the reasoning behind that decision is simply wrong.
Thanks.