Merge branch 'maint'
authorShawn O. Pearce <spearce@spearce.org>
Fri, 19 Oct 2007 05:18:55 +0000 (01:18 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 19 Oct 2007 05:18:55 +0000 (01:18 -0400)
* maint:
Further 1.5.3.5 fixes described in release notes
Avoid invoking diff drivers during git-stash
attr: fix segfault in gitattributes parsing code
Define NI_MAXSERV if not defined by operating system
Ensure we add directories in the correct order
Avoid scary errors about tagged trees/blobs during git-fetch

Documentation/RelNotes-1.5.3.5.txt
attr.c
builtin-fetch--tool.c
daemon.c
git-cvsexportcommit.perl
git-stash.sh
t/t0020-crlf.sh
index 78df418257c384107759d4aeaa1dd94bb7316b03..49e52264ba23727bb329d746a973864454c3f1d2 100644 (file)
@@ -20,9 +20,9 @@ Fixes since v1.5.3.4
 
  * "git-add -i" did not handle single line hunks correctly.
 
- * "git-rebase -i" failed if external diff drivers were used for one
-   or more files in a commit.  It now avoids calling the external
-   diff drivers.
+ * "git-rebase -i" and "git-stash apply" failed if external diff
+   drivers were used for one or more files in a commit.  They now
+   avoid calling the external diff drivers.
 
  * "git-log --follow" did not work unless diff generation (e.g. -p)
    was also requested.
@@ -38,6 +38,16 @@ Fixes since v1.5.3.4
 
  * "git-instaweb" no longer fails on Mac OS X.
 
+ * "git-cvsexportcommit" didn't always create new parent directories
+   before trying to create new child directories.  Fixed.
+
+ * "git-fetch" printed a scary (but bogus) error message while
+   fetching a tag that pointed to a tree or blob.  The error did
+   not impact correctness, only user perception.  The bogus error
+   is no longer printed.
+
+ * Git segfaulted when reading an invalid .gitattributes file.  Fixed.
+
  * post-receive-email example hook fixed was fixed for
    non-fast-forward updates.
 
diff --git a/attr.c b/attr.c
index 92704a3f61c6d43d0377d86feb6598e68797022b..741db3b468c6a6ebbcd1414e42b4ef7d6ab3cc9d 100644 (file)
--- a/attr.c
+++ b/attr.c
@@ -209,8 +209,11 @@ static struct match_attr *parse_attr_line(const char *line, const char *src,
                num_attr = 0;
                cp = name + namelen;
                cp = cp + strspn(cp, blank);
-               while (*cp)
+               while (*cp) {
                        cp = parse_attr(src, lineno, cp, &num_attr, res);
+                       if (!cp)
+                               return NULL;
+               }
                if (pass)
                        break;
                res = xcalloc(1,
index 1e43d792216248c1abe3504c239ccd325f8d5ef1..e26817de219588e680340be8c0faf6b65417c465 100644 (file)
@@ -131,7 +131,7 @@ static int append_fetch_head(FILE *fp,
 
        if (get_sha1(head, sha1))
                return error("Not a valid object name: %s", head);
-       commit = lookup_commit_reference(sha1);
+       commit = lookup_commit_reference_gently(sha1, 1);
        if (!commit)
                not_for_merge = 1;
 
index 9cf22fef417cee29e550a35fef1bac1050482afa..660e1552d46b8566f162677af02d91dc351c5c3f 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -9,6 +9,10 @@
 #define HOST_NAME_MAX 256
 #endif
 
+#ifndef NI_MAXSERV
+#define NI_MAXSERV 32
+#endif
+
 static int log_syslog;
 static int verbose;
 static int reuseaddr;
index 7a955d4530611674c1d6650ce00dd4ff65cf15bc..f284c88a46b5cc7d6e75b78346829ce03e60b060 100755 (executable)
 
 print "Patch applied successfully. Adding new files and directories to CVS\n";
 my $dirtypatch = 0;
+
+#
+# We have to add the directories in order otherwise we will have
+# problems when we try and add the sub-directory of a directory we
+# have not added yet.
+#
+# Luckily this is easy to deal with by sorting the directories and
+# dealing with the shortest ones first.
+#
+@dirs = sort { length $a <=> length $b} @dirs;
+
 foreach my $d (@dirs) {
     if (system(@cvs,'add',$d)) {
        $dirtypatch = 1;
index 7ba61625baff8236f51d6c0babe9747c43664351..def3163ebbb4f88f800b7cf3c7b856f90b5ae73f 100755 (executable)
@@ -110,7 +110,7 @@ show_stash () {
 
        w_commit=$(git rev-parse --verify "$s") &&
        b_commit=$(git rev-parse --verify "$s^") &&
-       git diff $flags $b_commit $w_commit
+       git diff-tree $flags $b_commit $w_commit
 }
 
 apply_stash () {
@@ -139,7 +139,7 @@ apply_stash () {
        unstashed_index_tree=
        if test -n "$unstash_index" && test "$b_tree" != "$i_tree"
        then
-               git diff --binary $s^2^..$s^2 | git apply --cached
+               git diff-tree --binary $s^2^..$s^2 | git apply --cached
                test $? -ne 0 &&
                        die 'Conflicts in index. Try without --index.'
                unstashed_index_tree=$(git-write-tree) ||
@@ -162,7 +162,7 @@ apply_stash () {
                        git read-tree "$unstashed_index_tree"
                else
                        a="$TMP-added" &&
-                       git diff --cached --name-only --diff-filter=A $c_tree >"$a" &&
+                       git diff-index --cached --name-only --diff-filter=A $c_tree >"$a" &&
                        git read-tree --reset $c_tree &&
                        git update-index --add --stdin <"$a" ||
                                die "Cannot unstage modified files"
index 0807d9f01a178567e433c9c057064d026109ade2..62bc4bb077d06920509228b9fcd6464472e96dc2 100755 (executable)
@@ -371,4 +371,11 @@ test_expect_success 'in-tree .gitattributes (4)' '
        }
 '
 
+test_expect_success 'invalid .gitattributes (must not crash)' '
+
+       echo "three +crlf" >>.gitattributes &&
+       git diff
+
+'
+
 test_done