git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Aguilar <davvid@gmail.com>
To: Charles Bailey <charles@hashpling.org>
Cc: gitster@pobox.com, git@vger.kernel.org, markus.heidelberg@web.de
Subject: Re: [PATCH v6 14/14] difftool/mergetool: refactor commands to use git-mergetool--lib
Date: Sat, 11 Apr 2009 20:41:27 -0700	[thread overview]
Message-ID: <20090412034127.GA1398@gmail.com> (raw)
In-Reply-To: <20090411120040.GA10381@hashpling.org>

On  0, Charles Bailey <charles@hashpling.org> wrote:
> On Wed, Apr 08, 2009 at 12:17:20AM -0700, David Aguilar wrote:
> 
> Finally, I've got around to some git work...
> 
> > diff --git a/Documentation/git-mergetool--lib.txt
> --- snip ---
> > +
> > +run_merge_tool::
> > +	launches a merge tool given the tool name and a true/false
> > +	flag to indicate whether a merge base is present.
> > +	'$merge_tool', '$merge_tool_path', and for custom commands,
> > +	'$merge_tool_cmd', must be defined prior to calling
> > +	run_merge_tool.  Additionally, '$MERGED', '$LOCAL', '$REMOTE',
> > +	and '$BASE' must be defined for use by the merge tool.
> 
> Reading this function it doesn't look like the variable $merge_tool is
> actually used, only the first parameter which should be the same
> thing. Also, TOOL_MODE is used and is important so should probably be
> documented here instead.

Done.
My new patch further removes those pesky globals ;)


> > diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
> > new file mode 100644
> > index 0000000..c5db24e
> > --- /dev/null
> > +++ b/git-mergetool--lib.sh 
> 
> --- snip ---
> 
> > +get_merge_tool_path () {
> > +	# A merge tool has been set, so verify that it's valid.
> > +	if ! valid_tool "$merge_tool"; then
> > +		echo >&2 "Unknown merge tool $merge_tool"
> > +		exit 1
> > +	fi
> > +	if diff_mode; then
> > +		merge_tool_path=$(git config difftool."$merge_tool".path)
> > +	fi
> > +	if test -z "$merge_tool_path"; then
> > +		merge_tool_path=$(git config mergetool."$merge_tool".path)
> > +	fi
> > +	merge_tool_path="$(translate_merge_tool_path "$merge_tool" "$merge_tool_path")"
> > +	if test -z "$merge_tool_cmd" && ! type "$merge_tool_path" > /dev/null 2>&1; then
> > +		echo >&2 "The $TOOL_MODE tool $merge_tool is not available as '$merge_tool_path'"
> > +		exit 1
> > +	fi
> > +	echo "$merge_tool_path"
> > +}
> 
> I just wanted to double check that we supported finding tools in the
> path with merge.$tool.path unset (it should just work), so I had a

mergetool.$tool.path

> quick play and got some really wierd results. Please tell me if just
> sourcing git-mergetool--lib isn't just going to work.
> 
> From a non-X session:
> 
>     $ git config -l | grep 'merge\.\?tool'; get_merge_tool; get_merge_tool_path
>     mergetool.p4merge.cmd=echo /"$BASE"/ /"$REMOTE"/ /"$LOCAL"/ /"$MERGED"/
>     merge tool candidates: kompare emerge vimdiff
>     vimdiff
>     vim
> 
> From an X session:
> 
>     mergetool.p4merge.cmd=echo /"$BASE"/ /"$REMOTE"/ /"$LOCAL"/ /"$MERGED"/
>     merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff kompare gvimdiff diffuse ecmerge emerge vimdiff
>     kdiff3
>     vim
> 
> I'm not quite sure what's going on here.

mergetool.$tool.path does work (there's a test for that feature,
though we only test difftool.$tool.path currently)

What you probably ran into was that get_merge_tool_path() had
a side-effect of setting $merge_tool_path and thus would just
return that value the 2nd time you ran it.

If you started from a fresh shell (instead of faking X11 by
setting $DISPLAY) then it would behave correctly.

In any case, yes, it needs to be more robust, so I'm
addressing that in:
"mergetool--lib: simplify API usage by removing more global variables"
(patch on its way)



> --- big snip to: @@ merge_file () {
> 
> > +    present=false
> > +    base_present &&
> > +    present=true
> 
> I'm not sure why, but from a style point of view, this seemed a bit
> inconsistent from the rest of mergetool and grated with me a bit.
> 
> I think I'd prefer
> 
> if base_present; then
>     present=false
> else
>     present=true
> fi

Definitely.
This was cleaned up as well.

In my patch get_merge_tool_path and get_merge_tool_cmd now take
$1 as an optional argument since they can easily look up the
$merge_tool themselves in lieu of a passed-in value.

I kept thinking of mergetool--lib from the POV of difftool and
mergetool, but these changes are good since they make it more
useful from a standalone POV.

Let me know what you think.

-- 

	David

      parent reply	other threads:[~2009-04-12  3:43 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-08  7:17 [PATCH v6 14/14] difftool/mergetool: refactor commands to use git-mergetool--lib David Aguilar
2009-04-11 12:00 ` Charles Bailey
2009-04-11 12:10   ` Charles Bailey
2009-04-12  3:41   ` David Aguilar [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=20090412034127.GA1398@gmail.com \
    --to=davvid@gmail.com \
    --cc=charles@hashpling.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=markus.heidelberg@web.de \
    /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 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).