threads / patch / 44855

patchlib-submodule-update.sh: drop unneeded shell

Subject: [PATCH] lib-submodule-update.sh: drop unneeded shell

## tl;dr

6 messages between Jan 11, 2017 and Jan 13, 2017. Diffs are folded; open one to read it.

replies: 5people: 2as markdown or json

Stefan Beller· Jan 11, 2017, 18:47 UTC · lore

In modern Git we prefer "git -C <cmd" over "(cd <somewhere && git <cmd>)" as it doesn't need an extra shell.

Signed-off-by: Stefan Beller <sbeller@google.com>
---

And because it is in a setup function, we actually save the invocation of 22 shells for a single run of the whole test suite.

Noticed while adding a lot more in near vincinity, though not as near to cause merge conflicts, so sending it extra.

Thanks, Stefan

 t/lib-submodule-update.sh | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
Show changes to t/lib-submodule-update.sh +1 −4
diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh
index 79cdd34a54..915eb4a7c6 100755
--- a/t/lib-submodule-update.sh
+++ b/t/lib-submodule-update.sh
@@ -69,10 +69,7 @@ create_lib_submodule_repo () {
 
 		git checkout -b "replace_sub1_with_directory" "add_sub1" &&
 		git submodule update &&
-		(
-			cd sub1 &&
-			git checkout modifications
-		) &&
+		git -C sub1 checkout modifications &&
 		git rm --cached sub1 &&
 		rm sub1/.git* &&
 		git config -f .gitmodules --remove-section "submodule.sub1" &&
-- 
2.11.0.259.g7b30ecf4f0
Junio C Hamano· Jan 13, 2017, 18:40 UTC · re: Stefan Beller · lore

Re: [PATCH] lib-submodule-update.sh: drop unneeded shell

Stefan Beller <sbeller@google.com> writes:
> In modern Git we prefer "git -C <cmd" over "(cd <somewhere && git <cmd>)"
> as it doesn't need an extra shell.

There is a matching '>' missing. The description is correct (I am not sure if there actually is "preference", though), but I found the title a bit misleading. With 'drop unneeded subshell', I would imagine a patch like

		(
	-		( do something )
	+		do something;
			do something else;
		)

It looks more like "reduce use of subshell by using 'git -C <dir>'" to me.

> And because it is in a setup function, we actually save the invocation
> of 22 shells for a single run of the whole test suite.
Nice.
Show 26 quoted lines
>
> Noticed while adding a lot more in near vincinity, though not as near
> to cause merge conflicts, so sending it extra.
>
> Thanks,
> Stefan
>
>  t/lib-submodule-update.sh | 5 +----
>  1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh
> index 79cdd34a54..915eb4a7c6 100755
> --- a/t/lib-submodule-update.sh
> +++ b/t/lib-submodule-update.sh
> @@ -69,10 +69,7 @@ create_lib_submodule_repo () {
>  
>  		git checkout -b "replace_sub1_with_directory" "add_sub1" &&
>  		git submodule update &&
> -		(
> -			cd sub1 &&
> -			git checkout modifications
> -		) &&
> +		git -C sub1 checkout modifications &&
>  		git rm --cached sub1 &&
>  		rm sub1/.git* &&
>  		git config -f .gitmodules --remove-section "submodule.sub1" &&
Stefan Beller· Jan 13, 2017, 19:03 UTC · re: Junio C Hamano · lore

[PATCH] lib-submodule-update.sh: reduce use of subshell by using git -C <dir>

In modern Git we prefer
    "git -C <cmd>"
over
    "(cd <somewhere && git <cmd>)"
as it doesn't need an extra shell.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
 t/lib-submodule-update.sh | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
Show changes to t/lib-submodule-update.sh +1 −4
diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh
index 79cdd34a54..915eb4a7c6 100755
--- a/t/lib-submodule-update.sh
+++ b/t/lib-submodule-update.sh
@@ -69,10 +69,7 @@ create_lib_submodule_repo () {
 
 		git checkout -b "replace_sub1_with_directory" "add_sub1" &&
 		git submodule update &&
-		(
-			cd sub1 &&
-			git checkout modifications
-		) &&
+		git -C sub1 checkout modifications &&
 		git rm --cached sub1 &&
 		rm sub1/.git* &&
 		git config -f .gitmodules --remove-section "submodule.sub1" &&
-- 
2.11.0.300.g08194d1431
Junio C Hamano· Jan 13, 2017, 19:55 UTC · re: Junio C Hamano · lore

Re: [PATCH] lib-submodule-update.sh: drop unneeded shell

Junio C Hamano <gitster@pobox.com> writes:
Show 8 quoted lines
> Stefan Beller <sbeller@google.com> writes:
>
>> In modern Git we prefer "git -C <cmd" over "(cd <somewhere && git <cmd>)"
>> as it doesn't need an extra shell.
>
> There is a matching '>' missing.  The description is correct (I am
> not sure if there actually is "preference", though), but I found the
> title a bit misleading....

It turns out that there were two missing '>' ;-) It tentatively has become like this in my tree.

-- >8 --
From: Stefan Beller <sbeller@google.com>
Date: Wed, 11 Jan 2017 10:47:32 -0800
Subject: [PATCH] lib-submodule-update.sh: reduce use of subshell by using "git -C"
We write
    (cd <dir> && git <cmd>)
to avoid
    cd <dir> && git <cmd> && cd ..

that allows a breakage in one part of the test script to leave the entire test process in an unexpected place. We can do this more concisely with "git -C <dir> <cmd>" with modern Git.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Show changes to t/lib-submodule-update.sh +1 −4
diff --git a/t/lib-submodule-update.sh b/t/lib-submodule-update.sh
index 79cdd34a54..915eb4a7c6 100755
--- a/t/lib-submodule-update.sh
+++ b/t/lib-submodule-update.sh
@@ -69,10 +69,7 @@ create_lib_submodule_repo () {
 
 		git checkout -b "replace_sub1_with_directory" "add_sub1" &&
 		git submodule update &&
-		(
-			cd sub1 &&
-			git checkout modifications
-		) &&
+		git -C sub1 checkout modifications &&
 		git rm --cached sub1 &&
 		rm sub1/.git* &&
 		git config -f .gitmodules --remove-section "submodule.sub1" &&
Stefan Beller· Jan 13, 2017, 20:01 UTC · re: Junio C Hamano · lore

Re: [PATCH] lib-submodule-update.sh: drop unneeded shell

On Fri, Jan 13, 2017 at 11:55 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 13 quoted lines
> Junio C Hamano <gitster@pobox.com> writes:
>
>> Stefan Beller <sbeller@google.com> writes:
>>
>>> In modern Git we prefer "git -C <cmd" over "(cd <somewhere && git <cmd>)"
>>> as it doesn't need an extra shell.
>>
>> There is a matching '>' missing.  The description is correct (I am
>> not sure if there actually is "preference", though), but I found the
>> title a bit misleading....
>
> It turns out that there were two missing '>' ;-)  It tentatively has
> become like this in my tree.

Thanks for fixing up locally. I had resent as "[PATCH] lib-submodule-update.sh: reduce use of subshell by using git -C <dir>" but you can ignore that now.

Thank, Stefan

Junio C Hamano· Jan 13, 2017, 20:19 UTC · re: Stefan Beller · lore

Re: [PATCH] lib-submodule-update.sh: drop unneeded shell

Stefan Beller <sbeller@google.com> writes:
Show 18 quoted lines
> On Fri, Jan 13, 2017 at 11:55 AM, Junio C Hamano <gitster@pobox.com> wrote:
>> Junio C Hamano <gitster@pobox.com> writes:
>>
>>> Stefan Beller <sbeller@google.com> writes:
>>>
>>>> In modern Git we prefer "git -C <cmd" over "(cd <somewhere && git <cmd>)"
>>>> as it doesn't need an extra shell.
>>>
>>> There is a matching '>' missing.  The description is correct (I am
>>> not sure if there actually is "preference", though), but I found the
>>> title a bit misleading....
>>
>> It turns out that there were two missing '>' ;-)  It tentatively has
>> become like this in my tree.
>
> Thanks for fixing up locally. I had resent as
> "[PATCH] lib-submodule-update.sh: reduce use of subshell by using git -C <dir>"
> but you can ignore that now.

Yeah, apparently our mails crossed. Yours still have "git -C <cmd>" that should have been "git -C <dir> <cmd>", so I'll keep the locally munged one.

Thanks.

← back to recent threads