Merge branch 'master' into next
authorJunio C Hamano <junkio@cox.net>
Wed, 10 May 2006 02:32:08 +0000 (19:32 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 10 May 2006 02:32:08 +0000 (19:32 -0700)
* master:
  checkout: use --aggressive when running a 3-way merge (-m).
  revert/cherry-pick: use aggressive merge.
  read-cache.c: use xcalloc() not calloc()
  apply: fix infinite loop with multiple patches with --index

apply.c
git-checkout.sh
git-revert.sh
read-cache.c

diff --git a/apply.c b/apply.c
index 88d2a32..ea6fb4c 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -21,6 +21,7 @@
 //
 static const char *prefix;
 static int prefix_length = -1;
+static int newfd = -1;
 
 static int p_value = 1;
 static int allow_binary_replacement = 0;
@@ -2051,7 +2052,6 @@ static int use_patch(struct patch *p)
 
 static int apply_patch(int fd, const char *filename)
 {
-       int newfd;
        unsigned long offset, size;
        char *buffer = read_patch_file(fd, &size);
        struct patch *list = NULL, **listp = &list;
@@ -2082,12 +2082,11 @@ static int apply_patch(int fd, const char *filename)
                size -= nr;
        }
 
-       newfd = -1;
        if (whitespace_error && (new_whitespace == error_on_whitespace))
                apply = 0;
 
        write_index = check_index && apply;
-       if (write_index)
+       if (write_index && newfd < 0)
                newfd = hold_index_file_for_update(&cache_file, get_index_file());
        if (check_index) {
                if (read_cache() < 0)
@@ -2100,12 +2099,6 @@ static int apply_patch(int fd, const char *filename)
        if (apply)
                write_out_results(list, skipped_patch);
 
-       if (write_index) {
-               if (write_cache(newfd, active_cache, active_nr) ||
-                   commit_index_file(&cache_file))
-                       die("Unable to write new cachefile");
-       }
-
        if (show_index_info)
                show_index_list(list);
 
@@ -2264,5 +2257,12 @@ int main(int argc, char **argv)
                                whitespace_error == 1 ? "" : "s",
                                whitespace_error == 1 ? "s" : "");
        }
+
+       if (write_index) {
+               if (write_cache(newfd, active_cache, active_nr) ||
+                   commit_index_file(&cache_file))
+                       die("Unable to write new cachefile");
+       }
+
        return 0;
 }
index 463ed2e..a11c939 100755 (executable)
@@ -144,7 +144,7 @@ else
        work=`git write-tree` &&
        git read-tree --reset $new &&
        git checkout-index -f -u -q -a &&
-       git read-tree -m -u $old $new $work || exit
+       git read-tree -m -u --aggressive $old $new $work || exit
 
        if result=`git write-tree 2>/dev/null`
        then
index c19d3a6..de8b5f0 100755 (executable)
@@ -137,7 +137,7 @@ esac >.msg
 # $prev and $commit on top of us (when cherry-picking or replaying).
 
 echo >&2 "First trying simple merge strategy to $me."
-git-read-tree -m -u $base $head $next &&
+git-read-tree -m -u --aggressive $base $head $next &&
 result=$(git-write-tree 2>/dev/null) || {
     echo >&2 "Simple $me fails; trying Automatic $me."
     git-merge-index -o git-merge-one-file -a || {
index 1f71d12..ed0da38 100644 (file)
@@ -583,7 +583,7 @@ int read_cache(void)
 
        active_nr = ntohl(hdr->hdr_entries);
        active_alloc = alloc_nr(active_nr);
-       active_cache = calloc(active_alloc, sizeof(struct cache_entry *));
+       active_cache = xcalloc(active_alloc, sizeof(struct cache_entry *));
 
        offset = sizeof(*hdr);
        for (i = 0; i < active_nr; i++) {