diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-03-16 13:16:54 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-03-16 13:16:54 -0700 |
commit | 2df13639e77999efecbe682ae5e72cbfb14b3dcc (patch) | |
tree | 6c1066b80be0275c226525e1aed75cbd7804417a | |
parent | 9e689802e393b614ab9343dba2cee3828950f3ec (diff) | |
parent | 214123c6457d9706716dbdd608d03262e348a121 (diff) | |
download | git-2df13639e77999efecbe682ae5e72cbfb14b3dcc.tar.gz git-2df13639e77999efecbe682ae5e72cbfb14b3dcc.tar.xz |
Merge branch 'jc/sane-grep'
Recent versions of GNU grep is pickier than before to decide if a
file is "binary" and refuse to give line-oriented hits when we
expect it to, unless explicitly told with "-a" option. As our
scripted Porcelains use sane_grep wrapper for line-oriented data,
even when the line may contain non-ASCII payload we took from
end-user data, use "grep -a" to implement sane_grep wrapper when
using an implementation of "grep" that takes the "-a" option.
* jc/sane-grep:
rebase-i: clarify "is this commit relevant?" test
sane_grep: pass "-a" if grep accepts it
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | config.mak.uname | 1 | ||||
-rw-r--r-- | configure.ac | 7 | ||||
-rw-r--r-- | git-rebase--interactive.sh | 3 | ||||
-rw-r--r-- | git-sh-setup.sh | 4 |
5 files changed, 17 insertions, 4 deletions
@@ -264,6 +264,9 @@ all:: # # Define NO_TCLTK if you do not want Tcl/Tk GUI. # +# Define SANE_TEXT_GREP to "-a" if you use recent versions of GNU grep +# and egrep that are pickier when their input contains non-ASCII data. +# # The TCL_PATH variable governs the location of the Tcl interpreter # used to optimize git-gui for your system. Only used if NO_TCLTK # is not set. Defaults to the bare 'tclsh'. @@ -1740,7 +1743,7 @@ common-cmds.h: $(wildcard Documentation/git-*.txt) SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\ $(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\ - $(gitwebdir_SQ):$(PERL_PATH_SQ) + $(gitwebdir_SQ):$(PERL_PATH_SQ):$(SANE_TEXT_GREP) define cmd_munge_script $(RM) $@ $@+ && \ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \ @@ -1752,6 +1755,7 @@ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \ -e $(BROKEN_PATH_FIX) \ -e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \ -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \ + -e 's|@@SANE_TEXT_GREP@@|$(SANE_TEXT_GREP)|g' \ $@.sh >$@+ endef diff --git a/config.mak.uname b/config.mak.uname index 4c68e078e..1139b4400 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -37,6 +37,7 @@ ifeq ($(uname_S),Linux) HAVE_CLOCK_GETTIME = YesPlease HAVE_CLOCK_MONOTONIC = YesPlease HAVE_GETDELIM = YesPlease + SANE_TEXT_GREP=-a endif ifeq ($(uname_S),GNU/kFreeBSD) HAVE_ALLOCA_H = YesPlease diff --git a/configure.ac b/configure.ac index 89e2590bd..0cd9f4680 100644 --- a/configure.ac +++ b/configure.ac @@ -471,6 +471,13 @@ if test -n "$ASCIIDOC"; then esac fi +if grep -a ascii configure.ac >/dev/null; then + AC_MSG_RESULT([Using 'grep -a' for sane_grep]) + SANE_TEXT_GREP=-a +else + SANE_TEXT_GREP= +fi +GIT_CONF_SUBST([SANE_TEXT_GREP]) ## Checks for libraries. AC_MSG_NOTICE([CHECKS for libraries]) diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index c0cfe88a3..4cde685b4 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -1233,7 +1233,8 @@ then git rev-list $revisions | while read rev do - if test -f "$rewritten"/$rev && test "$(sane_grep "$rev" "$state_dir"/not-cherry-picks)" = "" + if test -f "$rewritten"/$rev && + ! sane_grep "$rev" "$state_dir"/not-cherry-picks >/dev/null then # Use -f2 because if rev-list is telling us this commit is # not worthwhile, we don't want to track its multiple heads, diff --git a/git-sh-setup.sh b/git-sh-setup.sh index 4691fbcb6..c48139a49 100644 --- a/git-sh-setup.sh +++ b/git-sh-setup.sh @@ -168,11 +168,11 @@ git_pager() { } sane_grep () { - GREP_OPTIONS= LC_ALL=C grep "$@" + GREP_OPTIONS= LC_ALL=C grep @@SANE_TEXT_GREP@@ "$@" } sane_egrep () { - GREP_OPTIONS= LC_ALL=C egrep "$@" + GREP_OPTIONS= LC_ALL=C egrep @@SANE_TEXT_GREP@@ "$@" } is_bare_repository () { |