1/* 2 * Builtin "git pull" 3 * 4 * Based on git-pull.sh by Junio C Hamano 5 * 6 * Fetch one or more remote refs and merge it/them into the current HEAD. 7 */ 8#include"cache.h" 9#include"config.h" 10#include"builtin.h" 11#include"parse-options.h" 12#include"exec_cmd.h" 13#include"run-command.h" 14#include"sha1-array.h" 15#include"remote.h" 16#include"dir.h" 17#include"refs.h" 18#include"revision.h" 19#include"tempfile.h" 20#include"lockfile.h" 21#include"wt-status.h" 22 23enum rebase_type { 24 REBASE_INVALID = -1, 25 REBASE_FALSE =0, 26 REBASE_TRUE, 27 REBASE_PRESERVE, 28 REBASE_INTERACTIVE 29}; 30 31/** 32 * Parses the value of --rebase. If value is a false value, returns 33 * REBASE_FALSE. If value is a true value, returns REBASE_TRUE. If value is 34 * "preserve", returns REBASE_PRESERVE. If value is a invalid value, dies with 35 * a fatal error if fatal is true, otherwise returns REBASE_INVALID. 36 */ 37static enum rebase_type parse_config_rebase(const char*key,const char*value, 38int fatal) 39{ 40int v =git_config_maybe_bool("pull.rebase", value); 41 42if(!v) 43return REBASE_FALSE; 44else if(v >0) 45return REBASE_TRUE; 46else if(!strcmp(value,"preserve")) 47return REBASE_PRESERVE; 48else if(!strcmp(value,"interactive")) 49return REBASE_INTERACTIVE; 50 51if(fatal) 52die(_("Invalid value for%s:%s"), key, value); 53else 54error(_("Invalid value for%s:%s"), key, value); 55 56return REBASE_INVALID; 57} 58 59/** 60 * Callback for --rebase, which parses arg with parse_config_rebase(). 61 */ 62static intparse_opt_rebase(const struct option *opt,const char*arg,int unset) 63{ 64enum rebase_type *value = opt->value; 65 66if(arg) 67*value =parse_config_rebase("--rebase", arg,0); 68else 69*value = unset ? REBASE_FALSE : REBASE_TRUE; 70return*value == REBASE_INVALID ? -1:0; 71} 72 73static const char*const pull_usage[] = { 74N_("git pull [<options>] [<repository> [<refspec>...]]"), 75 NULL 76}; 77 78/* Shared options */ 79static int opt_verbosity; 80static char*opt_progress; 81 82/* Options passed to git-merge or git-rebase */ 83static enum rebase_type opt_rebase = -1; 84static char*opt_diffstat; 85static char*opt_log; 86static char*opt_squash; 87static char*opt_commit; 88static char*opt_edit; 89static char*opt_ff; 90static char*opt_verify_signatures; 91static int opt_autostash = -1; 92static int config_autostash; 93static struct argv_array opt_strategies = ARGV_ARRAY_INIT; 94static struct argv_array opt_strategy_opts = ARGV_ARRAY_INIT; 95static char*opt_gpg_sign; 96static int opt_allow_unrelated_histories; 97 98/* Options passed to git-fetch */ 99static char*opt_all; 100static char*opt_append; 101static char*opt_upload_pack; 102static int opt_force; 103static char*opt_tags; 104static char*opt_prune; 105static char*opt_recurse_submodules; 106static char*max_children; 107static int opt_dry_run; 108static char*opt_keep; 109static char*opt_depth; 110static char*opt_unshallow; 111static char*opt_update_shallow; 112static char*opt_refmap; 113 114static struct option pull_options[] = { 115/* Shared options */ 116OPT__VERBOSITY(&opt_verbosity), 117OPT_PASSTHRU(0,"progress", &opt_progress, NULL, 118N_("force progress reporting"), 119 PARSE_OPT_NOARG), 120 121/* Options passed to git-merge or git-rebase */ 122OPT_GROUP(N_("Options related to merging")), 123{ OPTION_CALLBACK,'r',"rebase", &opt_rebase, 124"false|true|preserve|interactive", 125N_("incorporate changes by rebasing rather than merging"), 126 PARSE_OPT_OPTARG, parse_opt_rebase }, 127OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL, 128N_("do not show a diffstat at the end of the merge"), 129 PARSE_OPT_NOARG | PARSE_OPT_NONEG), 130OPT_PASSTHRU(0,"stat", &opt_diffstat, NULL, 131N_("show a diffstat at the end of the merge"), 132 PARSE_OPT_NOARG), 133OPT_PASSTHRU(0,"summary", &opt_diffstat, NULL, 134N_("(synonym to --stat)"), 135 PARSE_OPT_NOARG | PARSE_OPT_HIDDEN), 136OPT_PASSTHRU(0,"log", &opt_log,N_("n"), 137N_("add (at most <n>) entries from shortlog to merge commit message"), 138 PARSE_OPT_OPTARG), 139OPT_PASSTHRU(0,"squash", &opt_squash, NULL, 140N_("create a single commit instead of doing a merge"), 141 PARSE_OPT_NOARG), 142OPT_PASSTHRU(0,"commit", &opt_commit, NULL, 143N_("perform a commit if the merge succeeds (default)"), 144 PARSE_OPT_NOARG), 145OPT_PASSTHRU(0,"edit", &opt_edit, NULL, 146N_("edit message before committing"), 147 PARSE_OPT_NOARG), 148OPT_PASSTHRU(0,"ff", &opt_ff, NULL, 149N_("allow fast-forward"), 150 PARSE_OPT_NOARG), 151OPT_PASSTHRU(0,"ff-only", &opt_ff, NULL, 152N_("abort if fast-forward is not possible"), 153 PARSE_OPT_NOARG | PARSE_OPT_NONEG), 154OPT_PASSTHRU(0,"verify-signatures", &opt_verify_signatures, NULL, 155N_("verify that the named commit has a valid GPG signature"), 156 PARSE_OPT_NOARG), 157OPT_BOOL(0,"autostash", &opt_autostash, 158N_("automatically stash/stash pop before and after rebase")), 159OPT_PASSTHRU_ARGV('s',"strategy", &opt_strategies,N_("strategy"), 160N_("merge strategy to use"), 1610), 162OPT_PASSTHRU_ARGV('X',"strategy-option", &opt_strategy_opts, 163N_("option=value"), 164N_("option for selected merge strategy"), 1650), 166OPT_PASSTHRU('S',"gpg-sign", &opt_gpg_sign,N_("key-id"), 167N_("GPG sign commit"), 168 PARSE_OPT_OPTARG), 169OPT_SET_INT(0,"allow-unrelated-histories", 170&opt_allow_unrelated_histories, 171N_("allow merging unrelated histories"),1), 172 173/* Options passed to git-fetch */ 174OPT_GROUP(N_("Options related to fetching")), 175OPT_PASSTHRU(0,"all", &opt_all, NULL, 176N_("fetch from all remotes"), 177 PARSE_OPT_NOARG), 178OPT_PASSTHRU('a',"append", &opt_append, NULL, 179N_("append to .git/FETCH_HEAD instead of overwriting"), 180 PARSE_OPT_NOARG), 181OPT_PASSTHRU(0,"upload-pack", &opt_upload_pack,N_("path"), 182N_("path to upload pack on remote end"), 1830), 184OPT__FORCE(&opt_force,N_("force overwrite of local branch")), 185OPT_PASSTHRU('t',"tags", &opt_tags, NULL, 186N_("fetch all tags and associated objects"), 187 PARSE_OPT_NOARG), 188OPT_PASSTHRU('p',"prune", &opt_prune, NULL, 189N_("prune remote-tracking branches no longer on remote"), 190 PARSE_OPT_NOARG), 191OPT_PASSTHRU(0,"recurse-submodules", &opt_recurse_submodules, 192N_("on-demand"), 193N_("control recursive fetching of submodules"), 194 PARSE_OPT_OPTARG), 195OPT_PASSTHRU('j',"jobs", &max_children,N_("n"), 196N_("number of submodules pulled in parallel"), 197 PARSE_OPT_OPTARG), 198OPT_BOOL(0,"dry-run", &opt_dry_run, 199N_("dry run")), 200OPT_PASSTHRU('k',"keep", &opt_keep, NULL, 201N_("keep downloaded pack"), 202 PARSE_OPT_NOARG), 203OPT_PASSTHRU(0,"depth", &opt_depth,N_("depth"), 204N_("deepen history of shallow clone"), 2050), 206OPT_PASSTHRU(0,"unshallow", &opt_unshallow, NULL, 207N_("convert to a complete repository"), 208 PARSE_OPT_NONEG | PARSE_OPT_NOARG), 209OPT_PASSTHRU(0,"update-shallow", &opt_update_shallow, NULL, 210N_("accept refs that update .git/shallow"), 211 PARSE_OPT_NOARG), 212OPT_PASSTHRU(0,"refmap", &opt_refmap,N_("refmap"), 213N_("specify fetch refmap"), 214 PARSE_OPT_NONEG), 215 216OPT_END() 217}; 218 219/** 220 * Pushes "-q" or "-v" switches into arr to match the opt_verbosity level. 221 */ 222static voidargv_push_verbosity(struct argv_array *arr) 223{ 224int verbosity; 225 226for(verbosity = opt_verbosity; verbosity >0; verbosity--) 227argv_array_push(arr,"-v"); 228 229for(verbosity = opt_verbosity; verbosity <0; verbosity++) 230argv_array_push(arr,"-q"); 231} 232 233/** 234 * Pushes "-f" switches into arr to match the opt_force level. 235 */ 236static voidargv_push_force(struct argv_array *arr) 237{ 238int force = opt_force; 239while(force-- >0) 240argv_array_push(arr,"-f"); 241} 242 243/** 244 * Sets the GIT_REFLOG_ACTION environment variable to the concatenation of argv 245 */ 246static voidset_reflog_message(int argc,const char**argv) 247{ 248int i; 249struct strbuf msg = STRBUF_INIT; 250 251for(i =0; i < argc; i++) { 252if(i) 253strbuf_addch(&msg,' '); 254strbuf_addstr(&msg, argv[i]); 255} 256 257setenv("GIT_REFLOG_ACTION", msg.buf,0); 258 259strbuf_release(&msg); 260} 261 262/** 263 * If pull.ff is unset, returns NULL. If pull.ff is "true", returns "--ff". If 264 * pull.ff is "false", returns "--no-ff". If pull.ff is "only", returns 265 * "--ff-only". Otherwise, if pull.ff is set to an invalid value, die with an 266 * error. 267 */ 268static const char*config_get_ff(void) 269{ 270const char*value; 271 272if(git_config_get_value("pull.ff", &value)) 273return NULL; 274 275switch(git_config_maybe_bool("pull.ff", value)) { 276case0: 277return"--no-ff"; 278case1: 279return"--ff"; 280} 281 282if(!strcmp(value,"only")) 283return"--ff-only"; 284 285die(_("Invalid value for pull.ff:%s"), value); 286} 287 288/** 289 * Returns the default configured value for --rebase. It first looks for the 290 * value of "branch.$curr_branch.rebase", where $curr_branch is the current 291 * branch, and if HEAD is detached or the configuration key does not exist, 292 * looks for the value of "pull.rebase". If both configuration keys do not 293 * exist, returns REBASE_FALSE. 294 */ 295static enum rebase_type config_get_rebase(void) 296{ 297struct branch *curr_branch =branch_get("HEAD"); 298const char*value; 299 300if(curr_branch) { 301char*key =xstrfmt("branch.%s.rebase", curr_branch->name); 302 303if(!git_config_get_value(key, &value)) { 304enum rebase_type ret =parse_config_rebase(key, value,1); 305free(key); 306return ret; 307} 308 309free(key); 310} 311 312if(!git_config_get_value("pull.rebase", &value)) 313returnparse_config_rebase("pull.rebase", value,1); 314 315return REBASE_FALSE; 316} 317 318/** 319 * Read config variables. 320 */ 321static intgit_pull_config(const char*var,const char*value,void*cb) 322{ 323if(!strcmp(var,"rebase.autostash")) { 324 config_autostash =git_config_bool(var, value); 325return0; 326} 327returngit_default_config(var, value, cb); 328} 329 330/** 331 * Appends merge candidates from FETCH_HEAD that are not marked not-for-merge 332 * into merge_heads. 333 */ 334static voidget_merge_heads(struct oid_array *merge_heads) 335{ 336const char*filename =git_path_fetch_head(); 337FILE*fp; 338struct strbuf sb = STRBUF_INIT; 339struct object_id oid; 340 341 fp =xfopen(filename,"r"); 342while(strbuf_getline_lf(&sb, fp) != EOF) { 343if(get_oid_hex(sb.buf, &oid)) 344continue;/* invalid line: does not start with SHA1 */ 345if(starts_with(sb.buf + GIT_SHA1_HEXSZ,"\tnot-for-merge\t")) 346continue;/* ref is not-for-merge */ 347oid_array_append(merge_heads, &oid); 348} 349fclose(fp); 350strbuf_release(&sb); 351} 352 353/** 354 * Used by die_no_merge_candidates() as a for_each_remote() callback to 355 * retrieve the name of the remote if the repository only has one remote. 356 */ 357static intget_only_remote(struct remote *remote,void*cb_data) 358{ 359const char**remote_name = cb_data; 360 361if(*remote_name) 362return-1; 363 364*remote_name = remote->name; 365return0; 366} 367 368/** 369 * Dies with the appropriate reason for why there are no merge candidates: 370 * 371 * 1. We fetched from a specific remote, and a refspec was given, but it ended 372 * up not fetching anything. This is usually because the user provided a 373 * wildcard refspec which had no matches on the remote end. 374 * 375 * 2. We fetched from a non-default remote, but didn't specify a branch to 376 * merge. We can't use the configured one because it applies to the default 377 * remote, thus the user must specify the branches to merge. 378 * 379 * 3. We fetched from the branch's or repo's default remote, but: 380 * 381 * a. We are not on a branch, so there will never be a configured branch to 382 * merge with. 383 * 384 * b. We are on a branch, but there is no configured branch to merge with. 385 * 386 * 4. We fetched from the branch's or repo's default remote, but the configured 387 * branch to merge didn't get fetched. (Either it doesn't exist, or wasn't 388 * part of the configured fetch refspec.) 389 */ 390static void NORETURN die_no_merge_candidates(const char*repo,const char**refspecs) 391{ 392struct branch *curr_branch =branch_get("HEAD"); 393const char*remote = curr_branch ? curr_branch->remote_name : NULL; 394 395if(*refspecs) { 396if(opt_rebase) 397fprintf_ln(stderr,_("There is no candidate for rebasing against among the refs that you just fetched.")); 398else 399fprintf_ln(stderr,_("There are no candidates for merging among the refs that you just fetched.")); 400fprintf_ln(stderr,_("Generally this means that you provided a wildcard refspec which had no\n" 401"matches on the remote end.")); 402}else if(repo && curr_branch && (!remote ||strcmp(repo, remote))) { 403fprintf_ln(stderr,_("You asked to pull from the remote '%s', but did not specify\n" 404"a branch. Because this is not the default configured remote\n" 405"for your current branch, you must specify a branch on the command line."), 406 repo); 407}else if(!curr_branch) { 408fprintf_ln(stderr,_("You are not currently on a branch.")); 409if(opt_rebase) 410fprintf_ln(stderr,_("Please specify which branch you want to rebase against.")); 411else 412fprintf_ln(stderr,_("Please specify which branch you want to merge with.")); 413fprintf_ln(stderr,_("See git-pull(1) for details.")); 414fprintf(stderr,"\n"); 415fprintf_ln(stderr," git pull%s %s",_("<remote>"),_("<branch>")); 416fprintf(stderr,"\n"); 417}else if(!curr_branch->merge_nr) { 418const char*remote_name = NULL; 419 420if(for_each_remote(get_only_remote, &remote_name) || !remote_name) 421 remote_name =_("<remote>"); 422 423fprintf_ln(stderr,_("There is no tracking information for the current branch.")); 424if(opt_rebase) 425fprintf_ln(stderr,_("Please specify which branch you want to rebase against.")); 426else 427fprintf_ln(stderr,_("Please specify which branch you want to merge with.")); 428fprintf_ln(stderr,_("See git-pull(1) for details.")); 429fprintf(stderr,"\n"); 430fprintf_ln(stderr," git pull%s %s",_("<remote>"),_("<branch>")); 431fprintf(stderr,"\n"); 432fprintf_ln(stderr,_("If you wish to set tracking information for this branch you can do so with:")); 433fprintf(stderr,"\n"); 434fprintf_ln(stderr," git branch --set-upstream-to=%s/%s %s\n", 435 remote_name,_("<branch>"), curr_branch->name); 436}else 437fprintf_ln(stderr,_("Your configuration specifies to merge with the ref '%s'\n" 438"from the remote, but no such ref was fetched."), 439*curr_branch->merge_name); 440exit(1); 441} 442 443/** 444 * Parses argv into [<repo> [<refspecs>...]], returning their values in `repo` 445 * as a string and `refspecs` as a null-terminated array of strings. If `repo` 446 * is not provided in argv, it is set to NULL. 447 */ 448static voidparse_repo_refspecs(int argc,const char**argv,const char**repo, 449const char***refspecs) 450{ 451if(argc >0) { 452*repo = *argv++; 453 argc--; 454}else 455*repo = NULL; 456*refspecs = argv; 457} 458 459/** 460 * Runs git-fetch, returning its exit status. `repo` and `refspecs` are the 461 * repository and refspecs to fetch, or NULL if they are not provided. 462 */ 463static intrun_fetch(const char*repo,const char**refspecs) 464{ 465struct argv_array args = ARGV_ARRAY_INIT; 466int ret; 467 468argv_array_pushl(&args,"fetch","--update-head-ok", NULL); 469 470/* Shared options */ 471argv_push_verbosity(&args); 472if(opt_progress) 473argv_array_push(&args, opt_progress); 474 475/* Options passed to git-fetch */ 476if(opt_all) 477argv_array_push(&args, opt_all); 478if(opt_append) 479argv_array_push(&args, opt_append); 480if(opt_upload_pack) 481argv_array_push(&args, opt_upload_pack); 482argv_push_force(&args); 483if(opt_tags) 484argv_array_push(&args, opt_tags); 485if(opt_prune) 486argv_array_push(&args, opt_prune); 487if(opt_recurse_submodules) 488argv_array_push(&args, opt_recurse_submodules); 489if(max_children) 490argv_array_push(&args, max_children); 491if(opt_dry_run) 492argv_array_push(&args,"--dry-run"); 493if(opt_keep) 494argv_array_push(&args, opt_keep); 495if(opt_depth) 496argv_array_push(&args, opt_depth); 497if(opt_unshallow) 498argv_array_push(&args, opt_unshallow); 499if(opt_update_shallow) 500argv_array_push(&args, opt_update_shallow); 501if(opt_refmap) 502argv_array_push(&args, opt_refmap); 503 504if(repo) { 505argv_array_push(&args, repo); 506argv_array_pushv(&args, refspecs); 507}else if(*refspecs) 508die("BUG: refspecs without repo?"); 509 ret =run_command_v_opt(args.argv, RUN_GIT_CMD); 510argv_array_clear(&args); 511return ret; 512} 513 514/** 515 * "Pulls into void" by branching off merge_head. 516 */ 517static intpull_into_void(const struct object_id *merge_head, 518const struct object_id *curr_head) 519{ 520/* 521 * Two-way merge: we treat the index as based on an empty tree, 522 * and try to fast-forward to HEAD. This ensures we will not lose 523 * index/worktree changes that the user already made on the unborn 524 * branch. 525 */ 526if(checkout_fast_forward(&empty_tree_oid, merge_head,0)) 527return1; 528 529if(update_ref("initial pull","HEAD", merge_head->hash, curr_head->hash,0, UPDATE_REFS_DIE_ON_ERR)) 530return1; 531 532return0; 533} 534 535/** 536 * Runs git-merge, returning its exit status. 537 */ 538static intrun_merge(void) 539{ 540int ret; 541struct argv_array args = ARGV_ARRAY_INIT; 542 543argv_array_pushl(&args,"merge", NULL); 544 545/* Shared options */ 546argv_push_verbosity(&args); 547if(opt_progress) 548argv_array_push(&args, opt_progress); 549 550/* Options passed to git-merge */ 551if(opt_diffstat) 552argv_array_push(&args, opt_diffstat); 553if(opt_log) 554argv_array_push(&args, opt_log); 555if(opt_squash) 556argv_array_push(&args, opt_squash); 557if(opt_commit) 558argv_array_push(&args, opt_commit); 559if(opt_edit) 560argv_array_push(&args, opt_edit); 561if(opt_ff) 562argv_array_push(&args, opt_ff); 563if(opt_verify_signatures) 564argv_array_push(&args, opt_verify_signatures); 565argv_array_pushv(&args, opt_strategies.argv); 566argv_array_pushv(&args, opt_strategy_opts.argv); 567if(opt_gpg_sign) 568argv_array_push(&args, opt_gpg_sign); 569if(opt_allow_unrelated_histories >0) 570argv_array_push(&args,"--allow-unrelated-histories"); 571 572argv_array_push(&args,"FETCH_HEAD"); 573 ret =run_command_v_opt(args.argv, RUN_GIT_CMD); 574argv_array_clear(&args); 575return ret; 576} 577 578/** 579 * Returns remote's upstream branch for the current branch. If remote is NULL, 580 * the current branch's configured default remote is used. Returns NULL if 581 * `remote` does not name a valid remote, HEAD does not point to a branch, 582 * remote is not the branch's configured remote or the branch does not have any 583 * configured upstream branch. 584 */ 585static const char*get_upstream_branch(const char*remote) 586{ 587struct remote *rm; 588struct branch *curr_branch; 589const char*curr_branch_remote; 590 591 rm =remote_get(remote); 592if(!rm) 593return NULL; 594 595 curr_branch =branch_get("HEAD"); 596if(!curr_branch) 597return NULL; 598 599 curr_branch_remote =remote_for_branch(curr_branch, NULL); 600assert(curr_branch_remote); 601 602if(strcmp(curr_branch_remote, rm->name)) 603return NULL; 604 605returnbranch_get_upstream(curr_branch, NULL); 606} 607 608/** 609 * Derives the remote tracking branch from the remote and refspec. 610 * 611 * FIXME: The current implementation assumes the default mapping of 612 * refs/heads/<branch_name> to refs/remotes/<remote_name>/<branch_name>. 613 */ 614static const char*get_tracking_branch(const char*remote,const char*refspec) 615{ 616struct refspec *spec; 617const char*spec_src; 618const char*merge_branch; 619 620 spec =parse_fetch_refspec(1, &refspec); 621 spec_src = spec->src; 622if(!*spec_src || !strcmp(spec_src,"HEAD")) 623 spec_src ="HEAD"; 624else if(skip_prefix(spec_src,"heads/", &spec_src)) 625; 626else if(skip_prefix(spec_src,"refs/heads/", &spec_src)) 627; 628else if(starts_with(spec_src,"refs/") || 629starts_with(spec_src,"tags/") || 630starts_with(spec_src,"remotes/")) 631 spec_src =""; 632 633if(*spec_src) { 634if(!strcmp(remote,".")) 635 merge_branch =mkpath("refs/heads/%s", spec_src); 636else 637 merge_branch =mkpath("refs/remotes/%s/%s", remote, spec_src); 638}else 639 merge_branch = NULL; 640 641free_refspec(1, spec); 642return merge_branch; 643} 644 645/** 646 * Given the repo and refspecs, sets fork_point to the point at which the 647 * current branch forked from its remote tracking branch. Returns 0 on success, 648 * -1 on failure. 649 */ 650static intget_rebase_fork_point(struct object_id *fork_point,const char*repo, 651const char*refspec) 652{ 653int ret; 654struct branch *curr_branch; 655const char*remote_branch; 656struct child_process cp = CHILD_PROCESS_INIT; 657struct strbuf sb = STRBUF_INIT; 658 659 curr_branch =branch_get("HEAD"); 660if(!curr_branch) 661return-1; 662 663if(refspec) 664 remote_branch =get_tracking_branch(repo, refspec); 665else 666 remote_branch =get_upstream_branch(repo); 667 668if(!remote_branch) 669return-1; 670 671argv_array_pushl(&cp.args,"merge-base","--fork-point", 672 remote_branch, curr_branch->name, NULL); 673 cp.no_stdin =1; 674 cp.no_stderr =1; 675 cp.git_cmd =1; 676 677 ret =capture_command(&cp, &sb, GIT_SHA1_HEXSZ); 678if(ret) 679goto cleanup; 680 681 ret =get_oid_hex(sb.buf, fork_point); 682if(ret) 683goto cleanup; 684 685cleanup: 686strbuf_release(&sb); 687return ret ? -1:0; 688} 689 690/** 691 * Sets merge_base to the octopus merge base of curr_head, merge_head and 692 * fork_point. Returns 0 if a merge base is found, 1 otherwise. 693 */ 694static intget_octopus_merge_base(struct object_id *merge_base, 695const struct object_id *curr_head, 696const struct object_id *merge_head, 697const struct object_id *fork_point) 698{ 699struct commit_list *revs = NULL, *result; 700 701commit_list_insert(lookup_commit_reference(curr_head), &revs); 702commit_list_insert(lookup_commit_reference(merge_head), &revs); 703if(!is_null_oid(fork_point)) 704commit_list_insert(lookup_commit_reference(fork_point), &revs); 705 706 result =reduce_heads(get_octopus_merge_bases(revs)); 707free_commit_list(revs); 708if(!result) 709return1; 710 711oidcpy(merge_base, &result->item->object.oid); 712return0; 713} 714 715/** 716 * Given the current HEAD SHA1, the merge head returned from git-fetch and the 717 * fork point calculated by get_rebase_fork_point(), runs git-rebase with the 718 * appropriate arguments and returns its exit status. 719 */ 720static intrun_rebase(const struct object_id *curr_head, 721const struct object_id *merge_head, 722const struct object_id *fork_point) 723{ 724int ret; 725struct object_id oct_merge_base; 726struct argv_array args = ARGV_ARRAY_INIT; 727 728if(!get_octopus_merge_base(&oct_merge_base, curr_head, merge_head, fork_point)) 729if(!is_null_oid(fork_point) && !oidcmp(&oct_merge_base, fork_point)) 730 fork_point = NULL; 731 732argv_array_push(&args,"rebase"); 733 734/* Shared options */ 735argv_push_verbosity(&args); 736 737/* Options passed to git-rebase */ 738if(opt_rebase == REBASE_PRESERVE) 739argv_array_push(&args,"--preserve-merges"); 740else if(opt_rebase == REBASE_INTERACTIVE) 741argv_array_push(&args,"--interactive"); 742if(opt_diffstat) 743argv_array_push(&args, opt_diffstat); 744argv_array_pushv(&args, opt_strategies.argv); 745argv_array_pushv(&args, opt_strategy_opts.argv); 746if(opt_gpg_sign) 747argv_array_push(&args, opt_gpg_sign); 748if(opt_autostash ==0) 749argv_array_push(&args,"--no-autostash"); 750else if(opt_autostash ==1) 751argv_array_push(&args,"--autostash"); 752if(opt_verify_signatures && 753!strcmp(opt_verify_signatures,"--verify-signatures")) 754warning(_("ignoring --verify-signatures for rebase")); 755 756argv_array_push(&args,"--onto"); 757argv_array_push(&args,oid_to_hex(merge_head)); 758 759if(fork_point && !is_null_oid(fork_point)) 760argv_array_push(&args,oid_to_hex(fork_point)); 761else 762argv_array_push(&args,oid_to_hex(merge_head)); 763 764 ret =run_command_v_opt(args.argv, RUN_GIT_CMD); 765argv_array_clear(&args); 766return ret; 767} 768 769intcmd_pull(int argc,const char**argv,const char*prefix) 770{ 771const char*repo, **refspecs; 772struct oid_array merge_heads = OID_ARRAY_INIT; 773struct object_id orig_head, curr_head; 774struct object_id rebase_fork_point; 775int autostash; 776 777if(!getenv("GIT_REFLOG_ACTION")) 778set_reflog_message(argc, argv); 779 780 argc =parse_options(argc, argv, prefix, pull_options, pull_usage,0); 781 782parse_repo_refspecs(argc, argv, &repo, &refspecs); 783 784if(!opt_ff) 785 opt_ff =xstrdup_or_null(config_get_ff()); 786 787if(opt_rebase <0) 788 opt_rebase =config_get_rebase(); 789 790git_config(git_pull_config, NULL); 791 792if(read_cache_unmerged()) 793die_resolve_conflict("pull"); 794 795if(file_exists(git_path_merge_head())) 796die_conclude_merge(); 797 798if(get_oid("HEAD", &orig_head)) 799oidclr(&orig_head); 800 801if(!opt_rebase && opt_autostash != -1) 802die(_("--[no-]autostash option is only valid with --rebase.")); 803 804 autostash = config_autostash; 805if(opt_rebase) { 806if(opt_autostash != -1) 807 autostash = opt_autostash; 808 809if(is_null_oid(&orig_head) && !is_cache_unborn()) 810die(_("Updating an unborn branch with changes added to the index.")); 811 812if(!autostash) 813require_clean_work_tree(N_("pull with rebase"), 814_("please commit or stash them."),1,0); 815 816if(get_rebase_fork_point(&rebase_fork_point, repo, *refspecs)) 817oidclr(&rebase_fork_point); 818} 819 820if(run_fetch(repo, refspecs)) 821return1; 822 823if(opt_dry_run) 824return0; 825 826if(get_oid("HEAD", &curr_head)) 827oidclr(&curr_head); 828 829if(!is_null_oid(&orig_head) && !is_null_oid(&curr_head) && 830oidcmp(&orig_head, &curr_head)) { 831/* 832 * The fetch involved updating the current branch. 833 * 834 * The working tree and the index file are still based on 835 * orig_head commit, but we are merging into curr_head. 836 * Update the working tree to match curr_head. 837 */ 838 839warning(_("fetch updated the current branch head.\n" 840"fast-forwarding your working tree from\n" 841"commit%s."),oid_to_hex(&orig_head)); 842 843if(checkout_fast_forward(&orig_head, &curr_head,0)) 844die(_("Cannot fast-forward your working tree.\n" 845"After making sure that you saved anything precious from\n" 846"$ git diff%s\n" 847"output, run\n" 848"$ git reset --hard\n" 849"to recover."),oid_to_hex(&orig_head)); 850} 851 852get_merge_heads(&merge_heads); 853 854if(!merge_heads.nr) 855die_no_merge_candidates(repo, refspecs); 856 857if(is_null_oid(&orig_head)) { 858if(merge_heads.nr >1) 859die(_("Cannot merge multiple branches into empty head.")); 860returnpull_into_void(merge_heads.oid, &curr_head); 861} 862if(opt_rebase && merge_heads.nr >1) 863die(_("Cannot rebase onto multiple branches.")); 864 865if(opt_rebase) { 866if(!autostash) { 867struct commit_list *list = NULL; 868struct commit *merge_head, *head; 869 870 head =lookup_commit_reference(&orig_head); 871commit_list_insert(head, &list); 872 merge_head =lookup_commit_reference(&merge_heads.oid[0]); 873if(is_descendant_of(merge_head, list)) { 874/* we can fast-forward this without invoking rebase */ 875 opt_ff ="--ff-only"; 876returnrun_merge(); 877} 878} 879returnrun_rebase(&curr_head, merge_heads.oid, &rebase_fork_point); 880}else{ 881returnrun_merge(); 882} 883}