All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: "H. Peter Anvin" <hpa@zytor.com>,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	"Shawn O. Pearce" <spearce@spearce.org>,
	Git Mailing List <git@vger.kernel.org>
Subject: Re: git apply --directory broken for new files
Date: Sat, 11 Oct 2008 23:36:18 -0700	[thread overview]
Message-ID: <7v1vymial9.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <20081012040611.GA11199@coredump.intra.peff.net> (Jeff King's message of "Sun, 12 Oct 2008 00:06:11 -0400")

Jeff King <peff@peff.net> writes:

>> It would be easier to do this --directory prefixing in the sole caller of
>> git_header_name(), though.
>
> I went this route, and it is much more readable if slightly less
> efficient (one extra malloc/free).

I do not think efficiency is an issue in this codepath --- especially
because it is only triggered when --directory is in use.

Acked-by: Junio C Hamano <gitster@pobox.com>

>
> -- >8 --
> git apply --directory broken for new files
>
> We carefully verify that the input to git-apply is sane,
> including cross-checking that the filenames we see in "+++"
> headers match what was provided on the command line of "diff
> --git". When --directory is used, however, we ended up
> comparing the unadorned name to one with the prepended root,
> causing us to complain about a mismatch.
>
> We simply need to prepend the root directory, if any, when
> pulling the name out of the git header.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
>  builtin-apply.c       |    7 ++++++
>  t/t4128-apply-root.sh |   52 +++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 59 insertions(+), 0 deletions(-)
>
> diff --git a/builtin-apply.c b/builtin-apply.c
> index bf80610..be7e1bd 100644
> --- a/builtin-apply.c
> +++ b/builtin-apply.c
> @@ -810,6 +810,13 @@ static int parse_git_header(char *line, int len, unsigned int size, struct patch
>  	 * the default name from the header.
>  	 */
>  	patch->def_name = git_header_name(line, len);
> +	if (patch->def_name && root) {
> +		char *s = xmalloc(root_len + strlen(patch->def_name) + 1);
> +		strcpy(s, root);
> +		strcpy(s + root_len, patch->def_name);
> +		free(patch->def_name);
> +		patch->def_name = s;
> +	}
>  
>  	line += len;
>  	size -= len;
> diff --git a/t/t4128-apply-root.sh b/t/t4128-apply-root.sh
> index 2dd0c75..bc7a8a8 100755
> --- a/t/t4128-apply-root.sh
> +++ b/t/t4128-apply-root.sh
> @@ -40,4 +40,56 @@ test_expect_success 'apply --directory -p (2) ' '
>  
>  '
>  
> +cat > patch << EOF
> +diff --git a/newfile b/newfile
> +new file mode 100644
> +index 0000000..d95f3ad
> +--- /dev/null
> ++++ b/newfile
> +@@ -0,0 +1 @@
> ++content
> +EOF
> +
> +test_expect_success 'apply --directory (new file)' '
> +	git reset --hard initial &&
> +	git apply --directory=some/sub/dir/ --index patch &&
> +	test content = $(git show :some/sub/dir/newfile) &&
> +	test content = $(cat some/sub/dir/newfile)
> +'
> +
> +cat > patch << EOF
> +diff --git a/delfile b/delfile
> +deleted file mode 100644
> +index d95f3ad..0000000
> +--- a/delfile
> ++++ /dev/null
> +@@ -1 +0,0 @@
> +-content
> +EOF
> +
> +test_expect_success 'apply --directory (delete file)' '
> +	git reset --hard initial &&
> +	echo content >some/sub/dir/delfile &&
> +	git add some/sub/dir/delfile &&
> +	git apply --directory=some/sub/dir/ --index patch &&
> +	! git ls-files | grep delfile
> +'
> +
> +cat > patch << 'EOF'
> +diff --git "a/qu\157tefile" "b/qu\157tefile"
> +new file mode 100644
> +index 0000000..d95f3ad
> +--- /dev/null
> ++++ "b/qu\157tefile"
> +@@ -0,0 +1 @@
> ++content
> +EOF
> +
> +test_expect_success 'apply --directory (quoted filename)' '
> +	git reset --hard initial &&
> +	git apply --directory=some/sub/dir/ --index patch &&
> +	test content = $(git show :some/sub/dir/quotefile) &&
> +	test content = $(cat some/sub/dir/quotefile)
> +'
> +
>  test_done
> -- 
> 1.6.0.2.519.g6cb82.dirty

      reply	other threads:[~2008-10-12  6:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-25 20:41 git apply --directory broken for new files H. Peter Anvin
2008-09-27  1:54 ` Jeff King
2008-10-12  3:18   ` Junio C Hamano
2008-10-12  4:06     ` Jeff King
2008-10-12  6:36       ` Junio C Hamano [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7v1vymial9.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=hpa@zytor.com \
    --cc=peff@peff.net \
    --cc=spearce@spearce.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.