"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: "got patch" format?
To:
Omar Polo <op@omarpolo.com>
Cc:
Christian Weisgerber <naddy@mips.inka.de>, gameoftrees@openbsd.org
Date:
Sat, 19 Mar 2022 19:42:02 +0100

Download raw body.

Thread
On Sat, Mar 19, 2022 at 07:07:19PM +0100, Omar Polo wrote:
> ...turns out that keeping the rename only when the git annotations are
> present is really easy.  Just tweak send_patch to prefer the newname if
> it's not NULL and it's not a git-style diff.
> 
> ok?

Nice. Looks good to me.

> diff 78f5ac2436c8d17d1dd687d69e51354707275988 /home/op/w/got
> blob - deb0e8192f09bb269bb784019dc776e0602e2925
> file + libexec/got-read-patch/got-read-patch.c
> --- libexec/got-read-patch/got-read-patch.c
> +++ libexec/got-read-patch/got-read-patch.c
> @@ -60,14 +60,21 @@
>  struct imsgbuf ibuf;
>  
>  static const struct got_error *
> -send_patch(const char *oldname, const char *newname)
> +send_patch(const char *oldname, const char *newname, int git)
>  {
>  	struct got_imsg_patch p;
>  
>  	memset(&p, 0, sizeof(p));
>  
> -	if (oldname != NULL)
> +	/*
> +	 * Prefer the new name if it's not /dev/null and it's not
> +	 * a git-style diff.
> +	 */
> +	if (!git && newname != NULL && oldname != NULL)
> +		strlcpy(p.old, newname, sizeof(p.old));
> +	else if (oldname != NULL)
>  		strlcpy(p.old, oldname, sizeof(p.old));
> +
>  	if (newname != NULL)
>  		strlcpy(p.new, newname, sizeof(p.new));
>  
> @@ -169,7 +176,7 @@ find_patch(FILE *fp)
>  			    (!create && old == NULL))
>  				err = got_error(GOT_ERR_PATCH_MALFORMED);
>  			else
> -				err = send_patch(old, new);
> +				err = send_patch(old, new, git);
>  
>  			if (err)
>  				break;
> blob - 32c852932a5cc8f51426acc413933a80b95f41de
> file + regress/cmdline/patch.sh
> --- regress/cmdline/patch.sh
> +++ regress/cmdline/patch.sh
> @@ -647,8 +647,9 @@ test_patch_rename() {
>  	fi
>  
>  	cat <<EOF > $testroot/wt/patch
> ---- alpha
> -+++ eta
> +diff --git a/alpha b/eta
> +--- a/alpha
> ++++ b/eta
>  @@ -0,0 +0,0 @@
>  EOF
>  
> @@ -700,8 +701,9 @@ EOF
>  	rm $testroot/wt/eta
>  
>  	cat <<EOF > $testroot/wt/patch
> ---- alpha
> -+++ eta
> +diff --git a/alpha b/eta
> +--- a/alpha
> ++++ b/eta
>  @@ -1 +1,2 @@
>   alpha
>  +but now is eta
> @@ -863,6 +865,7 @@ test_patch_nop() {
>  +++ /dev/null
>  @@ -1 +0,0 @@
>  -beta
> +diff --git a/gamma/delta b/gamma/delta.new
>  --- gamma/delta
>  +++ gamma/delta.new
>  @@ -1 +1 @@
> @@ -1048,6 +1051,40 @@ EOF
>  	test_done $testroot $ret
>  }
>  
> +test_patch_orig() {
> +	local testroot=`test_init patch_orig`
> +
> +	got checkout $testroot/repo $testroot/wt > /dev/null
> +	ret=$?
> +	if [ $ret -ne 0 ]; then
> +		test_done $testroot $ret
> +		return 1
> +	fi
> +
> +	cat <<EOF > $testroot/wt/patch
> +--- alpha.orig
> ++++ alpha
> +@@ -1 +1,2 @@
> + alpha
> ++was edited
> +EOF
> +
> +	(cd $testroot/wt && got patch patch) > $testroot/stdout
> +	ret=$?
> +	if [ $ret -ne 0 ]; then
> +		test_done $testroot $ret
> +		return 1
> +	fi
> +
> +	echo 'M  alpha' > $testroot/stdout.expected	
> +	cmp -s $testroot/stdout.expected $testroot/stdout
> +	ret=$?
> +	if [ $ret -ne 0 ]; then
> +		diff -u $testroot/stdout.expected $testroot/stdout
> +	fi
> +	test_done $testroot $ret
> +}
> +
>  test_parseargs "$@"
>  run_test test_patch_simple_add_file
>  run_test test_patch_simple_rm_file
> @@ -1066,3 +1103,4 @@ run_test test_patch_nop
>  run_test test_patch_preserve_perm
>  run_test test_patch_create_dirs
>  run_test test_patch_with_offset
> +run_test test_patch_orig
> 
>