From: Junio C Hamano Date: Mon, 5 Jun 2017 00:18:13 +0000 (+0900) Subject: Merge branch 'tb/pull-ff-rebase-autostash' X-Git-Tag: v2.14.0-rc0~105 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/35898eafab5dfd4ebc9daf2f4e422a1d4771954b?ds=inline;hp=-c Merge branch 'tb/pull-ff-rebase-autostash' "git pull --rebase --autostash" didn't auto-stash when the local history fast-forwards to the upstream. * tb/pull-ff-rebase-autostash: pull: ff --rebase --autostash works in dirty repo --- 35898eafab5dfd4ebc9daf2f4e422a1d4771954b diff --combined builtin/pull.c index 318c273eb3,42f0560252..da8b60fc85 --- a/builtin/pull.c +++ b/builtin/pull.c @@@ -523,7 -523,7 +523,7 @@@ static int pull_into_void(const struct * index/worktree changes that the user already made on the unborn * branch. */ - if (checkout_fast_forward(EMPTY_TREE_SHA1_BIN, merge_head->hash, 0)) + if (checkout_fast_forward(&empty_tree_oid, merge_head, 0)) return 1; if (update_ref("initial pull", "HEAD", merge_head->hash, curr_head->hash, 0, UPDATE_REFS_DIE_ON_ERR)) @@@ -698,10 -698,10 +698,10 @@@ static int get_octopus_merge_base(struc { struct commit_list *revs = NULL, *result; - commit_list_insert(lookup_commit_reference(curr_head->hash), &revs); - commit_list_insert(lookup_commit_reference(merge_head->hash), &revs); + commit_list_insert(lookup_commit_reference(curr_head), &revs); + commit_list_insert(lookup_commit_reference(merge_head), &revs); if (!is_null_oid(fork_point)) - commit_list_insert(lookup_commit_reference(fork_point->hash), &revs); + commit_list_insert(lookup_commit_reference(fork_point), &revs); result = reduce_heads(get_octopus_merge_bases(revs)); free_commit_list(revs); @@@ -772,6 -772,7 +772,7 @@@ int cmd_pull(int argc, const char **arg 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); @@@ -800,8 -801,8 +801,8 @@@ 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; @@@ -839,7 -840,7 +840,7 @@@ "fast-forwarding your working tree from\n" "commit %s."), oid_to_hex(&orig_head)); - if (checkout_fast_forward(orig_head.hash, curr_head.hash, 0)) + if (checkout_fast_forward(&orig_head, &curr_head, 0)) die(_("Cannot fast-forward your working tree.\n" "After making sure that you saved anything precious from\n" "$ git diff %s\n" @@@ -862,16 -863,18 +863,18 @@@ 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); - commit_list_insert(head, &list); - merge_head = lookup_commit_reference(&merge_heads.oid[0]); - 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); ++ head = lookup_commit_reference(&orig_head); + commit_list_insert(head, &list); - merge_head = lookup_commit_reference(merge_heads.oid[0].hash); ++ merge_head = lookup_commit_reference(&merge_heads.oid[0]); + 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 {