fetch and pull: learn --progress
[gitweb.git] / rerere.c
index b988b467fa06d109d8164bccf213a362e87fb1d4..d1d3e753955146cadfaf6da274487a4a369f0521 100644 (file)
--- a/rerere.c
+++ b/rerere.c
@@ -325,7 +325,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu
        for (i = 0; i < 3; i++)
                free(mmfile[i].ptr);
 
-       memset(&io, 0, sizeof(&io));
+       memset(&io, 0, sizeof(io));
        io.io.getline = rerere_mem_getline;
        if (output)
                io.io.output = fopen(output, "w");
@@ -525,7 +525,7 @@ static int is_rerere_enabled(void)
        return 1;
 }
 
-int setup_rerere(struct string_list *merge_rr)
+int setup_rerere(struct string_list *merge_rr, int flags)
 {
        int fd;
 
@@ -533,6 +533,8 @@ int setup_rerere(struct string_list *merge_rr)
        if (!is_rerere_enabled())
                return -1;
 
+       if (flags & (RERERE_AUTOUPDATE|RERERE_NOAUTOUPDATE))
+               rerere_autoupdate = !!(flags & RERERE_AUTOUPDATE);
        merge_rr_path = git_pathdup("MERGE_RR");
        fd = hold_lock_file_for_update(&write_lock, merge_rr_path,
                                       LOCK_DIE_ON_ERROR);
@@ -540,12 +542,12 @@ int setup_rerere(struct string_list *merge_rr)
        return fd;
 }
 
-int rerere(void)
+int rerere(int flags)
 {
        struct string_list merge_rr = { NULL, 0, 0, 1 };
        int fd;
 
-       fd = setup_rerere(&merge_rr);
+       fd = setup_rerere(&merge_rr, flags);
        if (fd < 0)
                return 0;
        return do_plain_rerere(&merge_rr, fd);
@@ -586,7 +588,7 @@ int rerere_forget(const char **pathspec)
        if (read_cache() < 0)
                return error("Could not read index");
 
-       fd = setup_rerere(&merge_rr);
+       fd = setup_rerere(&merge_rr, RERERE_NOAUTOUPDATE);
 
        unmerge_cache(pathspec);
        find_conflict(&conflict);