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 sha1_array *merge_heads) 334{ 335const char*filename =git_path("FETCH_HEAD"); 336FILE*fp; 337struct strbuf sb = STRBUF_INIT; 338unsigned char sha1[GIT_SHA1_RAWSZ]; 339 340if(!(fp =fopen(filename,"r"))) 341die_errno(_("could not open '%s' for reading"), filename); 342while(strbuf_getline_lf(&sb, fp) != EOF) { 343if(get_sha1_hex(sb.buf, sha1)) 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 */ 347sha1_array_append(merge_heads, sha1); 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 unsigned char*merge_head, 518const unsigned char*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_SHA1_BIN, merge_head,0)) 527return1; 528 529if(update_ref("initial pull","HEAD", merge_head, curr_head,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(unsigned char*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_sha1_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(unsigned char*merge_base, 695const unsigned char*curr_head, 696const unsigned char*merge_head, 697const unsigned char*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_sha1(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 711hashcpy(merge_base, result->item->object.oid.hash); 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 unsigned char*curr_head, 721const unsigned char*merge_head, 722const unsigned char*fork_point) 723{ 724int ret; 725unsigned char oct_merge_base[GIT_SHA1_RAWSZ]; 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_sha1(fork_point) && !hashcmp(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,sha1_to_hex(merge_head)); 758 759if(fork_point && !is_null_sha1(fork_point)) 760argv_array_push(&args,sha1_to_hex(fork_point)); 761else 762argv_array_push(&args,sha1_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 sha1_array merge_heads = SHA1_ARRAY_INIT; 773unsigned char orig_head[GIT_SHA1_RAWSZ], curr_head[GIT_SHA1_RAWSZ]; 774unsigned char rebase_fork_point[GIT_SHA1_RAWSZ]; 775 776if(!getenv("GIT_REFLOG_ACTION")) 777set_reflog_message(argc, argv); 778 779 argc =parse_options(argc, argv, prefix, pull_options, pull_usage,0); 780 781parse_repo_refspecs(argc, argv, &repo, &refspecs); 782 783if(!opt_ff) 784 opt_ff =xstrdup_or_null(config_get_ff()); 785 786if(opt_rebase <0) 787 opt_rebase =config_get_rebase(); 788 789git_config(git_pull_config, NULL); 790 791if(read_cache_unmerged()) 792die_resolve_conflict("pull"); 793 794if(file_exists(git_path("MERGE_HEAD"))) 795die_conclude_merge(); 796 797if(get_sha1("HEAD", orig_head)) 798hashclr(orig_head); 799 800if(!opt_rebase && opt_autostash != -1) 801die(_("--[no-]autostash option is only valid with --rebase.")); 802 803if(opt_rebase) { 804int autostash = config_autostash; 805if(opt_autostash != -1) 806 autostash = opt_autostash; 807 808if(is_null_sha1(orig_head) && !is_cache_unborn()) 809die(_("Updating an unborn branch with changes added to the index.")); 810 811if(!autostash) 812require_clean_work_tree(N_("pull with rebase"), 813_("please commit or stash them."),1,0); 814 815if(get_rebase_fork_point(rebase_fork_point, repo, *refspecs)) 816hashclr(rebase_fork_point); 817} 818 819if(run_fetch(repo, refspecs)) 820return1; 821 822if(opt_dry_run) 823return0; 824 825if(get_sha1("HEAD", curr_head)) 826hashclr(curr_head); 827 828if(!is_null_sha1(orig_head) && !is_null_sha1(curr_head) && 829hashcmp(orig_head, curr_head)) { 830/* 831 * The fetch involved updating the current branch. 832 * 833 * The working tree and the index file are still based on 834 * orig_head commit, but we are merging into curr_head. 835 * Update the working tree to match curr_head. 836 */ 837 838warning(_("fetch updated the current branch head.\n" 839"fast-forwarding your working tree from\n" 840"commit%s."),sha1_to_hex(orig_head)); 841 842if(checkout_fast_forward(orig_head, curr_head,0)) 843die(_("Cannot fast-forward your working tree.\n" 844"After making sure that you saved anything precious from\n" 845"$ git diff%s\n" 846"output, run\n" 847"$ git reset --hard\n" 848"to recover."),sha1_to_hex(orig_head)); 849} 850 851get_merge_heads(&merge_heads); 852 853if(!merge_heads.nr) 854die_no_merge_candidates(repo, refspecs); 855 856if(is_null_sha1(orig_head)) { 857if(merge_heads.nr >1) 858die(_("Cannot merge multiple branches into empty head.")); 859returnpull_into_void(*merge_heads.sha1, curr_head); 860}else if(opt_rebase) { 861if(merge_heads.nr >1) 862die(_("Cannot rebase onto multiple branches.")); 863returnrun_rebase(curr_head, *merge_heads.sha1, rebase_fork_point); 864}else 865returnrun_merge(); 866}