grep: accept relative paths outside current working directory
[gitweb.git] / unpack-trees.c
index 6847c2d966c5e1d0299b21682d6fef2637329071..a0697d24126b8cc894649da9a25e652bbea9dab7 100644 (file)
@@ -61,7 +61,7 @@ static void unlink_entry(struct cache_entry *ce)
 {
        if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
                return;
-       if (unlink(ce->name))
+       if (unlink_or_warn(ce->name))
                return;
        schedule_dir_for_removal(ce->name, ce_namelen(ce));
 }
@@ -87,7 +87,8 @@ static int check_updates(struct unpack_trees_options *o)
                cnt = 0;
        }
 
-       git_attr_set_direction(GIT_ATTR_CHECKOUT, &o->result);
+       if (o->update)
+               git_attr_set_direction(GIT_ATTR_CHECKOUT, &o->result);
        for (i = 0; i < index->cache_nr; i++) {
                struct cache_entry *ce = index->cache[i];
 
@@ -112,7 +113,8 @@ static int check_updates(struct unpack_trees_options *o)
                }
        }
        stop_progress(&progress);
-       git_attr_set_direction(GIT_ATTR_CHECKIN, NULL);
+       if (o->update)
+               git_attr_set_direction(GIT_ATTR_CHECKIN, NULL);
        return errs != 0;
 }
 
@@ -980,7 +982,7 @@ int oneway_merge(struct cache_entry **src, struct unpack_trees_options *o)
                return error("Cannot do a oneway merge of %d trees",
                             o->merge_size);
 
-       if (!a)
+       if (!a || a == o->df_conflict_entry)
                return deleted_entry(old, old, o);
 
        if (old && same(old, a)) {