Merge branch 'jc/doc-diff-filter-exclude'
[gitweb.git] / merge-recursive.c
index 7bbd4aea69a7fdd038da56b44397f339a0641bd0..a4a1195f61ea8ad8186726df1808a85b79415854 100644 (file)
@@ -202,12 +202,21 @@ static int add_cacheinfo(unsigned int mode, const struct object_id *oid,
                const char *path, int stage, int refresh, int options)
 {
        struct cache_entry *ce;
-       ce = make_cache_entry(mode, oid ? oid->hash : null_sha1, path, stage,
-                             (refresh ? (CE_MATCH_REFRESH |
-                                         CE_MATCH_IGNORE_MISSING) : 0 ));
+       int ret;
+
+       ce = make_cache_entry(mode, oid ? oid->hash : null_sha1, path, stage, 0);
        if (!ce)
                return error(_("addinfo_cache failed for path '%s'"), path);
-       return add_cache_entry(ce, options);
+
+       ret = add_cache_entry(ce, options);
+       if (refresh) {
+               struct cache_entry *nce;
+
+               nce = refresh_cache_entry(ce, CE_MATCH_REFRESH | CE_MATCH_IGNORE_MISSING);
+               if (nce != ce)
+                       ret = add_cache_entry(nce, options);
+       }
+       return ret;
 }
 
 static void init_tree_desc_from_tree(struct tree_desc *desc, struct tree *tree)
@@ -1982,11 +1991,11 @@ int merge_recursive(struct merge_options *o,
        return clean;
 }
 
-static struct commit *get_ref(const unsigned char *sha1, const char *name)
+static struct commit *get_ref(const struct object_id *oid, const char *name)
 {
        struct object *object;
 
-       object = deref_tag(parse_object(sha1), name, strlen(name));
+       object = deref_tag(parse_object(oid->hash), name, strlen(name));
        if (!object)
                return NULL;
        if (object->type == OBJ_TREE)
@@ -1999,10 +2008,10 @@ static struct commit *get_ref(const unsigned char *sha1, const char *name)
 }
 
 int merge_recursive_generic(struct merge_options *o,
-                           const unsigned char *head,
-                           const unsigned char *merge,
+                           const struct object_id *head,
+                           const struct object_id *merge,
                            int num_base_list,
-                           const unsigned char **base_list,
+                           const struct object_id **base_list,
                            struct commit **result)
 {
        int clean;
@@ -2015,9 +2024,9 @@ int merge_recursive_generic(struct merge_options *o,
                int i;
                for (i = 0; i < num_base_list; ++i) {
                        struct commit *base;
-                       if (!(base = get_ref(base_list[i], sha1_to_hex(base_list[i]))))
+                       if (!(base = get_ref(base_list[i], oid_to_hex(base_list[i]))))
                                return error(_("Could not parse object '%s'"),
-                                       sha1_to_hex(base_list[i]));
+                                       oid_to_hex(base_list[i]));
                        commit_list_insert(base, &ca);
                }
        }