[PATCH] git-difftool: allow skipping file by typing 'n' at prompt
- From
Sitaram Chamarty <sitaramc@gmail.com>
- Date
- Oct 8, 2011, 13:10 UTC
- Message-ID
- <20111008131015.GA28213@sita-lt.atc.tcs.com>
- In-Reply-To
- <7vwrcgtvh4.fsf@alter.siamese.dyndns.org>
This is useful if you forgot to restrict the diff to the paths you want to see, or selecting precisely the ones you want is too much typing.
Signed-off-by: Sitaram Chamarty <sitaram@atc.tcs.com> ---
On Fri, Oct 07, 2011 at 01:09:11PM -0700, Junio C Hamano wrote:
> Looks OK from a cursory viewing. Do we want some additional tests? > > For that matter, have you run the test suite with this patch applied (I > haven't)?
OK; done. I got some "broken" but nothing "failed":
make aggregate-results
make[3]: Entering directory `/home/sitaram/clones/git/t'
for f in test-results/t*-*.counts; do \
echo "$f"; \
done | '/bin/sh' ./aggregate-results.sh
fixed 0
success 7377
failed 0
broken 49
total 7461Hope that is not a problem.
However, I'm not sure the file names that 'git difftool' comes up with are in a predictable order. That would mess up the test, but I can neither make it fail not find definitive information on the order in which the changed files are processed.
git-difftool--helper.sh | 9 +++++---- t/t7800-difftool.sh | 44 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh index 8452890..0468446 100755 --- a/git-difftool--helper.sh +++ b/git-difftool--helper.sh @@ -38,15 +38,16 @@ launch_merge_tool () { # $LOCAL and $REMOTE are temporary files so prompt # the user with the real $MERGED name before launching $merge_tool. + ans=y if should_prompt then printf "\nViewing: '$MERGED'\n" if use_ext_cmd then - printf "Hit return to launch '%s': " \ + printf "Launch '%s' [Y/n]: " \ "$GIT_DIFFTOOL_EXTCMD" else - printf "Hit return to launch '%s': " "$merge_tool" + printf "Launch '%s' [Y/n]: " "$merge_tool" fi read ans fi @@ -54,9 +55,9 @@ launch_merge_tool () { if use_ext_cmd then export BASE - eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"' + test "$ans" != "n" && eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"' else - run_merge_tool "$merge_tool" + test "$ans" != "n" && run_merge_tool "$merge_tool" fi } diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh index 395adfc..f547e0b 100755 --- a/t/t7800-difftool.sh +++ b/t/t7800-difftool.sh @@ -38,7 +38,18 @@ restore_test_defaults() prompt_given() { prompt="$1" - test "$prompt" = "Hit return to launch 'test-tool': branch" + test "$prompt" = "Launch 'test-tool' [Y/n]: branch" +} + +stdin_contains() +{ + grep >/dev/null "$1" +} + +stdin_doesnot_contain() +{ + grep >/dev/null "$1" && return 1 + return 0 } # Create a file on master and change it on branch @@ -265,4 +276,35 @@ test_expect_success PERL 'difftool --extcmd cat arg2' ' test "$diff" = branch ' +# Create a second file on master and a different version on branch +test_expect_success PERL 'setup with 2 files different' ' + echo m2 >file2 && + git add file2 && + git commit -m "added file2" && + + git checkout branch && + echo br2 >file2 && + git add file2 && + git commit -a -m "branch changed file2" && + git checkout master +' + +test_expect_success PERL 'say no to the first file' ' + diff=$((echo n; echo) | git difftool -x cat branch) && + + echo "$diff" | stdin_contains m2 && + echo "$diff" | stdin_contains br2 && + echo "$diff" | stdin_doesnot_contain master && + echo "$diff" | stdin_doesnot_contain branch +' + +test_expect_success PERL 'say no to the second file' ' + diff=$((echo; echo n) | git difftool -x cat branch) && + + echo "$diff" | stdin_contains master && + echo "$diff" | stdin_contains branch && + echo "$diff" | stdin_doesnot_contain m2 && + echo "$diff" | stdin_doesnot_contain br2 +' + test_done
-- 1.7.6