]> git.ipfire.org Git - thirdparty/git.git/blobdiff - ll-merge.c
Merge branch 'es/bugreport-with-hooks'
[thirdparty/git.git] / ll-merge.c
index 5b8d46aedee72aab8b027cf4310b4234268965b6..1ec0b959e015b20442aaddc417952f7a7a731d42 100644 (file)
@@ -32,6 +32,20 @@ struct ll_merge_driver {
        char *cmdline;
 };
 
+static struct attr_check *merge_attributes;
+static struct attr_check *load_merge_attributes(void)
+{
+       if (!merge_attributes)
+               merge_attributes = attr_check_initl("merge", "conflict-marker-size", NULL);
+       return merge_attributes;
+}
+
+void reset_merge_attributes(void)
+{
+       attr_check_free(merge_attributes);
+       merge_attributes = NULL;
+}
+
 /*
  * Built-in low-levels
  */
@@ -233,7 +247,7 @@ static int read_merge_config(const char *var, const char *value, void *cb)
 {
        struct ll_merge_driver *fn;
        const char *key, *name;
-       int namelen;
+       size_t namelen;
 
        if (!strcmp(var, "merge.default"))
                return git_config_string(&default_ll_merge, var, value);
@@ -354,7 +368,7 @@ int ll_merge(mmbuffer_t *result_buf,
             struct index_state *istate,
             const struct ll_merge_options *opts)
 {
-       static struct attr_check *check;
+       struct attr_check *check = load_merge_attributes();
        static const struct ll_merge_options default_opts;
        const char *ll_driver_name = NULL;
        int marker_size = DEFAULT_CONFLICT_MARKER_SIZE;
@@ -369,9 +383,6 @@ int ll_merge(mmbuffer_t *result_buf,
                normalize_file(theirs, path, istate);
        }
 
-       if (!check)
-               check = attr_check_initl("merge", "conflict-marker-size", NULL);
-
        git_check_attr(istate, path, check);
        ll_driver_name = check->items[0].value;
        if (check->items[1].value) {