Merge branch 'nd/the-index'
[git.git] / builtin / push.c
blobee1e8420271d93620de98f74a7a515151a69cb23
1 /*
2 * "git push"
3 */
4 #include "cache.h"
5 #include "config.h"
6 #include "refs.h"
7 #include "refspec.h"
8 #include "run-command.h"
9 #include "builtin.h"
10 #include "remote.h"
11 #include "transport.h"
12 #include "parse-options.h"
13 #include "submodule.h"
14 #include "submodule-config.h"
15 #include "send-pack.h"
16 #include "color.h"
18 static const char * const push_usage[] = {
19 N_("git push [<options>] [<repository> [<refspec>...]]"),
20 NULL,
23 static int push_use_color = -1;
24 static char push_colors[][COLOR_MAXLEN] = {
25 GIT_COLOR_RESET,
26 GIT_COLOR_RED, /* ERROR */
29 enum color_push {
30 PUSH_COLOR_RESET = 0,
31 PUSH_COLOR_ERROR = 1
34 static int parse_push_color_slot(const char *slot)
36 if (!strcasecmp(slot, "reset"))
37 return PUSH_COLOR_RESET;
38 if (!strcasecmp(slot, "error"))
39 return PUSH_COLOR_ERROR;
40 return -1;
43 static const char *push_get_color(enum color_push ix)
45 if (want_color_stderr(push_use_color))
46 return push_colors[ix];
47 return "";
50 static int thin = 1;
51 static int deleterefs;
52 static const char *receivepack;
53 static int verbosity;
54 static int progress = -1;
55 static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
56 static enum transport_family family;
58 static struct push_cas_option cas;
60 static struct refspec rs = REFSPEC_INIT_PUSH;
62 static struct string_list push_options_config = STRING_LIST_INIT_DUP;
64 static const char *map_refspec(const char *ref,
65 struct remote *remote, struct ref *local_refs)
67 struct ref *matched = NULL;
69 /* Does "ref" uniquely name our ref? */
70 if (count_refspec_match(ref, local_refs, &matched) != 1)
71 return ref;
73 if (remote->push.nr) {
74 struct refspec_item query;
75 memset(&query, 0, sizeof(struct refspec_item));
76 query.src = matched->name;
77 if (!query_refspecs(&remote->push, &query) && query.dst) {
78 struct strbuf buf = STRBUF_INIT;
79 strbuf_addf(&buf, "%s%s:%s",
80 query.force ? "+" : "",
81 query.src, query.dst);
82 return strbuf_detach(&buf, NULL);
86 if (push_default == PUSH_DEFAULT_UPSTREAM &&
87 starts_with(matched->name, "refs/heads/")) {
88 struct branch *branch = branch_get(matched->name + 11);
89 if (branch->merge_nr == 1 && branch->merge[0]->src) {
90 struct strbuf buf = STRBUF_INIT;
91 strbuf_addf(&buf, "%s:%s",
92 ref, branch->merge[0]->src);
93 return strbuf_detach(&buf, NULL);
97 return ref;
100 static void set_refspecs(const char **refs, int nr, const char *repo)
102 struct remote *remote = NULL;
103 struct ref *local_refs = NULL;
104 int i;
106 for (i = 0; i < nr; i++) {
107 const char *ref = refs[i];
108 if (!strcmp("tag", ref)) {
109 struct strbuf tagref = STRBUF_INIT;
110 if (nr <= ++i)
111 die(_("tag shorthand without <tag>"));
112 ref = refs[i];
113 if (deleterefs)
114 strbuf_addf(&tagref, ":refs/tags/%s", ref);
115 else
116 strbuf_addf(&tagref, "refs/tags/%s", ref);
117 ref = strbuf_detach(&tagref, NULL);
118 } else if (deleterefs) {
119 struct strbuf delref = STRBUF_INIT;
120 if (strchr(ref, ':'))
121 die(_("--delete only accepts plain target ref names"));
122 strbuf_addf(&delref, ":%s", ref);
123 ref = strbuf_detach(&delref, NULL);
124 } else if (!strchr(ref, ':')) {
125 if (!remote) {
126 /* lazily grab remote and local_refs */
127 remote = remote_get(repo);
128 local_refs = get_local_heads();
130 ref = map_refspec(ref, remote, local_refs);
132 refspec_append(&rs, ref);
136 static int push_url_of_remote(struct remote *remote, const char ***url_p)
138 if (remote->pushurl_nr) {
139 *url_p = remote->pushurl;
140 return remote->pushurl_nr;
142 *url_p = remote->url;
143 return remote->url_nr;
146 static NORETURN int die_push_simple(struct branch *branch, struct remote *remote) {
148 * There's no point in using shorten_unambiguous_ref here,
149 * as the ambiguity would be on the remote side, not what
150 * we have locally. Plus, this is supposed to be the simple
151 * mode. If the user is doing something crazy like setting
152 * upstream to a non-branch, we should probably be showing
153 * them the big ugly fully qualified ref.
155 const char *advice_maybe = "";
156 const char *short_upstream = branch->merge[0]->src;
158 skip_prefix(short_upstream, "refs/heads/", &short_upstream);
161 * Don't show advice for people who explicitly set
162 * push.default.
164 if (push_default == PUSH_DEFAULT_UNSPECIFIED)
165 advice_maybe = _("\n"
166 "To choose either option permanently, "
167 "see push.default in 'git help config'.");
168 die(_("The upstream branch of your current branch does not match\n"
169 "the name of your current branch. To push to the upstream branch\n"
170 "on the remote, use\n"
171 "\n"
172 " git push %s HEAD:%s\n"
173 "\n"
174 "To push to the branch of the same name on the remote, use\n"
175 "\n"
176 " git push %s HEAD\n"
177 "%s"),
178 remote->name, short_upstream,
179 remote->name, advice_maybe);
182 static const char message_detached_head_die[] =
183 N_("You are not currently on a branch.\n"
184 "To push the history leading to the current (detached HEAD)\n"
185 "state now, use\n"
186 "\n"
187 " git push %s HEAD:<name-of-remote-branch>\n");
189 static void setup_push_upstream(struct remote *remote, struct branch *branch,
190 int triangular, int simple)
192 struct strbuf refspec = STRBUF_INIT;
194 if (!branch)
195 die(_(message_detached_head_die), remote->name);
196 if (!branch->merge_nr || !branch->merge || !branch->remote_name)
197 die(_("The current branch %s has no upstream branch.\n"
198 "To push the current branch and set the remote as upstream, use\n"
199 "\n"
200 " git push --set-upstream %s %s\n"),
201 branch->name,
202 remote->name,
203 branch->name);
204 if (branch->merge_nr != 1)
205 die(_("The current branch %s has multiple upstream branches, "
206 "refusing to push."), branch->name);
207 if (triangular)
208 die(_("You are pushing to remote '%s', which is not the upstream of\n"
209 "your current branch '%s', without telling me what to push\n"
210 "to update which remote branch."),
211 remote->name, branch->name);
213 if (simple) {
214 /* Additional safety */
215 if (strcmp(branch->refname, branch->merge[0]->src))
216 die_push_simple(branch, remote);
219 strbuf_addf(&refspec, "%s:%s", branch->refname, branch->merge[0]->src);
220 refspec_append(&rs, refspec.buf);
223 static void setup_push_current(struct remote *remote, struct branch *branch)
225 struct strbuf refspec = STRBUF_INIT;
227 if (!branch)
228 die(_(message_detached_head_die), remote->name);
229 strbuf_addf(&refspec, "%s:%s", branch->refname, branch->refname);
230 refspec_append(&rs, refspec.buf);
233 static int is_workflow_triangular(struct remote *remote)
235 struct remote *fetch_remote = remote_get(NULL);
236 return (fetch_remote && fetch_remote != remote);
239 static void setup_default_push_refspecs(struct remote *remote)
241 struct branch *branch = branch_get(NULL);
242 int triangular = is_workflow_triangular(remote);
244 switch (push_default) {
245 default:
246 case PUSH_DEFAULT_MATCHING:
247 refspec_append(&rs, ":");
248 break;
250 case PUSH_DEFAULT_UNSPECIFIED:
251 case PUSH_DEFAULT_SIMPLE:
252 if (triangular)
253 setup_push_current(remote, branch);
254 else
255 setup_push_upstream(remote, branch, triangular, 1);
256 break;
258 case PUSH_DEFAULT_UPSTREAM:
259 setup_push_upstream(remote, branch, triangular, 0);
260 break;
262 case PUSH_DEFAULT_CURRENT:
263 setup_push_current(remote, branch);
264 break;
266 case PUSH_DEFAULT_NOTHING:
267 die(_("You didn't specify any refspecs to push, and "
268 "push.default is \"nothing\"."));
269 break;
273 static const char message_advice_pull_before_push[] =
274 N_("Updates were rejected because the tip of your current branch is behind\n"
275 "its remote counterpart. Integrate the remote changes (e.g.\n"
276 "'git pull ...') before pushing again.\n"
277 "See the 'Note about fast-forwards' in 'git push --help' for details.");
279 static const char message_advice_checkout_pull_push[] =
280 N_("Updates were rejected because a pushed branch tip is behind its remote\n"
281 "counterpart. Check out this branch and integrate the remote changes\n"
282 "(e.g. 'git pull ...') before pushing again.\n"
283 "See the 'Note about fast-forwards' in 'git push --help' for details.");
285 static const char message_advice_ref_fetch_first[] =
286 N_("Updates were rejected because the remote contains work that you do\n"
287 "not have locally. This is usually caused by another repository pushing\n"
288 "to the same ref. You may want to first integrate the remote changes\n"
289 "(e.g., 'git pull ...') before pushing again.\n"
290 "See the 'Note about fast-forwards' in 'git push --help' for details.");
292 static const char message_advice_ref_already_exists[] =
293 N_("Updates were rejected because the tag already exists in the remote.");
295 static const char message_advice_ref_needs_force[] =
296 N_("You cannot update a remote ref that points at a non-commit object,\n"
297 "or update a remote ref to make it point at a non-commit object,\n"
298 "without using the '--force' option.\n");
300 static void advise_pull_before_push(void)
302 if (!advice_push_non_ff_current || !advice_push_update_rejected)
303 return;
304 advise(_(message_advice_pull_before_push));
307 static void advise_checkout_pull_push(void)
309 if (!advice_push_non_ff_matching || !advice_push_update_rejected)
310 return;
311 advise(_(message_advice_checkout_pull_push));
314 static void advise_ref_already_exists(void)
316 if (!advice_push_already_exists || !advice_push_update_rejected)
317 return;
318 advise(_(message_advice_ref_already_exists));
321 static void advise_ref_fetch_first(void)
323 if (!advice_push_fetch_first || !advice_push_update_rejected)
324 return;
325 advise(_(message_advice_ref_fetch_first));
328 static void advise_ref_needs_force(void)
330 if (!advice_push_needs_force || !advice_push_update_rejected)
331 return;
332 advise(_(message_advice_ref_needs_force));
335 static int push_with_options(struct transport *transport, struct refspec *rs,
336 int flags)
338 int err;
339 unsigned int reject_reasons;
341 transport_set_verbosity(transport, verbosity, progress);
342 transport->family = family;
344 if (receivepack)
345 transport_set_option(transport,
346 TRANS_OPT_RECEIVEPACK, receivepack);
347 transport_set_option(transport, TRANS_OPT_THIN, thin ? "yes" : NULL);
349 if (!is_empty_cas(&cas)) {
350 if (!transport->smart_options)
351 die("underlying transport does not support --%s option",
352 CAS_OPT_NAME);
353 transport->smart_options->cas = &cas;
356 if (verbosity > 0)
357 fprintf(stderr, _("Pushing to %s\n"), transport->url);
358 err = transport_push(the_repository, transport,
359 rs, flags, &reject_reasons);
360 if (err != 0) {
361 fprintf(stderr, "%s", push_get_color(PUSH_COLOR_ERROR));
362 error(_("failed to push some refs to '%s'"), transport->url);
363 fprintf(stderr, "%s", push_get_color(PUSH_COLOR_RESET));
366 err |= transport_disconnect(transport);
367 if (!err)
368 return 0;
370 if (reject_reasons & REJECT_NON_FF_HEAD) {
371 advise_pull_before_push();
372 } else if (reject_reasons & REJECT_NON_FF_OTHER) {
373 advise_checkout_pull_push();
374 } else if (reject_reasons & REJECT_ALREADY_EXISTS) {
375 advise_ref_already_exists();
376 } else if (reject_reasons & REJECT_FETCH_FIRST) {
377 advise_ref_fetch_first();
378 } else if (reject_reasons & REJECT_NEEDS_FORCE) {
379 advise_ref_needs_force();
382 return 1;
385 static int do_push(const char *repo, int flags,
386 const struct string_list *push_options)
388 int i, errs;
389 struct remote *remote = pushremote_get(repo);
390 const char **url;
391 int url_nr;
392 struct refspec *push_refspec = &rs;
394 if (!remote) {
395 if (repo)
396 die(_("bad repository '%s'"), repo);
397 die(_("No configured push destination.\n"
398 "Either specify the URL from the command-line or configure a remote repository using\n"
399 "\n"
400 " git remote add <name> <url>\n"
401 "\n"
402 "and then push using the remote name\n"
403 "\n"
404 " git push <name>\n"));
407 if (remote->mirror)
408 flags |= (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE);
410 if (push_options->nr)
411 flags |= TRANSPORT_PUSH_OPTIONS;
413 if (!push_refspec->nr && !(flags & TRANSPORT_PUSH_ALL)) {
414 if (remote->push.nr) {
415 push_refspec = &remote->push;
416 } else if (!(flags & TRANSPORT_PUSH_MIRROR))
417 setup_default_push_refspecs(remote);
419 errs = 0;
420 url_nr = push_url_of_remote(remote, &url);
421 if (url_nr) {
422 for (i = 0; i < url_nr; i++) {
423 struct transport *transport =
424 transport_get(remote, url[i]);
425 if (flags & TRANSPORT_PUSH_OPTIONS)
426 transport->push_options = push_options;
427 if (push_with_options(transport, push_refspec, flags))
428 errs++;
430 } else {
431 struct transport *transport =
432 transport_get(remote, NULL);
433 if (flags & TRANSPORT_PUSH_OPTIONS)
434 transport->push_options = push_options;
435 if (push_with_options(transport, push_refspec, flags))
436 errs++;
438 return !!errs;
441 static int option_parse_recurse_submodules(const struct option *opt,
442 const char *arg, int unset)
444 int *recurse_submodules = opt->value;
446 if (unset)
447 *recurse_submodules = RECURSE_SUBMODULES_OFF;
448 else if (arg)
449 *recurse_submodules = parse_push_recurse_submodules_arg(opt->long_name, arg);
450 else
451 die("%s missing parameter", opt->long_name);
453 return 0;
456 static void set_push_cert_flags(int *flags, int v)
458 switch (v) {
459 case SEND_PACK_PUSH_CERT_NEVER:
460 *flags &= ~(TRANSPORT_PUSH_CERT_ALWAYS | TRANSPORT_PUSH_CERT_IF_ASKED);
461 break;
462 case SEND_PACK_PUSH_CERT_ALWAYS:
463 *flags |= TRANSPORT_PUSH_CERT_ALWAYS;
464 *flags &= ~TRANSPORT_PUSH_CERT_IF_ASKED;
465 break;
466 case SEND_PACK_PUSH_CERT_IF_ASKED:
467 *flags |= TRANSPORT_PUSH_CERT_IF_ASKED;
468 *flags &= ~TRANSPORT_PUSH_CERT_ALWAYS;
469 break;
474 static int git_push_config(const char *k, const char *v, void *cb)
476 const char *slot_name;
477 int *flags = cb;
478 int status;
480 status = git_gpg_config(k, v, NULL);
481 if (status)
482 return status;
484 if (!strcmp(k, "push.followtags")) {
485 if (git_config_bool(k, v))
486 *flags |= TRANSPORT_PUSH_FOLLOW_TAGS;
487 else
488 *flags &= ~TRANSPORT_PUSH_FOLLOW_TAGS;
489 return 0;
490 } else if (!strcmp(k, "push.gpgsign")) {
491 const char *value;
492 if (!git_config_get_value("push.gpgsign", &value)) {
493 switch (git_parse_maybe_bool(value)) {
494 case 0:
495 set_push_cert_flags(flags, SEND_PACK_PUSH_CERT_NEVER);
496 break;
497 case 1:
498 set_push_cert_flags(flags, SEND_PACK_PUSH_CERT_ALWAYS);
499 break;
500 default:
501 if (value && !strcasecmp(value, "if-asked"))
502 set_push_cert_flags(flags, SEND_PACK_PUSH_CERT_IF_ASKED);
503 else
504 return error("Invalid value for '%s'", k);
507 } else if (!strcmp(k, "push.recursesubmodules")) {
508 const char *value;
509 if (!git_config_get_value("push.recursesubmodules", &value))
510 recurse_submodules = parse_push_recurse_submodules_arg(k, value);
511 } else if (!strcmp(k, "submodule.recurse")) {
512 int val = git_config_bool(k, v) ?
513 RECURSE_SUBMODULES_ON_DEMAND : RECURSE_SUBMODULES_OFF;
514 recurse_submodules = val;
515 } else if (!strcmp(k, "push.pushoption")) {
516 if (!v)
517 return config_error_nonbool(k);
518 else
519 if (!*v)
520 string_list_clear(&push_options_config, 0);
521 else
522 string_list_append(&push_options_config, v);
523 return 0;
524 } else if (!strcmp(k, "color.push")) {
525 push_use_color = git_config_colorbool(k, v);
526 return 0;
527 } else if (skip_prefix(k, "color.push.", &slot_name)) {
528 int slot = parse_push_color_slot(slot_name);
529 if (slot < 0)
530 return 0;
531 if (!v)
532 return config_error_nonbool(k);
533 return color_parse(v, push_colors[slot]);
536 return git_default_config(k, v, NULL);
539 int cmd_push(int argc, const char **argv, const char *prefix)
541 int flags = 0;
542 int tags = 0;
543 int push_cert = -1;
544 int rc;
545 const char *repo = NULL; /* default repository */
546 struct string_list push_options_cmdline = STRING_LIST_INIT_DUP;
547 struct string_list *push_options;
548 const struct string_list_item *item;
550 struct option options[] = {
551 OPT__VERBOSITY(&verbosity),
552 OPT_STRING( 0 , "repo", &repo, N_("repository"), N_("repository")),
553 OPT_BIT( 0 , "all", &flags, N_("push all refs"), TRANSPORT_PUSH_ALL),
554 OPT_BIT( 0 , "mirror", &flags, N_("mirror all refs"),
555 (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE)),
556 OPT_BOOL('d', "delete", &deleterefs, N_("delete refs")),
557 OPT_BOOL( 0 , "tags", &tags, N_("push tags (can't be used with --all or --mirror)")),
558 OPT_BIT('n' , "dry-run", &flags, N_("dry run"), TRANSPORT_PUSH_DRY_RUN),
559 OPT_BIT( 0, "porcelain", &flags, N_("machine-readable output"), TRANSPORT_PUSH_PORCELAIN),
560 OPT_BIT('f', "force", &flags, N_("force updates"), TRANSPORT_PUSH_FORCE),
561 { OPTION_CALLBACK,
562 0, CAS_OPT_NAME, &cas, N_("<refname>:<expect>"),
563 N_("require old value of ref to be at this value"),
564 PARSE_OPT_OPTARG | PARSE_OPT_LITERAL_ARGHELP, parseopt_push_cas_option },
565 { OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules, "(check|on-demand|no)",
566 N_("control recursive pushing of submodules"),
567 PARSE_OPT_OPTARG, option_parse_recurse_submodules },
568 OPT_BOOL_F( 0 , "thin", &thin, N_("use thin pack"), PARSE_OPT_NOCOMPLETE),
569 OPT_STRING( 0 , "receive-pack", &receivepack, "receive-pack", N_("receive pack program")),
570 OPT_STRING( 0 , "exec", &receivepack, "receive-pack", N_("receive pack program")),
571 OPT_BIT('u', "set-upstream", &flags, N_("set upstream for git pull/status"),
572 TRANSPORT_PUSH_SET_UPSTREAM),
573 OPT_BOOL(0, "progress", &progress, N_("force progress reporting")),
574 OPT_BIT(0, "prune", &flags, N_("prune locally removed refs"),
575 TRANSPORT_PUSH_PRUNE),
576 OPT_BIT(0, "no-verify", &flags, N_("bypass pre-push hook"), TRANSPORT_PUSH_NO_HOOK),
577 OPT_BIT(0, "follow-tags", &flags, N_("push missing but relevant tags"),
578 TRANSPORT_PUSH_FOLLOW_TAGS),
579 { OPTION_CALLBACK,
580 0, "signed", &push_cert, "(yes|no|if-asked)", N_("GPG sign the push"),
581 PARSE_OPT_OPTARG, option_parse_push_signed },
582 OPT_BIT(0, "atomic", &flags, N_("request atomic transaction on remote side"), TRANSPORT_PUSH_ATOMIC),
583 OPT_STRING_LIST('o', "push-option", &push_options_cmdline, N_("server-specific"), N_("option to transmit")),
584 OPT_SET_INT('4', "ipv4", &family, N_("use IPv4 addresses only"),
585 TRANSPORT_FAMILY_IPV4),
586 OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"),
587 TRANSPORT_FAMILY_IPV6),
588 OPT_END()
591 packet_trace_identity("push");
592 git_config(git_push_config, &flags);
593 argc = parse_options(argc, argv, prefix, options, push_usage, 0);
594 push_options = (push_options_cmdline.nr
595 ? &push_options_cmdline
596 : &push_options_config);
597 set_push_cert_flags(&flags, push_cert);
599 if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))
600 die(_("--delete is incompatible with --all, --mirror and --tags"));
601 if (deleterefs && argc < 2)
602 die(_("--delete doesn't make sense without any refs"));
603 if (flags & TRANSPORT_PUSH_ALL) {
604 if (tags)
605 die(_("--all and --tags are incompatible"));
606 if (argc >= 2)
607 die(_("--all can't be combined with refspecs"));
609 if (flags & TRANSPORT_PUSH_MIRROR) {
610 if (tags)
611 die(_("--mirror and --tags are incompatible"));
612 if (argc >= 2)
613 die(_("--mirror can't be combined with refspecs"));
615 if ((flags & TRANSPORT_PUSH_ALL) && (flags & TRANSPORT_PUSH_MIRROR))
616 die(_("--all and --mirror are incompatible"));
618 if (recurse_submodules == RECURSE_SUBMODULES_CHECK)
619 flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK;
620 else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
621 flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
622 else if (recurse_submodules == RECURSE_SUBMODULES_ONLY)
623 flags |= TRANSPORT_RECURSE_SUBMODULES_ONLY;
625 if (tags)
626 refspec_append(&rs, "refs/tags/*");
628 if (argc > 0) {
629 repo = argv[0];
630 set_refspecs(argv + 1, argc - 1, repo);
633 for_each_string_list_item(item, push_options)
634 if (strchr(item->string, '\n'))
635 die(_("push options must not have new line characters"));
637 rc = do_push(repo, flags, push_options);
638 string_list_clear(&push_options_cmdline, 0);
639 string_list_clear(&push_options_config, 0);
640 if (rc == -1)
641 usage_with_options(push_usage, options);
642 else
643 return rc;