Code

gitweb: Simplify (and fix) chop_str
[git.git] / rerere.c
index 5f332cb25c240d9a26ec48bd3daa36ae1ced9d7c..d1d3e753955146cadfaf6da274487a4a369f0521 100644 (file)
--- a/rerere.c
+++ b/rerere.c
@@ -5,6 +5,7 @@
 #include "dir.h"
 #include "resolve-undo.h"
 #include "ll-merge.h"
+#include "attr.h"
 
 /* if rerere_enabled == -1, fall back to detection of .git/rr-cache */
 static int rerere_enabled = -1;
@@ -221,7 +222,7 @@ static int handle_file(const char *path, unsigned char *sha1, const char *output
 {
        int hunk_no = 0;
        struct rerere_io_file io;
-       int marker_size = 7;
+       int marker_size = ll_merge_marker_size(path);
 
        memset(&io, 0, sizeof(io));
        io.io.getline = rerere_file_getline;
@@ -288,7 +289,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu
        struct cache_entry *ce;
        int pos, len, i, hunk_no;
        struct rerere_io_mem io;
-       int marker_size = 7;
+       int marker_size = ll_merge_marker_size(path);
 
        /*
         * Reproduce the conflicted merge in-core
@@ -324,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");
@@ -524,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;
 
@@ -532,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);
@@ -539,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);
@@ -585,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);