Merge branch 'master' into next

* 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
maint
Junio C Hamano 2006-05-09 19:32:08 -07:00
commit 7278a29a27
4 changed files with 12 additions and 12 deletions

18
apply.c
View File

@ -21,6 +21,7 @@
// //
static const char *prefix; static const char *prefix;
static int prefix_length = -1; static int prefix_length = -1;
static int newfd = -1;


static int p_value = 1; static int p_value = 1;
static int allow_binary_replacement = 0; 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) static int apply_patch(int fd, const char *filename)
{ {
int newfd;
unsigned long offset, size; unsigned long offset, size;
char *buffer = read_patch_file(fd, &size); char *buffer = read_patch_file(fd, &size);
struct patch *list = NULL, **listp = &list; struct patch *list = NULL, **listp = &list;
@ -2082,12 +2082,11 @@ static int apply_patch(int fd, const char *filename)
size -= nr; size -= nr;
} }


newfd = -1;
if (whitespace_error && (new_whitespace == error_on_whitespace)) if (whitespace_error && (new_whitespace == error_on_whitespace))
apply = 0; apply = 0;


write_index = check_index && apply; write_index = check_index && apply;
if (write_index) if (write_index && newfd < 0)
newfd = hold_index_file_for_update(&cache_file, get_index_file()); newfd = hold_index_file_for_update(&cache_file, get_index_file());
if (check_index) { if (check_index) {
if (read_cache() < 0) if (read_cache() < 0)
@ -2100,12 +2099,6 @@ static int apply_patch(int fd, const char *filename)
if (apply) if (apply)
write_out_results(list, skipped_patch); 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) if (show_index_info)
show_index_list(list); show_index_list(list);


@ -2264,5 +2257,12 @@ int main(int argc, char **argv)
whitespace_error == 1 ? "" : "s", whitespace_error == 1 ? "" : "s",
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; return 0;
} }

View File

@ -144,7 +144,7 @@ else
work=`git write-tree` && work=`git write-tree` &&
git read-tree --reset $new && git read-tree --reset $new &&
git checkout-index -f -u -q -a && 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` if result=`git write-tree 2>/dev/null`
then then

View File

@ -137,7 +137,7 @@ esac >.msg
# $prev and $commit on top of us (when cherry-picking or replaying). # $prev and $commit on top of us (when cherry-picking or replaying).


echo >&2 "First trying simple merge strategy to $me." 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) || { result=$(git-write-tree 2>/dev/null) || {
echo >&2 "Simple $me fails; trying Automatic $me." echo >&2 "Simple $me fails; trying Automatic $me."
git-merge-index -o git-merge-one-file -a || { git-merge-index -o git-merge-one-file -a || {

View File

@ -583,7 +583,7 @@ int read_cache(void)


active_nr = ntohl(hdr->hdr_entries); active_nr = ntohl(hdr->hdr_entries);
active_alloc = alloc_nr(active_nr); 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); offset = sizeof(*hdr);
for (i = 0; i < active_nr; i++) { for (i = 0; i < active_nr; i++) {