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
prev 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.