wt-status.c: handle worktree renames
[gitweb.git] / builtin / pull.c
index d8aa26d8abe4e436f95f4476133967cf17f29988..42f0560252e000310aa8cc8e674890a09a90b471 100644 (file)
@@ -332,7 +332,7 @@ static int git_pull_config(const char *var, const char *value, void *cb)
  */
 static void get_merge_heads(struct oid_array *merge_heads)
 {
-       const char *filename = git_path("FETCH_HEAD");
+       const char *filename = git_path_fetch_head();
        FILE *fp;
        struct strbuf sb = STRBUF_INIT;
        struct object_id oid;
@@ -772,6 +772,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
        struct oid_array merge_heads = OID_ARRAY_INIT;
        struct object_id orig_head, curr_head;
        struct object_id rebase_fork_point;
+       int autostash;
 
        if (!getenv("GIT_REFLOG_ACTION"))
                set_reflog_message(argc, argv);
@@ -791,7 +792,7 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
        if (read_cache_unmerged())
                die_resolve_conflict("pull");
 
-       if (file_exists(git_path("MERGE_HEAD")))
+       if (file_exists(git_path_merge_head()))
                die_conclude_merge();
 
        if (get_oid("HEAD", &orig_head))
@@ -800,8 +801,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
        if (!opt_rebase && opt_autostash != -1)
                die(_("--[no-]autostash option is only valid with --rebase."));
 
+       autostash = config_autostash;
        if (opt_rebase) {
-               int autostash = config_autostash;
                if (opt_autostash != -1)
                        autostash = opt_autostash;
 
@@ -862,16 +863,18 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
                die(_("Cannot rebase onto multiple branches."));
 
        if (opt_rebase) {
-               struct commit_list *list = NULL;
-               struct commit *merge_head, *head;
-
-               head = lookup_commit_reference(orig_head.hash);
-               commit_list_insert(head, &list);
-               merge_head = lookup_commit_reference(merge_heads.oid[0].hash);
-               if (is_descendant_of(merge_head, list)) {
-                       /* we can fast-forward this without invoking rebase */
-                       opt_ff = "--ff-only";
-                       return run_merge();
+               if (!autostash) {
+                       struct commit_list *list = NULL;
+                       struct commit *merge_head, *head;
+
+                       head = lookup_commit_reference(orig_head.hash);
+                       commit_list_insert(head, &list);
+                       merge_head = lookup_commit_reference(merge_heads.oid[0].hash);
+                       if (is_descendant_of(merge_head, list)) {
+                               /* we can fast-forward this without invoking rebase */
+                               opt_ff = "--ff-only";
+                               return run_merge();
+                       }
                }
                return run_rebase(&curr_head, merge_heads.oid, &rebase_fork_point);
        } else {