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