Discussion:
[PATCH v2 1/2] mergetool: don't require a work tree for --tool-help
David Aguilar
2014-10-10 08:51:43 UTC
Permalink
From: Charles Bailey <***@bloomberg.net>

Signed-off-by: Charles Bailey <***@bloomberg.net>
Signed-off-by: David Aguilar <***@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
David Aguilar
2014-10-10 08:51:44 UTC
Permalink
From: Charles Bailey <***@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 <***@bloomberg.net>
Helped-by: John Keeping <***@keeping.me.uk>
Signed-off-by: David Aguilar <***@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
Charles Bailey
2014-10-10 09:01:57 UTC
Permalink
Post by David Aguilar
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.--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
David Aguilar
2014-10-11 08:29:56 UTC
Permalink
Post by Charles Bailey
Post by David Aguilar
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
Charles Bailey
2014-10-11 08:35:51 UTC
Permalink
Post by David Aguilar
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.--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Loading...