git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help
@ 2014-10-10  8:51 David Aguilar
  2014-10-10  8:51 ` [PATCH v2 2/2] difftool: don't assume that default sh is sane David Aguilar
  2014-10-10  9:01 ` [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help Charles Bailey
  0 siblings, 2 replies; 5+ messages in thread
From: David Aguilar @ 2014-10-10  8:51 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Charles Bailey, Charles Bailey

From: Charles Bailey <cbailey32@bloomberg.net>

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Signed-off-by: David Aguilar <davvid@gmail.com>
---
Changes since v1:

NONGIT_OK=Yes was added to make it actually work outside of a git repo.

 git-mergetool.sh | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/git-mergetool.sh b/git-mergetool.sh
index 96a61ba..a502430 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -10,11 +10,11 @@
 
 USAGE='[--tool=tool] [--tool-help] [-y|--no-prompt|--prompt] [file to merge] ...'
 SUBDIRECTORY_OK=Yes
+NONGIT_OK=Yes
 OPTIONS_SPEC=
 TOOL_MODE=merge
 . git-sh-setup
 . git-mergetool--lib
-require_work_tree
 
 # Returns true if the mode reflects a symlink
 is_symlink () {
@@ -378,6 +378,8 @@ prompt_after_failed_merge () {
 	done
 }
 
+require_work_tree
+
 if test -z "$merge_tool"
 then
 	# Check if a merge tool has been configured
-- 
2.1.2.377.g0e18f12

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/2] difftool: don't assume that default sh is sane
  2014-10-10  8:51 [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help David Aguilar
@ 2014-10-10  8:51 ` David Aguilar
  2014-10-10  9:01 ` [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help Charles Bailey
  1 sibling, 0 replies; 5+ messages in thread
From: David Aguilar @ 2014-10-10  8:51 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Charles Bailey, Charles Bailey

From: Charles Bailey <cbailey32@bloomberg.net>

git-difftool used to create a command list script containing $( ... )
and explicitly calls "sh -c" with this list.

Instead, allow mergetool --tool-help to take a mode parameter and call
mergetool directly to invoke the show_tool_help function. This mode
parameter is intented for use solely by difftool.

Signed-off-by: Charles Bailey <cbailey32@bloomberg.net>
Helped-by: John Keeping <john@keeping.me.uk>
Signed-off-by: David Aguilar <davvid@gmail.com>
---
Changes since v1:

The case statement for --tool-help=* was made simpler
thanks to John.

 git-difftool.perl | 6 +-----
 git-mergetool.sh  | 4 ++++
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/git-difftool.perl b/git-difftool.perl
index 18ca61e..598fcc2 100755
--- a/git-difftool.perl
+++ b/git-difftool.perl
@@ -47,13 +47,9 @@ sub find_worktree
 
 sub print_tool_help
 {
-	my $cmd = 'TOOL_MODE=diff';
-	$cmd .= ' && . "$(git --exec-path)/git-mergetool--lib"';
-	$cmd .= ' && show_tool_help';
-
 	# See the comment at the bottom of file_diff() for the reason behind
 	# using system() followed by exit() instead of exec().
-	my $rc = system('sh', '-c', $cmd);
+	my $rc = system(qw(git mergetool --tool-help=diff));
 	exit($rc | ($rc >> 8));
 }
 
diff --git a/git-mergetool.sh b/git-mergetool.sh
index a502430..ea8fe37 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -327,6 +327,10 @@ guessed_merge_tool=false
 while test $# != 0
 do
 	case "$1" in
+	--tool-help=*)
+		TOOL_MODE=${1#--tool-help=}
+		show_tool_help
+		;;
 	--tool-help)
 		show_tool_help
 		;;
-- 
2.1.2.377.g0e18f12

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help
  2014-10-10  8:51 [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help David Aguilar
  2014-10-10  8:51 ` [PATCH v2 2/2] difftool: don't assume that default sh is sane David Aguilar
@ 2014-10-10  9:01 ` Charles Bailey
  2014-10-11  8:29   ` David Aguilar
  1 sibling, 1 reply; 5+ messages in thread
From: Charles Bailey @ 2014-10-10  9:01 UTC (permalink / raw)
  To: David Aguilar; +Cc: Junio C Hamano, git@vger.kernel.org, Charles Bailey

On 10 Oct 2014, at 09:51, David Aguilar <davvid@gmail.com> wrote:
> Changes since v1:
> 
> NONGIT_OK=Yes was added to make it actually work outside of a git repo.

Does this actually work? The reason that I haven't got around to resending my re-roll is that I found that I needed changes to git-sh-setup.sh because doing NONGIT_OK and then require_work_tree didn't correctly set GIT_DIR when it wasn't already explicitly set in the environment. (I believe the rest of mergetool relies on it.)

Perhaps I misunderstood, though.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help
  2014-10-10  9:01 ` [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help Charles Bailey
@ 2014-10-11  8:29   ` David Aguilar
  2014-10-11  8:35     ` Charles Bailey
  0 siblings, 1 reply; 5+ messages in thread
From: David Aguilar @ 2014-10-11  8:29 UTC (permalink / raw)
  To: Charles Bailey; +Cc: Junio C Hamano, git@vger.kernel.org, Charles Bailey

On Fri, Oct 10, 2014 at 10:01:57AM +0100, Charles Bailey wrote:
> On 10 Oct 2014, at 09:51, David Aguilar <davvid@gmail.com> wrote:
> > Changes since v1:
> > 
> > NONGIT_OK=Yes was added to make it actually work outside of a git repo.
> 
> Does this actually work? The reason that I haven't got around
> to resending my re-roll is that I found that I needed changes
> to git-sh-setup.sh because doing NONGIT_OK and then
> require_work_tree didn't correctly set GIT_DIR when it wasn't
> already explicitly set in the environment. (I believe the rest
> of mergetool relies on it.)
> 
> Perhaps I misunderstood, though.

Thanks for the heads-up.

I tested mergetool and it seems fine but indeed there's an
`if test -e "$GIT_DIR/MERGE_RR"` in there that is surely not
working as intended.

One solution would be to move the work done in the test -z "$NONGIT_OK"
block in git-sh-setup into a function e.g. git_dir_init () so
that we can defer the GIT_DIR initialization until after
require_work_tree has been called.
-- 
David

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help
  2014-10-11  8:29   ` David Aguilar
@ 2014-10-11  8:35     ` Charles Bailey
  0 siblings, 0 replies; 5+ messages in thread
From: Charles Bailey @ 2014-10-11  8:35 UTC (permalink / raw)
  To: David Aguilar; +Cc: Junio C Hamano, git@vger.kernel.org, Charles Bailey




> On 11 Oct 2014, at 09:29, David Aguilar <davvid@gmail.com> wrote:
> 
> Thanks for the heads-up.
> 
> I tested mergetool and it seems fine but indeed there's an
> `if test -e "$GIT_DIR/MERGE_RR"` in there that is surely not
> working as intended.
> 
> One solution would be to move the work done in the test -z "$NONGIT_OK"
> block in git-sh-setup into a function e.g. git_dir_init () so
> that we can defer the GIT_DIR initialization until after
> require_work_tree has been called.

I believe I had a very similar idea but the vast number of things that would potentially be affected by changing git-sh-setup.sh made me put things on hold in case I had any other ideas.

I haven't so I think this is probably the best approach.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-10-11  8:36 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-10  8:51 [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help David Aguilar
2014-10-10  8:51 ` [PATCH v2 2/2] difftool: don't assume that default sh is sane David Aguilar
2014-10-10  9:01 ` [PATCH v2 1/2] mergetool: don't require a work tree for --tool-help Charles Bailey
2014-10-11  8:29   ` David Aguilar
2014-10-11  8:35     ` Charles Bailey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).