Merge branch 'maint' to sync with 1.6.3.2
authorJunio C Hamano <gitster@pobox.com>
Thu, 4 Jun 2009 05:51:56 +0000 (22:51 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 4 Jun 2009 05:51:56 +0000 (22:51 -0700)
Documentation/RelNotes-1.6.3.2.txt
grep.c
index 0b48d1a1dfba79d5fe5c85d5cee9327a7ab11a5e..b2f3f0293c0da729d642dc7e4645df26c86c338d 100644 (file)
@@ -37,13 +37,17 @@ Fixes since v1.6.3.1
    the first hunk that adds a line at the top was split into two and
    both halves are marked to be used.
 
+ * "git blame path" misbehaved at the commit where path became file
+   from a directory with some files in it.
+
  * "git for-each-ref" had a segfaulting bug when dealing with a tag object
    created by an ancient git.
 
  * "git format-patch -k" still added patch numbers if format.numbered
    configuration was set.
 
- * "git grep --color ''" did not terminate.
+ * "git grep --color ''" did not terminate.  The command also had
+   subtle bugs with its -w option.
 
  * http-push had a small use-after-free bug.
 
@@ -55,9 +59,3 @@ Fixes since v1.6.3.1
 
 Many other general usability updates around help text, diagnostic messages
 and documentation are included as well.
-
----
-exec >/var/tmp/1
-O=v1.6.3.1-68-g456cb4c
-echo O=$(git describe maint)
-git shortlog --no-merges $O..maint
diff --git a/grep.c b/grep.c
index 7bf4a60ac7704e16abe9054296c1e0e77c984344..92a47c71e7d93eef7dc8d6967cd071aa061218ce 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -331,7 +331,7 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
 
        if (hit && p->word_regexp) {
                if ((pmatch[0].rm_so < 0) ||
-                   (eol - bol) <= pmatch[0].rm_so ||
+                   (eol - bol) < pmatch[0].rm_so ||
                    (pmatch[0].rm_eo < 0) ||
                    (eol - bol) < pmatch[0].rm_eo)
                        die("regexp returned nonsense");
@@ -350,6 +350,10 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
                else
                        hit = 0;
 
+               /* Words consist of at least one character. */
+               if (pmatch->rm_so == pmatch->rm_eo)
+                       hit = 0;
+
                if (!hit && pmatch[0].rm_so + bol + 1 < eol) {
                        /* There could be more than one match on the
                         * line, and the first match might not be