Message ID | 692875cf4baaeee8b47fd7e95d0b787d1a08f64e.1555880168.git.liu.denton@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | difftool and mergetool improvements | expand |
On Mon, Apr 22, 2019 at 1:07 AM Denton Liu <liu.denton@gmail.com> wrote: > [...] > Rewrite `get_merge_tool` to return whether or not the tool was guessed > and make git-mergetool call this function instead of duplicating the > logic. Also, let `$GIT_MERGETOOL_GUI` be set to determine whether or not > the guitool will be selected. > > Signed-off-by: Denton Liu <liu.denton@gmail.com> > --- > diff --git a/Documentation/git-mergetool--lib.txt b/Documentation/git-mergetool--lib.txt > @@ -28,7 +28,10 @@ to define the operation mode for the functions listed below. > get_merge_tool:: > - returns a merge tool. > + returns '$is_guessed:$merge_tool'. '$is_guessed' is 'true' if > + the tool was guessed, else 'false'. '$merge_tool' is the merge > + tool to use. '$GIT_MERGETOOL_GUI' may be set to 'true' to search > + for the appropriate guitool. What is the likelihood that code outside of our control is using this function? If there is such code, this backward-incompatible change will break that code. If the likelihood is excessively small, perhaps it is not worth worrying about, otherwise, perhaps this warrants a new function with a distinct name.
Hi Eric, On Mon, Apr 22, 2019 at 03:07:25AM -0400, Eric Sunshine wrote: > On Mon, Apr 22, 2019 at 1:07 AM Denton Liu <liu.denton@gmail.com> wrote: > > [...] > > Rewrite `get_merge_tool` to return whether or not the tool was guessed > > and make git-mergetool call this function instead of duplicating the > > logic. Also, let `$GIT_MERGETOOL_GUI` be set to determine whether or not > > the guitool will be selected. > > > > Signed-off-by: Denton Liu <liu.denton@gmail.com> > > --- > > diff --git a/Documentation/git-mergetool--lib.txt b/Documentation/git-mergetool--lib.txt > > @@ -28,7 +28,10 @@ to define the operation mode for the functions listed below. > > get_merge_tool:: > > - returns a merge tool. > > + returns '$is_guessed:$merge_tool'. '$is_guessed' is 'true' if > > + the tool was guessed, else 'false'. '$merge_tool' is the merge > > + tool to use. '$GIT_MERGETOOL_GUI' may be set to 'true' to search > > + for the appropriate guitool. > > What is the likelihood that code outside of our control is using this > function? If there is such code, this backward-incompatible change > will break that code. If the likelihood is excessively small, perhaps > it is not worth worrying about, otherwise, perhaps this warrants a new > function with a distinct name. Thanks for considering this, I hadn't thought about it myself. I assumed this was an internal function but I guess I was wrong. I did a bit of digging on GitHub and Google and I found that git-diffall[1] uses it, although it seems quite old and unmaintained. Aside from this, I can't find any other open-source programs which use git-mergetool--lib (and in particular, get_merge_tool) so I believe that it is pretty rare. That being said, I'm open to writing a new function so that the change will be backwards compatible. I'll see what the list has to say. Thanks, Denton [1]: https://github.com/thenigan/git-diffall
diff --git a/Documentation/git-mergetool--lib.txt b/Documentation/git-mergetool--lib.txt index 055550b2bc..c4f10209e0 100644 --- a/Documentation/git-mergetool--lib.txt +++ b/Documentation/git-mergetool--lib.txt @@ -28,7 +28,10 @@ to define the operation mode for the functions listed below. FUNCTIONS --------- get_merge_tool:: - returns a merge tool. + returns '$is_guessed:$merge_tool'. '$is_guessed' is 'true' if + the tool was guessed, else 'false'. '$merge_tool' is the merge + tool to use. '$GIT_MERGETOOL_GUI' may be set to 'true' to search + for the appropriate guitool. get_merge_tool_cmd:: returns the custom command for a merge tool. diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh index 7bfb6737df..78a0446668 100755 --- a/git-difftool--helper.sh +++ b/git-difftool--helper.sh @@ -71,7 +71,7 @@ then then merge_tool="$GIT_DIFF_TOOL" else - merge_tool="$(get_merge_tool)" || exit + merge_tool="$(get_merge_tool | sed -e 's/^[a-z]*://')" || exit fi fi diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index 83bf52494c..d5e2c6c5c6 100644 --- a/git-mergetool--lib.sh +++ b/git-mergetool--lib.sh @@ -403,14 +403,16 @@ get_merge_tool_path () { } get_merge_tool () { + is_guessed=false # Check if a merge tool has been configured - merge_tool=$(get_configured_merge_tool) + merge_tool=$(get_configured_merge_tool $GIT_MERGETOOL_GUI) # Try to guess an appropriate merge tool if no tool has been set. if test -z "$merge_tool" then merge_tool=$(guess_merge_tool) || exit + is_guessed=true fi - echo "$merge_tool" + echo "$is_guessed:$merge_tool" } mergetool_find_win32_cmd () { diff --git a/git-mergetool.sh b/git-mergetool.sh index 01b9ad59b2..6ad8024e46 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -449,14 +449,9 @@ main () { if test -z "$merge_tool" then - # Check if a merge tool has been configured - merge_tool=$(get_configured_merge_tool $gui_tool) - # Try to guess an appropriate merge tool if no tool has been set. - if test -z "$merge_tool" - then - merge_tool=$(guess_merge_tool) || exit - guessed_merge_tool=true - fi + IFS=':' read guessed_merge_tool merge_tool <<-EOF + $(GIT_MERGETOOL_GUI=$gui_tool get_merge_tool) + EOF fi merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)" merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)"
In git-mergetool, the logic for getting which merge tool to use is duplicated in git-mergetool--lib, except for the fact that it needs to know whether the tool was guessed or not. Rewrite `get_merge_tool` to return whether or not the tool was guessed and make git-mergetool call this function instead of duplicating the logic. Also, let `$GIT_MERGETOOL_GUI` be set to determine whether or not the guitool will be selected. Signed-off-by: Denton Liu <liu.denton@gmail.com> --- Documentation/git-mergetool--lib.txt | 5 ++++- git-difftool--helper.sh | 2 +- git-mergetool--lib.sh | 6 ++++-- git-mergetool.sh | 11 +++-------- 4 files changed, 12 insertions(+), 12 deletions(-)