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 341if(!(fp =fopen(filename,"r"))) 342die_errno(_("could not open '%s' for reading"), filename); 343while(strbuf_getline_lf(&sb, fp) != EOF) { 344if(get_oid_hex(sb.buf, &oid)) 345continue;/* invalid line: does not start with SHA1 */ 346if(starts_with(sb.buf + GIT_SHA1_HEXSZ,"\tnot-for-merge\t")) 347continue;/* ref is not-for-merge */ 348oid_array_append(merge_heads, &oid); 349} 350fclose(fp); 351strbuf_release(&sb); 352} 353 354/** 355 * Used by die_no_merge_candidates() as a for_each_remote() callback to 356 * retrieve the name of the remote if the repository only has one remote. 357 */ 358static intget_only_remote(struct remote *remote,void*cb_data) 359{ 360const char**remote_name = cb_data; 361 362if(*remote_name) 363return-1; 364 365*remote_name = remote->name; 366return0; 367} 368 369/** 370 * Dies with the appropriate reason for why there are no merge candidates: 371 * 372 * 1. We fetched from a specific remote, and a refspec was given, but it ended 373 * up not fetching anything. This is usually because the user provided a 374 * wildcard refspec which had no matches on the remote end. 375 * 376 * 2. We fetched from a non-default remote, but didn't specify a branch to 377 * merge. We can't use the configured one because it applies to the default 378 * remote, thus the user must specify the branches to merge. 379 * 380 * 3. We fetched from the branch's or repo's default remote, but: 381 * 382 * a. We are not on a branch, so there will never be a configured branch to 383 * merge with. 384 * 385 * b. We are on a branch, but there is no configured branch to merge with. 386 * 387 * 4. We fetched from the branch's or repo's default remote, but the configured 388 * branch to merge didn't get fetched. (Either it doesn't exist, or wasn't 389 * part of the configured fetch refspec.) 390 */ 391static void NORETURN die_no_merge_candidates(const char*repo,const char**refspecs) 392{ 393struct branch *curr_branch =branch_get("HEAD"); 394const char*remote = curr_branch ? curr_branch->remote_name : NULL; 395 396if(*refspecs) { 397if(opt_rebase) 398fprintf_ln(stderr,_("There is no candidate for rebasing against among the refs that you just fetched.")); 399else 400fprintf_ln(stderr,_("There are no candidates for merging among the refs that you just fetched.")); 401fprintf_ln(stderr,_("Generally this means that you provided a wildcard refspec which had no\n" 402"matches on the remote end.")); 403}else if(repo && curr_branch && (!remote ||strcmp(repo, remote))) { 404fprintf_ln(stderr,_("You asked to pull from the remote '%s', but did not specify\n" 405"a branch. Because this is not the default configured remote\n" 406"for your current branch, you must specify a branch on the command line."), 407 repo); 408}else if(!curr_branch) { 409fprintf_ln(stderr,_("You are not currently on a branch.")); 410if(opt_rebase) 411fprintf_ln(stderr,_("Please specify which branch you want to rebase against.")); 412else 413fprintf_ln(stderr,_("Please specify which branch you want to merge with.")); 414fprintf_ln(stderr,_("See git-pull(1) for details.")); 415fprintf(stderr,"\n"); 416fprintf_ln(stderr," git pull%s %s",_("<remote>"),_("<branch>")); 417fprintf(stderr,"\n"); 418}else if(!curr_branch->merge_nr) { 419const char*remote_name = NULL; 420 421if(for_each_remote(get_only_remote, &remote_name) || !remote_name) 422 remote_name =_("<remote>"); 423 424fprintf_ln(stderr,_("There is no tracking information for the current branch.")); 425if(opt_rebase) 426fprintf_ln(stderr,_("Please specify which branch you want to rebase against.")); 427else 428fprintf_ln(stderr,_("Please specify which branch you want to merge with.")); 429fprintf_ln(stderr,_("See git-pull(1) for details.")); 430fprintf(stderr,"\n"); 431fprintf_ln(stderr," git pull%s %s",_("<remote>"),_("<branch>")); 432fprintf(stderr,"\n"); 433fprintf_ln(stderr,_("If you wish to set tracking information for this branch you can do so with:")); 434fprintf(stderr,"\n"); 435fprintf_ln(stderr," git branch --set-upstream-to=%s/%s %s\n", 436 remote_name,_("<branch>"), curr_branch->name); 437}else 438fprintf_ln(stderr,_("Your configuration specifies to merge with the ref '%s'\n" 439"from the remote, but no such ref was fetched."), 440*curr_branch->merge_name); 441exit(1); 442} 443 444/** 445 * Parses argv into [<repo> [<refspecs>...]], returning their values in `repo` 446 * as a string and `refspecs` as a null-terminated array of strings. If `repo` 447 * is not provided in argv, it is set to NULL. 448 */ 449static voidparse_repo_refspecs(int argc,const char**argv,const char**repo, 450const char***refspecs) 451{ 452if(argc >0) { 453*repo = *argv++; 454 argc--; 455}else 456*repo = NULL; 457*refspecs = argv; 458} 459 460/** 461 * Runs git-fetch, returning its exit status. `repo` and `refspecs` are the 462 * repository and refspecs to fetch, or NULL if they are not provided. 463 */ 464static intrun_fetch(const char*repo,const char**refspecs) 465{ 466struct argv_array args = ARGV_ARRAY_INIT; 467int ret; 468 469argv_array_pushl(&args,"fetch","--update-head-ok", NULL); 470 471/* Shared options */ 472argv_push_verbosity(&args); 473if(opt_progress) 474argv_array_push(&args, opt_progress); 475 476/* Options passed to git-fetch */ 477if(opt_all) 478argv_array_push(&args, opt_all); 479if(opt_append) 480argv_array_push(&args, opt_append); 481if(opt_upload_pack) 482argv_array_push(&args, opt_upload_pack); 483argv_push_force(&args); 484if(opt_tags) 485argv_array_push(&args, opt_tags); 486if(opt_prune) 487argv_array_push(&args, opt_prune); 488if(opt_recurse_submodules) 489argv_array_push(&args, opt_recurse_submodules); 490if(max_children) 491argv_array_push(&args, max_children); 492if(opt_dry_run) 493argv_array_push(&args,"--dry-run"); 494if(opt_keep) 495argv_array_push(&args, opt_keep); 496if(opt_depth) 497argv_array_push(&args, opt_depth); 498if(opt_unshallow) 499argv_array_push(&args, opt_unshallow); 500if(opt_update_shallow) 501argv_array_push(&args, opt_update_shallow); 502if(opt_refmap) 503argv_array_push(&args, opt_refmap); 504 505if(repo) { 506argv_array_push(&args, repo); 507argv_array_pushv(&args, refspecs); 508}else if(*refspecs) 509die("BUG: refspecs without repo?"); 510 ret =run_command_v_opt(args.argv, RUN_GIT_CMD); 511argv_array_clear(&args); 512return ret; 513} 514 515/** 516 * "Pulls into void" by branching off merge_head. 517 */ 518static intpull_into_void(const struct object_id *merge_head, 519const struct object_id *curr_head) 520{ 521/* 522 * Two-way merge: we treat the index as based on an empty tree, 523 * and try to fast-forward to HEAD. This ensures we will not lose 524 * index/worktree changes that the user already made on the unborn 525 * branch. 526 */ 527if(checkout_fast_forward(EMPTY_TREE_SHA1_BIN, merge_head->hash,0)) 528return1; 529 530if(update_ref("initial pull","HEAD", merge_head->hash, curr_head->hash,0, UPDATE_REFS_DIE_ON_ERR)) 531return1; 532 533return0; 534} 535 536/** 537 * Runs git-merge, returning its exit status. 538 */ 539static intrun_merge(void) 540{ 541int ret; 542struct argv_array args = ARGV_ARRAY_INIT; 543 544argv_array_pushl(&args,"merge", NULL); 545 546/* Shared options */ 547argv_push_verbosity(&args); 548if(opt_progress) 549argv_array_push(&args, opt_progress); 550 551/* Options passed to git-merge */ 552if(opt_diffstat) 553argv_array_push(&args, opt_diffstat); 554if(opt_log) 555argv_array_push(&args, opt_log); 556if(opt_squash) 557argv_array_push(&args, opt_squash); 558if(opt_commit) 559argv_array_push(&args, opt_commit); 560if(opt_edit) 561argv_array_push(&args, opt_edit); 562if(opt_ff) 563argv_array_push(&args, opt_ff); 564if(opt_verify_signatures) 565argv_array_push(&args, opt_verify_signatures); 566argv_array_pushv(&args, opt_strategies.argv); 567argv_array_pushv(&args, opt_strategy_opts.argv); 568if(opt_gpg_sign) 569argv_array_push(&args, opt_gpg_sign); 570if(opt_allow_unrelated_histories >0) 571argv_array_push(&args,"--allow-unrelated-histories"); 572 573argv_array_push(&args,"FETCH_HEAD"); 574 ret =run_command_v_opt(args.argv, RUN_GIT_CMD); 575argv_array_clear(&args); 576return ret; 577} 578 579/** 580 * Returns remote's upstream branch for the current branch. If remote is NULL, 581 * the current branch's configured default remote is used. Returns NULL if 582 * `remote` does not name a valid remote, HEAD does not point to a branch, 583 * remote is not the branch's configured remote or the branch does not have any 584 * configured upstream branch. 585 */ 586static const char*get_upstream_branch(const char*remote) 587{ 588struct remote *rm; 589struct branch *curr_branch; 590const char*curr_branch_remote; 591 592 rm =remote_get(remote); 593if(!rm) 594return NULL; 595 596 curr_branch =branch_get("HEAD"); 597if(!curr_branch) 598return NULL; 599 600 curr_branch_remote =remote_for_branch(curr_branch, NULL); 601assert(curr_branch_remote); 602 603if(strcmp(curr_branch_remote, rm->name)) 604return NULL; 605 606returnbranch_get_upstream(curr_branch, NULL); 607} 608 609/** 610 * Derives the remote tracking branch from the remote and refspec. 611 * 612 * FIXME: The current implementation assumes the default mapping of 613 * refs/heads/<branch_name> to refs/remotes/<remote_name>/<branch_name>. 614 */ 615static const char*get_tracking_branch(const char*remote,const char*refspec) 616{ 617struct refspec *spec; 618const char*spec_src; 619const char*merge_branch; 620 621 spec =parse_fetch_refspec(1, &refspec); 622 spec_src = spec->src; 623if(!*spec_src || !strcmp(spec_src,"HEAD")) 624 spec_src ="HEAD"; 625else if(skip_prefix(spec_src,"heads/", &spec_src)) 626; 627else if(skip_prefix(spec_src,"refs/heads/", &spec_src)) 628; 629else if(starts_with(spec_src,"refs/") || 630starts_with(spec_src,"tags/") || 631starts_with(spec_src,"remotes/")) 632 spec_src =""; 633 634if(*spec_src) { 635if(!strcmp(remote,".")) 636 merge_branch =mkpath("refs/heads/%s", spec_src); 637else 638 merge_branch =mkpath("refs/remotes/%s/%s", remote, spec_src); 639}else 640 merge_branch = NULL; 641 642free_refspec(1, spec); 643return merge_branch; 644} 645 646/** 647 * Given the repo and refspecs, sets fork_point to the point at which the 648 * current branch forked from its remote tracking branch. Returns 0 on success, 649 * -1 on failure. 650 */ 651static intget_rebase_fork_point(struct object_id *fork_point,const char*repo, 652const char*refspec) 653{ 654int ret; 655struct branch *curr_branch; 656const char*remote_branch; 657struct child_process cp = CHILD_PROCESS_INIT; 658struct strbuf sb = STRBUF_INIT; 659 660 curr_branch =branch_get("HEAD"); 661if(!curr_branch) 662return-1; 663 664if(refspec) 665 remote_branch =get_tracking_branch(repo, refspec); 666else 667 remote_branch =get_upstream_branch(repo); 668 669if(!remote_branch) 670return-1; 671 672argv_array_pushl(&cp.args,"merge-base","--fork-point", 673 remote_branch, curr_branch->name, NULL); 674 cp.no_stdin =1; 675 cp.no_stderr =1; 676 cp.git_cmd =1; 677 678 ret =capture_command(&cp, &sb, GIT_SHA1_HEXSZ); 679if(ret) 680goto cleanup; 681 682 ret =get_oid_hex(sb.buf, fork_point); 683if(ret) 684goto cleanup; 685 686cleanup: 687strbuf_release(&sb); 688return ret ? -1:0; 689} 690 691/** 692 * Sets merge_base to the octopus merge base of curr_head, merge_head and 693 * fork_point. Returns 0 if a merge base is found, 1 otherwise. 694 */ 695static intget_octopus_merge_base(struct object_id *merge_base, 696const struct object_id *curr_head, 697const struct object_id *merge_head, 698const struct object_id *fork_point) 699{ 700struct commit_list *revs = NULL, *result; 701 702commit_list_insert(lookup_commit_reference(curr_head->hash), &revs); 703commit_list_insert(lookup_commit_reference(merge_head->hash), &revs); 704if(!is_null_oid(fork_point)) 705commit_list_insert(lookup_commit_reference(fork_point->hash), &revs); 706 707 result =reduce_heads(get_octopus_merge_bases(revs)); 708free_commit_list(revs); 709if(!result) 710return1; 711 712oidcpy(merge_base, &result->item->object.oid); 713return0; 714} 715 716/** 717 * Given the current HEAD SHA1, the merge head returned from git-fetch and the 718 * fork point calculated by get_rebase_fork_point(), runs git-rebase with the 719 * appropriate arguments and returns its exit status. 720 */ 721static intrun_rebase(const struct object_id *curr_head, 722const struct object_id *merge_head, 723const struct object_id *fork_point) 724{ 725int ret; 726struct object_id oct_merge_base; 727struct argv_array args = ARGV_ARRAY_INIT; 728 729if(!get_octopus_merge_base(&oct_merge_base, curr_head, merge_head, fork_point)) 730if(!is_null_oid(fork_point) && !oidcmp(&oct_merge_base, fork_point)) 731 fork_point = NULL; 732 733argv_array_push(&args,"rebase"); 734 735/* Shared options */ 736argv_push_verbosity(&args); 737 738/* Options passed to git-rebase */ 739if(opt_rebase == REBASE_PRESERVE) 740argv_array_push(&args,"--preserve-merges"); 741else if(opt_rebase == REBASE_INTERACTIVE) 742argv_array_push(&args,"--interactive"); 743if(opt_diffstat) 744argv_array_push(&args, opt_diffstat); 745argv_array_pushv(&args, opt_strategies.argv); 746argv_array_pushv(&args, opt_strategy_opts.argv); 747if(opt_gpg_sign) 748argv_array_push(&args, opt_gpg_sign); 749if(opt_autostash ==0) 750argv_array_push(&args,"--no-autostash"); 751else if(opt_autostash ==1) 752argv_array_push(&args,"--autostash"); 753if(opt_verify_signatures && 754!strcmp(opt_verify_signatures,"--verify-signatures")) 755warning(_("ignoring --verify-signatures for rebase")); 756 757argv_array_push(&args,"--onto"); 758argv_array_push(&args,oid_to_hex(merge_head)); 759 760if(fork_point && !is_null_oid(fork_point)) 761argv_array_push(&args,oid_to_hex(fork_point)); 762else 763argv_array_push(&args,oid_to_hex(merge_head)); 764 765 ret =run_command_v_opt(args.argv, RUN_GIT_CMD); 766argv_array_clear(&args); 767return ret; 768} 769 770intcmd_pull(int argc,const char**argv,const char*prefix) 771{ 772const char*repo, **refspecs; 773struct oid_array merge_heads = OID_ARRAY_INIT; 774struct object_id orig_head, curr_head; 775struct object_id rebase_fork_point; 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 804if(opt_rebase) { 805int autostash = config_autostash; 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.hash, curr_head.hash,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) { 866struct commit_list *list = NULL; 867struct commit *merge_head, *head; 868 869 head =lookup_commit_reference(orig_head.hash); 870commit_list_insert(head, &list); 871 merge_head =lookup_commit_reference(merge_heads.oid[0].hash); 872if(is_descendant_of(merge_head, list)) { 873/* we can fast-forward this without invoking rebase */ 874 opt_ff ="--ff-only"; 875returnrun_merge(); 876} 877returnrun_rebase(&curr_head, merge_heads.oid, &rebase_fork_point); 878}else{ 879returnrun_merge(); 880} 881}