fetch.c 27.9 KB
Newer Older
D
Daniel Barkalow 已提交
1 2 3 4 5 6 7
/*
 * "git fetch"
 */
#include "cache.h"
#include "refs.h"
#include "commit.h"
#include "builtin.h"
8
#include "string-list.h"
D
Daniel Barkalow 已提交
9 10
#include "remote.h"
#include "transport.h"
11
#include "run-command.h"
12
#include "parse-options.h"
13
#include "sigchain.h"
14
#include "transport.h"
15
#include "submodule.h"
16
#include "connected.h"
D
Daniel Barkalow 已提交
17

18
static const char * const builtin_fetch_usage[] = {
T
Tay Ray Chuan 已提交
19 20
	"git fetch [<options>] [<repository> [<refspec>...]]",
	"git fetch [<options>] <group>",
21
	"git fetch --multiple [<options>] [(<repository> | <group>)...]",
T
Tay Ray Chuan 已提交
22
	"git fetch --all [<options>]",
23 24
	NULL
};
D
Daniel Barkalow 已提交
25

26 27 28 29 30 31
enum {
	TAGS_UNSET = 0,
	TAGS_DEFAULT = 1,
	TAGS_SET = 2
};

J
Jay Soffian 已提交
32
static int all, append, dry_run, force, keep, multiple, prune, update_head_ok, verbosity;
33
static int progress = -1, recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
34
static int tags = TAGS_DEFAULT;
35
static const char *depth;
36
static const char *upload_pack;
37
static struct strbuf default_rla = STRBUF_INIT;
38
static struct transport *transport;
39
static const char *submodule_prefix = "";
40
static const char *recurse_submodules_default;
41

42 43 44 45 46 47 48 49 50 51 52 53 54
static int option_parse_recurse_submodules(const struct option *opt,
				   const char *arg, int unset)
{
	if (unset) {
		recurse_submodules = RECURSE_SUBMODULES_OFF;
	} else {
		if (arg)
			recurse_submodules = parse_fetch_recurse_submodules_arg(opt->long_name, arg);
		else
			recurse_submodules = RECURSE_SUBMODULES_ON;
	}
	return 0;
}
55

56
static struct option builtin_fetch_options[] = {
T
Tuncer Ayaz 已提交
57
	OPT__VERBOSITY(&verbosity),
58 59
	OPT_BOOLEAN(0, "all", &all,
		    "fetch from all remotes"),
60 61
	OPT_BOOLEAN('a', "append", &append,
		    "append to .git/FETCH_HEAD instead of overwriting"),
62
	OPT_STRING(0, "upload-pack", &upload_pack, "path",
63
		   "path to upload pack on remote end"),
R
René Scharfe 已提交
64
	OPT__FORCE(&force, "force overwrite of local branch"),
65 66
	OPT_BOOLEAN('m', "multiple", &multiple,
		    "fetch from multiple remotes"),
67 68
	OPT_SET_INT('t', "tags", &tags,
		    "fetch all tags and associated objects", TAGS_SET),
69 70
	OPT_SET_INT('n', NULL, &tags,
		    "do not fetch all tags (--no-tags)", TAGS_UNSET),
J
Jay Soffian 已提交
71
	OPT_BOOLEAN('p', "prune", &prune,
72
		    "prune remote-tracking branches no longer on remote"),
73
	{ OPTION_CALLBACK, 0, "recurse-submodules", NULL, "on-demand",
74
		    "control recursive fetching of submodules",
75
		    PARSE_OPT_OPTARG, option_parse_recurse_submodules },
J
Jay Soffian 已提交
76 77
	OPT_BOOLEAN(0, "dry-run", &dry_run,
		    "dry run"),
78 79 80
	OPT_BOOLEAN('k', "keep", &keep, "keep downloaded pack"),
	OPT_BOOLEAN('u', "update-head-ok", &update_head_ok,
		    "allow updating of HEAD ref"),
81
	OPT_BOOL(0, "progress", &progress, "force progress reporting"),
82
	OPT_STRING(0, "depth", &depth, "depth",
83
		   "deepen history of shallow clone"),
84
	{ OPTION_STRING, 0, "submodule-prefix", &submodule_prefix, "dir",
85
		   "prepend this to submodule path output", PARSE_OPT_HIDDEN },
86 87 88
	{ OPTION_STRING, 0, "recurse-submodules-default",
		   &recurse_submodules_default, NULL,
		   "default mode for recursion", PARSE_OPT_HIDDEN },
89 90 91
	OPT_END()
};

92 93 94 95 96 97 98 99 100
static void unlock_pack(void)
{
	if (transport)
		transport_unlock_pack(transport);
}

static void unlock_pack_on_signal(int signo)
{
	unlock_pack();
101
	sigchain_pop(signo);
102 103
	raise(signo);
}
D
Daniel Barkalow 已提交
104

105
static void add_merge_config(struct ref **head,
106
			   const struct ref *remote_refs,
107 108
		           struct branch *branch,
		           struct ref ***tail)
D
Daniel Barkalow 已提交
109
{
110
	int i;
D
Daniel Barkalow 已提交
111

112 113 114 115 116 117
	for (i = 0; i < branch->merge_nr; i++) {
		struct ref *rm, **old_tail = *tail;
		struct refspec refspec;

		for (rm = *head; rm; rm = rm->next) {
			if (branch_merge_matches(branch, i, rm->name)) {
D
Daniel Barkalow 已提交
118
				rm->merge = 1;
119 120
				break;
			}
D
Daniel Barkalow 已提交
121
		}
122 123 124
		if (rm)
			continue;

125
		/*
126
		 * Not fetched to a remote-tracking branch?  We need to fetch
127
		 * it anyway to allow this branch's "branch.$name.merge"
128
		 * to be honored by 'git pull', but we do not have to
129 130
		 * fail if branch.$name.merge is misconfigured to point
		 * at a nonexisting branch.  If we were indeed called by
131
		 * 'git pull', it will notice the misconfiguration because
132 133
		 * there is no entry in the resulting FETCH_HEAD marked
		 * for merging.
134
		 */
135
		memset(&refspec, 0, sizeof(refspec));
136
		refspec.src = branch->merge[i]->src;
137
		get_fetch_map(remote_refs, &refspec, tail, 1);
138 139
		for (rm = *old_tail; rm; rm = rm->next)
			rm->merge = 1;
D
Daniel Barkalow 已提交
140 141 142
	}
}

143 144 145 146
static void find_non_local_tags(struct transport *transport,
			struct ref **head,
			struct ref ***tail);

D
Daniel Barkalow 已提交
147 148 149 150 151 152 153 154 155
static struct ref *get_ref_map(struct transport *transport,
			       struct refspec *refs, int ref_count, int tags,
			       int *autotags)
{
	int i;
	struct ref *rm;
	struct ref *ref_map = NULL;
	struct ref **tail = &ref_map;

156
	const struct ref *remote_refs = transport_get_remote_refs(transport);
D
Daniel Barkalow 已提交
157

158
	if (ref_count || tags == TAGS_SET) {
D
Daniel Barkalow 已提交
159
		for (i = 0; i < ref_count; i++) {
160
			get_fetch_map(remote_refs, &refs[i], &tail, 0);
D
Daniel Barkalow 已提交
161 162 163 164 165 166
			if (refs[i].dst && refs[i].dst[0])
				*autotags = 1;
		}
		/* Merge everything on the command line, but not --tags */
		for (rm = ref_map; rm; rm = rm->next)
			rm->merge = 1;
167 168
		if (tags == TAGS_SET)
			get_fetch_map(remote_refs, tag_refspec, &tail, 0);
D
Daniel Barkalow 已提交
169 170 171
	} else {
		/* Use the defaults */
		struct remote *remote = transport->remote;
172 173
		struct branch *branch = branch_get(NULL);
		int has_merge = branch_has_merge_config(branch);
174 175
		if (remote &&
		    (remote->fetch_refspec_nr ||
176
		     /* Note: has_merge implies non-NULL branch->remote_name */
177
		     (has_merge && !strcmp(branch->remote_name, remote->name)))) {
D
Daniel Barkalow 已提交
178
			for (i = 0; i < remote->fetch_refspec_nr; i++) {
179
				get_fetch_map(remote_refs, &remote->fetch[i], &tail, 0);
D
Daniel Barkalow 已提交
180 181 182
				if (remote->fetch[i].dst &&
				    remote->fetch[i].dst[0])
					*autotags = 1;
183
				if (!i && !has_merge && ref_map &&
184
				    !remote->fetch[0].pattern)
185
					ref_map->merge = 1;
D
Daniel Barkalow 已提交
186
			}
187 188 189 190
			/*
			 * if the remote we're fetching from is the same
			 * as given in branch.<name>.remote, we add the
			 * ref given in branch.<name>.merge, too.
191 192
			 *
			 * Note: has_merge implies non-NULL branch->remote_name
193
			 */
194 195
			if (has_merge &&
			    !strcmp(branch->remote_name, remote->name))
196
				add_merge_config(&ref_map, remote_refs, branch, &tail);
D
Daniel Barkalow 已提交
197 198
		} else {
			ref_map = get_remote_ref(remote_refs, "HEAD");
199
			if (!ref_map)
200
				die(_("Couldn't find remote ref HEAD"));
D
Daniel Barkalow 已提交
201
			ref_map->merge = 1;
202
			tail = &ref_map->next;
D
Daniel Barkalow 已提交
203 204
		}
	}
205 206
	if (tags == TAGS_DEFAULT && *autotags)
		find_non_local_tags(transport, &ref_map, &tail);
207
	ref_remove_duplicates(ref_map);
D
Daniel Barkalow 已提交
208 209 210 211

	return ref_map;
}

212 213 214
#define STORE_REF_ERROR_OTHER 1
#define STORE_REF_ERROR_DF_CONFLICT 2

D
Daniel Barkalow 已提交
215 216 217 218 219 220 221 222
static int s_update_ref(const char *action,
			struct ref *ref,
			int check_old)
{
	char msg[1024];
	char *rla = getenv("GIT_REFLOG_ACTION");
	static struct ref_lock *lock;

J
Jay Soffian 已提交
223 224
	if (dry_run)
		return 0;
D
Daniel Barkalow 已提交
225
	if (!rla)
226
		rla = default_rla.buf;
D
Daniel Barkalow 已提交
227 228 229 230
	snprintf(msg, sizeof(msg), "%s: %s", rla, action);
	lock = lock_any_ref_for_update(ref->name,
				       check_old ? ref->old_sha1 : NULL, 0);
	if (!lock)
231 232
		return errno == ENOTDIR ? STORE_REF_ERROR_DF_CONFLICT :
					  STORE_REF_ERROR_OTHER;
D
Daniel Barkalow 已提交
233
	if (write_ref_sha1(lock, ref->new_sha1, msg) < 0)
234 235
		return errno == ENOTDIR ? STORE_REF_ERROR_DF_CONFLICT :
					  STORE_REF_ERROR_OTHER;
D
Daniel Barkalow 已提交
236 237 238
	return 0;
}

P
Pierre Habouzit 已提交
239
#define REFCOL_WIDTH  10
N
Nicolas Pitre 已提交
240

D
Daniel Barkalow 已提交
241
static int update_local_ref(struct ref *ref,
N
Nicolas Pitre 已提交
242
			    const char *remote,
243
			    const struct ref *remote_ref,
244
			    struct strbuf *display)
D
Daniel Barkalow 已提交
245 246 247 248
{
	struct commit *current = NULL, *updated;
	enum object_type type;
	struct branch *current_branch = branch_get(NULL);
249
	const char *pretty_ref = prettify_refname(ref->name);
D
Daniel Barkalow 已提交
250 251 252

	type = sha1_object_info(ref->new_sha1, NULL);
	if (type < 0)
253
		die(_("object %s not found"), sha1_to_hex(ref->new_sha1));
D
Daniel Barkalow 已提交
254 255

	if (!hashcmp(ref->old_sha1, ref->new_sha1)) {
T
Tuncer Ayaz 已提交
256
		if (verbosity > 0)
257 258 259 260
			strbuf_addf(display, "= %-*s %-*s -> %s",
				    TRANSPORT_SUMMARY_WIDTH,
				    _("[up to date]"), REFCOL_WIDTH,
				    remote, pretty_ref);
D
Daniel Barkalow 已提交
261 262 263
		return 0;
	}

264 265
	if (current_branch &&
	    !strcmp(ref->name, current_branch->name) &&
D
Daniel Barkalow 已提交
266 267 268 269 270 271
	    !(update_head_ok || is_bare_repository()) &&
	    !is_null_sha1(ref->old_sha1)) {
		/*
		 * If this is the head, and it's not okay to update
		 * the head, and the old value of the head isn't empty...
		 */
272 273 274 275
		strbuf_addf(display,
			    _("! %-*s %-*s -> %s  (can't fetch in current branch)"),
			    TRANSPORT_SUMMARY_WIDTH, _("[rejected]"),
			    REFCOL_WIDTH, remote, pretty_ref);
D
Daniel Barkalow 已提交
276 277 278 279 280
		return 1;
	}

	if (!is_null_sha1(ref->old_sha1) &&
	    !prefixcmp(ref->name, "refs/tags/")) {
281 282
		int r;
		r = s_update_ref("updating tag", ref, 0);
283 284 285 286 287
		strbuf_addf(display, "%c %-*s %-*s -> %s%s",
			    r ? '!' : '-',
			    TRANSPORT_SUMMARY_WIDTH, _("[tag update]"),
			    REFCOL_WIDTH, remote, pretty_ref,
			    r ? _("  (unable to update local ref)") : "");
288
		return r;
D
Daniel Barkalow 已提交
289 290
	}

291 292
	current = lookup_commit_reference_gently(ref->old_sha1, 1);
	updated = lookup_commit_reference_gently(ref->new_sha1, 1);
D
Daniel Barkalow 已提交
293
	if (!current || !updated) {
N
Nicolas Pitre 已提交
294 295
		const char *msg;
		const char *what;
296
		int r;
297 298 299 300 301 302 303
		/*
		 * Nicely describe the new ref we're fetching.
		 * Base this on the remote's ref name, as it's
		 * more likely to follow a standard layout.
		 */
		const char *name = remote_ref ? remote_ref->name : "";
		if (!prefixcmp(name, "refs/tags/")) {
D
Daniel Barkalow 已提交
304
			msg = "storing tag";
305
			what = _("[new tag]");
306
		} else if (!prefixcmp(name, "refs/heads/")) {
D
Daniel Barkalow 已提交
307
			msg = "storing head";
308
			what = _("[new branch]");
309 310 311
		} else {
			msg = "storing ref";
			what = _("[new ref]");
N
Nicolas Pitre 已提交
312 313
		}

314 315 316
		if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
		    (recurse_submodules != RECURSE_SUBMODULES_ON))
			check_for_new_submodule_commits(ref->new_sha1);
317
		r = s_update_ref(msg, ref, 0);
318 319 320 321 322
		strbuf_addf(display, "%c %-*s %-*s -> %s%s",
			    r ? '!' : '*',
			    TRANSPORT_SUMMARY_WIDTH, what,
			    REFCOL_WIDTH, remote, pretty_ref,
			    r ? _("  (unable to update local ref)") : "");
323
		return r;
D
Daniel Barkalow 已提交
324 325 326
	}

	if (in_merge_bases(current, &updated, 1)) {
N
Nicolas Pitre 已提交
327
		char quickref[83];
328
		int r;
N
Nicolas Pitre 已提交
329 330 331
		strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
		strcat(quickref, "..");
		strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
332 333 334
		if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
		    (recurse_submodules != RECURSE_SUBMODULES_ON))
			check_for_new_submodule_commits(ref->new_sha1);
335
		r = s_update_ref("fast-forward", ref, 1);
336 337 338 339 340
		strbuf_addf(display, "%c %-*s %-*s -> %s%s",
			    r ? '!' : ' ',
			    TRANSPORT_SUMMARY_WIDTH, quickref,
			    REFCOL_WIDTH, remote, pretty_ref,
			    r ? _("  (unable to update local ref)") : "");
341
		return r;
N
Nicolas Pitre 已提交
342 343
	} else if (force || ref->force) {
		char quickref[84];
344
		int r;
N
Nicolas Pitre 已提交
345 346 347
		strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
		strcat(quickref, "...");
		strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
348 349 350
		if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
		    (recurse_submodules != RECURSE_SUBMODULES_ON))
			check_for_new_submodule_commits(ref->new_sha1);
351
		r = s_update_ref("forced-update", ref, 1);
352 353 354 355 356
		strbuf_addf(display, "%c %-*s %-*s -> %s  (%s)",
			    r ? '!' : '+',
			    TRANSPORT_SUMMARY_WIDTH, quickref,
			    REFCOL_WIDTH, remote, pretty_ref,
			    r ? _("unable to update local ref") : _("forced update"));
357
		return r;
N
Nicolas Pitre 已提交
358
	} else {
359 360 361 362
		strbuf_addf(display, "! %-*s %-*s -> %s  %s",
			    TRANSPORT_SUMMARY_WIDTH, _("[rejected]"),
			    REFCOL_WIDTH, remote, pretty_ref,
			    _("(non-fast-forward)"));
D
Daniel Barkalow 已提交
363 364 365 366
		return 1;
	}
}

367
static int iterate_ref_map(void *cb_data, unsigned char sha1[20])
368
{
369 370
	struct ref **rm = cb_data;
	struct ref *ref = *rm;
371

372 373 374 375 376
	if (!ref)
		return -1; /* end of the list */
	*rm = ref->next;
	hashcpy(sha1, ref->old_sha1);
	return 0;
377 378
}

379
static int store_updated_refs(const char *raw_url, const char *remote_name,
380
		struct ref *ref_map)
D
Daniel Barkalow 已提交
381 382 383
{
	FILE *fp;
	struct commit *commit;
384 385
	int url_len, i, shown_url = 0, rc = 0;
	struct strbuf note = STRBUF_INIT;
D
Daniel Barkalow 已提交
386 387
	const char *what, *kind;
	struct ref *rm;
J
Jay Soffian 已提交
388
	char *url, *filename = dry_run ? "/dev/null" : git_path("FETCH_HEAD");
389
	int want_merge;
D
Daniel Barkalow 已提交
390

391 392
	fp = fopen(filename, "a");
	if (!fp)
393
		return error(_("cannot open %s: %s\n"), filename, strerror(errno));
394

395 396 397 398
	if (raw_url)
		url = transport_anonymize_url(raw_url);
	else
		url = xstrdup("foreign");
399

400
	rm = ref_map;
J
Junio C Hamano 已提交
401
	if (check_everything_connected(iterate_ref_map, 0, &rm)) {
402 403 404
		rc = error(_("%s did not send all necessary objects\n"), url);
		goto abort;
	}
405

406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428
	/*
	 * The first pass writes objects to be merged and then the
	 * second pass writes the rest, in order to allow using
	 * FETCH_HEAD as a refname to refer to the ref to be merged.
	 */
	for (want_merge = 1; 0 <= want_merge; want_merge--) {
		for (rm = ref_map; rm; rm = rm->next) {
			struct ref *ref = NULL;

			commit = lookup_commit_reference_gently(rm->old_sha1, 1);
			if (!commit)
				rm->merge = 0;

			if (rm->merge != want_merge)
				continue;

			if (rm->peer_ref) {
				ref = xcalloc(1, sizeof(*ref) + strlen(rm->peer_ref->name) + 1);
				strcpy(ref->name, rm->peer_ref->name);
				hashcpy(ref->old_sha1, rm->peer_ref->old_sha1);
				hashcpy(ref->new_sha1, rm->old_sha1);
				ref->force = rm->peer_ref->force;
			}
D
Daniel Barkalow 已提交
429 430


431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450
			if (!strcmp(rm->name, "HEAD")) {
				kind = "";
				what = "";
			}
			else if (!prefixcmp(rm->name, "refs/heads/")) {
				kind = "branch";
				what = rm->name + 11;
			}
			else if (!prefixcmp(rm->name, "refs/tags/")) {
				kind = "tag";
				what = rm->name + 10;
			}
			else if (!prefixcmp(rm->name, "refs/remotes/")) {
				kind = "remote-tracking branch";
				what = rm->name + 13;
			}
			else {
				kind = "";
				what = rm->name;
			}
D
Daniel Barkalow 已提交
451

452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477
			url_len = strlen(url);
			for (i = url_len - 1; url[i] == '/' && 0 <= i; i--)
				;
			url_len = i + 1;
			if (4 < i && !strncmp(".git", url + i - 3, 4))
				url_len = i - 3;

			strbuf_reset(&note);
			if (*what) {
				if (*kind)
					strbuf_addf(&note, "%s ", kind);
				strbuf_addf(&note, "'%s' of ", what);
			}
			fprintf(fp, "%s\t%s\t%s",
				sha1_to_hex(rm->old_sha1),
				rm->merge ? "" : "not-for-merge",
				note.buf);
			for (i = 0; i < url_len; ++i)
				if ('\n' == url[i])
					fputs("\\n", fp);
				else
					fputc(url[i], fp);
			fputc('\n', fp);

			strbuf_reset(&note);
			if (ref) {
478
				rc |= update_local_ref(ref, what, rm, &note);
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493
				free(ref);
			} else
				strbuf_addf(&note, "* %-*s %-*s -> FETCH_HEAD",
					    TRANSPORT_SUMMARY_WIDTH,
					    *kind ? kind : "branch",
					    REFCOL_WIDTH,
					    *what ? what : "HEAD");
			if (note.len) {
				if (verbosity >= 0 && !shown_url) {
					fprintf(stderr, _("From %.*s\n"),
							url_len, url);
					shown_url = 1;
				}
				if (verbosity >= 0)
					fprintf(stderr, " %s\n", note.buf);
N
Nicolas Pitre 已提交
494 495
			}
		}
D
Daniel Barkalow 已提交
496
	}
497

498
	if (rc & STORE_REF_ERROR_DF_CONFLICT)
499
		error(_("some local refs could not be updated; try running\n"
500
		      " 'git remote prune %s' to remove any old, conflicting "
501
		      "branches"), remote_name);
502 503

 abort:
504
	strbuf_release(&note);
505 506
	free(url);
	fclose(fp);
507
	return rc;
D
Daniel Barkalow 已提交
508 509
}

510 511
/*
 * We would want to bypass the object transfer altogether if
512
 * everything we are going to fetch already exists and is connected
513 514 515 516
 * locally.
 */
static int quickfetch(struct ref *ref_map)
{
517 518
	struct ref *rm = ref_map;

519 520 521 522 523 524 525 526 527
	/*
	 * If we are deepening a shallow clone we already have these
	 * objects reachable.  Running rev-list here will return with
	 * a good (0) exit status and we'll bypass the fetch that we
	 * really need to perform.  Claiming failure now will ensure
	 * we perform the network exchange to deepen our history.
	 */
	if (depth)
		return -1;
528
	return check_everything_connected(iterate_ref_map, 1, &rm);
529 530
}

D
Daniel Barkalow 已提交
531 532
static int fetch_refs(struct transport *transport, struct ref *ref_map)
{
533 534 535
	int ret = quickfetch(ref_map);
	if (ret)
		ret = transport_fetch_refs(transport, ref_map);
D
Daniel Barkalow 已提交
536
	if (!ret)
537 538 539
		ret |= store_updated_refs(transport->url,
				transport->remote->name,
				ref_map);
540
	transport_unlock_pack(transport);
D
Daniel Barkalow 已提交
541 542 543
	return ret;
}

544
static int prune_refs(struct refspec *refs, int ref_count, struct ref *ref_map)
J
Jay Soffian 已提交
545 546
{
	int result = 0;
547
	struct ref *ref, *stale_refs = get_stale_heads(refs, ref_count, ref_map);
J
Jay Soffian 已提交
548
	const char *dangling_msg = dry_run
549 550
		? _("   (%s will become dangling)")
		: _("   (%s has become dangling)");
J
Jay Soffian 已提交
551 552 553 554 555 556

	for (ref = stale_refs; ref; ref = ref->next) {
		if (!dry_run)
			result |= delete_ref(ref->name, NULL, 0);
		if (verbosity >= 0) {
			fprintf(stderr, " x %-*s %-*s -> %s\n",
557 558
				TRANSPORT_SUMMARY_WIDTH, _("[deleted]"),
				REFCOL_WIDTH, _("(none)"), prettify_refname(ref->name));
J
Jay Soffian 已提交
559 560 561 562 563 564 565
			warn_dangling_symref(stderr, dangling_msg, ref->name);
		}
	}
	free_refs(stale_refs);
	return result;
}

D
Daniel Barkalow 已提交
566 567 568
static int add_existing(const char *refname, const unsigned char *sha1,
			int flag, void *cbdata)
{
569
	struct string_list *list = (struct string_list *)cbdata;
570
	struct string_list_item *item = string_list_insert(list, refname);
571
	item->util = (void *)sha1;
D
Daniel Barkalow 已提交
572 573 574
	return 0;
}

575 576 577 578 579 580 581 582 583 584 585
static int will_fetch(struct ref **head, const unsigned char *sha1)
{
	struct ref *rm = *head;
	while (rm) {
		if (!hashcmp(rm->old_sha1, sha1))
			return 1;
		rm = rm->next;
	}
	return 0;
}

586 587 588
static void find_non_local_tags(struct transport *transport,
			struct ref **head,
			struct ref ***tail)
D
Daniel Barkalow 已提交
589
{
590 591
	struct string_list existing_refs = STRING_LIST_INIT_NODUP;
	struct string_list remote_refs = STRING_LIST_INIT_NODUP;
592
	const struct ref *ref;
593
	struct string_list_item *item = NULL;
D
Daniel Barkalow 已提交
594 595 596

	for_each_ref(add_existing, &existing_refs);
	for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {
597
		if (prefixcmp(ref->name, "refs/tags/"))
D
Daniel Barkalow 已提交
598 599
			continue;

600 601 602 603 604 605
		/*
		 * The peeled ref always follows the matching base
		 * ref, so if we see a peeled ref that we don't want
		 * to fetch then we can mark the ref entry in the list
		 * as one to ignore by setting util to NULL.
		 */
606
		if (!suffixcmp(ref->name, "^{}")) {
607 608 609 610 611 612 613
			if (item && !has_sha1_file(ref->old_sha1) &&
			    !will_fetch(head, ref->old_sha1) &&
			    !has_sha1_file(item->util) &&
			    !will_fetch(head, item->util))
				item->util = NULL;
			item = NULL;
			continue;
D
Daniel Barkalow 已提交
614 615
		}

616 617 618 619 620 621 622 623 624
		/*
		 * If item is non-NULL here, then we previously saw a
		 * ref not followed by a peeled reference, so we need
		 * to check if it is a lightweight tag that we want to
		 * fetch.
		 */
		if (item && !has_sha1_file(item->util) &&
		    !will_fetch(head, item->util))
			item->util = NULL;
D
Daniel Barkalow 已提交
625

626
		item = NULL;
D
Daniel Barkalow 已提交
627

628 629 630 631 632
		/* skip duplicates and refs that we already have */
		if (string_list_has_string(&remote_refs, ref->name) ||
		    string_list_has_string(&existing_refs, ref->name))
			continue;

633
		item = string_list_insert(&remote_refs, ref->name);
634
		item->util = (void *)ref->old_sha1;
D
Daniel Barkalow 已提交
635
	}
636
	string_list_clear(&existing_refs, 0);
637 638 639 640 641 642 643 644 645 646

	/*
	 * We may have a final lightweight tag that needs to be
	 * checked to see if it needs fetching.
	 */
	if (item && !has_sha1_file(item->util) &&
	    !will_fetch(head, item->util))
		item->util = NULL;

	/*
647 648
	 * For all the tags in the remote_refs string list,
	 * add them to the list of refs to be fetched
649
	 */
650 651 652 653 654 655 656 657 658 659 660
	for_each_string_list_item(item, &remote_refs) {
		/* Unless we have already decided to ignore this item... */
		if (item->util)
		{
			struct ref *rm = alloc_ref(item->string);
			rm->peer_ref = alloc_ref(item->string);
			hashcpy(rm->old_sha1, item->util);
			**tail = rm;
			*tail = &rm->next;
		}
	}
661 662

	string_list_clear(&remote_refs, 0);
D
Daniel Barkalow 已提交
663 664
}

665 666 667 668 669 670 671 672 673 674
static void check_not_current_branch(struct ref *ref_map)
{
	struct branch *current_branch = branch_get(NULL);

	if (is_bare_repository() || !current_branch)
		return;

	for (; ref_map; ref_map = ref_map->next)
		if (ref_map->peer_ref && !strcmp(current_branch->refname,
					ref_map->peer_ref->name))
675 676
			die(_("Refusing to fetch into current branch %s "
			    "of non-bare repository"), current_branch->refname);
677 678
}

679 680 681 682 683 684
static int truncate_fetch_head(void)
{
	char *filename = git_path("FETCH_HEAD");
	FILE *fp = fopen(filename, "w");

	if (!fp)
685
		return error(_("cannot open %s: %s\n"), filename, strerror(errno));
686 687 688 689
	fclose(fp);
	return 0;
}

D
Daniel Barkalow 已提交
690 691 692
static int do_fetch(struct transport *transport,
		    struct refspec *refs, int ref_count)
{
693
	struct string_list existing_refs = STRING_LIST_INIT_NODUP;
694
	struct string_list_item *peer_item = NULL;
695
	struct ref *ref_map;
D
Daniel Barkalow 已提交
696 697
	struct ref *rm;
	int autotags = (transport->remote->fetch_tags == 1);
698 699 700

	for_each_ref(add_existing, &existing_refs);

701 702 703 704 705 706
	if (tags == TAGS_DEFAULT) {
		if (transport->remote->fetch_tags == 2)
			tags = TAGS_SET;
		if (transport->remote->fetch_tags == -1)
			tags = TAGS_UNSET;
	}
D
Daniel Barkalow 已提交
707

708
	if (!transport->get_refs_list || !transport->fetch)
709
		die(_("Don't know how to fetch from %s"), transport->url);
D
Daniel Barkalow 已提交
710 711

	/* if not appending, truncate FETCH_HEAD */
J
Jay Soffian 已提交
712
	if (!append && !dry_run) {
713 714 715
		int errcode = truncate_fetch_head();
		if (errcode)
			return errcode;
716
	}
D
Daniel Barkalow 已提交
717 718

	ref_map = get_ref_map(transport, refs, ref_count, tags, &autotags);
719 720
	if (!update_head_ok)
		check_not_current_branch(ref_map);
D
Daniel Barkalow 已提交
721 722

	for (rm = ref_map; rm; rm = rm->next) {
723
		if (rm->peer_ref) {
724 725
			peer_item = string_list_lookup(&existing_refs,
						       rm->peer_ref->name);
726 727 728 729
			if (peer_item)
				hashcpy(rm->peer_ref->old_sha1,
					peer_item->util);
		}
D
Daniel Barkalow 已提交
730 731
	}

732 733
	if (tags == TAGS_DEFAULT && autotags)
		transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
D
Daniel Barkalow 已提交
734 735 736 737
	if (fetch_refs(transport, ref_map)) {
		free_refs(ref_map);
		return 1;
	}
738
	if (prune) {
739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757
		/* If --tags was specified, pretend the user gave us the canonical tags refspec */
		if (tags == TAGS_SET) {
			const char *tags_str = "refs/tags/*:refs/tags/*";
			struct refspec *tags_refspec, *refspec;

			/* Copy the refspec and add the tags to it */
			refspec = xcalloc(ref_count + 1, sizeof(struct refspec));
			tags_refspec = parse_fetch_refspec(1, &tags_str);
			memcpy(refspec, refs, ref_count * sizeof(struct refspec));
			memcpy(&refspec[ref_count], tags_refspec, sizeof(struct refspec));
			ref_count++;

			prune_refs(refspec, ref_count, ref_map);

			ref_count--;
			/* The rest of the strings belong to fetch_one */
			free_refspec(1, tags_refspec);
			free(refspec);
		} else if (ref_count) {
758
			prune_refs(refs, ref_count, ref_map);
759
		} else {
760
			prune_refs(transport->remote->fetch, transport->remote->fetch_refspec_nr, ref_map);
761
		}
762
	}
763
	free_refs(ref_map);
D
Daniel Barkalow 已提交
764 765 766

	/* if neither --no-tags nor --tags was specified, do automated tag
	 * following ... */
767
	if (tags == TAGS_DEFAULT && autotags) {
768 769 770
		struct ref **tail = &ref_map;
		ref_map = NULL;
		find_non_local_tags(transport, &ref_map, &tail);
D
Daniel Barkalow 已提交
771
		if (ref_map) {
772
			transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
D
Daniel Barkalow 已提交
773 774 775 776 777 778 779 780 781
			transport_set_option(transport, TRANS_OPT_DEPTH, "0");
			fetch_refs(transport, ref_map);
		}
		free_refs(ref_map);
	}

	return 0;
}

782 783 784 785
static void set_option(const char *name, const char *value)
{
	int r = transport_set_option(transport, name, value);
	if (r < 0)
786
		die(_("Option \"%s\" value \"%s\" is not valid for %s"),
787 788
			name, value, transport->url);
	if (r > 0)
789
		warning(_("Option \"%s\" is ignored for %s\n"),
790 791 792
			name, transport->url);
}

793 794 795
static int get_one_remote_for_fetch(struct remote *remote, void *priv)
{
	struct string_list *list = priv;
796
	if (!remote->skip_default_update)
797
		string_list_append(list, remote->name);
798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815
	return 0;
}

struct remote_group_data {
	const char *name;
	struct string_list *list;
};

static int get_remote_group(const char *key, const char *value, void *priv)
{
	struct remote_group_data *g = priv;

	if (!prefixcmp(key, "remotes.") &&
			!strcmp(key + 8, g->name)) {
		/* split list by white space */
		int space = strcspn(value, " \t\n");
		while (*value) {
			if (space > 1) {
816 817
				string_list_append(g->list,
						   xstrndup(value, space));
818 819 820 821 822 823 824 825 826 827 828 829
			}
			value += space + (value[space] != '\0');
			space = strcspn(value, " \t\n");
		}
	}

	return 0;
}

static int add_remote_or_group(const char *name, struct string_list *list)
{
	int prev_nr = list->nr;
830 831
	struct remote_group_data g;
	g.name = name; g.list = list;
832 833 834 835 836 837 838

	git_config(get_remote_group, &g);
	if (list->nr == prev_nr) {
		struct remote *remote;
		if (!remote_is_configured(name))
			return 0;
		remote = remote_get(name);
839
		string_list_append(list, remote->name);
840 841 842 843
	}
	return 1;
}

844
static void add_options_to_argv(int *argc, const char **argv)
845
{
J
Jay Soffian 已提交
846
	if (dry_run)
847
		argv[(*argc)++] = "--dry-run";
J
Jay Soffian 已提交
848
	if (prune)
849
		argv[(*argc)++] = "--prune";
850
	if (update_head_ok)
851
		argv[(*argc)++] = "--update-head-ok";
852
	if (force)
853
		argv[(*argc)++] = "--force";
854
	if (keep)
855
		argv[(*argc)++] = "--keep";
856
	if (recurse_submodules == RECURSE_SUBMODULES_ON)
857
		argv[(*argc)++] = "--recurse-submodules";
858 859
	else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
		argv[(*argc)++] = "--recurse-submodules=on-demand";
860
	if (verbosity >= 2)
861
		argv[(*argc)++] = "-v";
862
	if (verbosity >= 1)
863
		argv[(*argc)++] = "-v";
864
	else if (verbosity < 0)
865 866 867 868 869 870 871 872 873 874 875
		argv[(*argc)++] = "-q";

}

static int fetch_multiple(struct string_list *list)
{
	int i, result = 0;
	const char *argv[12] = { "fetch", "--append" };
	int argc = 2;

	add_options_to_argv(&argc, argv);
876

877 878 879 880 881 882
	if (!append && !dry_run) {
		int errcode = truncate_fetch_head();
		if (errcode)
			return errcode;
	}

883 884 885
	for (i = 0; i < list->nr; i++) {
		const char *name = list->items[i].string;
		argv[argc] = name;
886
		argv[argc + 1] = NULL;
887
		if (verbosity >= 0)
888
			printf(_("Fetching %s\n"), name);
889
		if (run_command_v_opt(argv, RUN_GIT_CMD)) {
890
			error(_("Could not fetch %s"), name);
891 892 893 894 895 896 897 898
			result = 1;
		}
	}

	return result;
}

static int fetch_one(struct remote *remote, int argc, const char **argv)
D
Daniel Barkalow 已提交
899
{
900
	int i;
D
Daniel Barkalow 已提交
901
	static const char **refs = NULL;
J
Jim Meyering 已提交
902
	struct refspec *refspec;
D
Daniel Barkalow 已提交
903
	int ref_nr = 0;
904
	int exit_code;
D
Daniel Barkalow 已提交
905

906
	if (!remote)
907 908
		die(_("No remote repository specified.  Please, specify either a URL or a\n"
		    "remote name from which new revisions should be fetched."));
909

910
	transport = transport_get(remote, NULL);
T
Tay Ray Chuan 已提交
911
	transport_set_verbosity(transport, verbosity, progress);
D
Daniel Barkalow 已提交
912
	if (upload_pack)
913
		set_option(TRANS_OPT_UPLOADPACK, upload_pack);
D
Daniel Barkalow 已提交
914
	if (keep)
915 916 917
		set_option(TRANS_OPT_KEEP, "yes");
	if (depth)
		set_option(TRANS_OPT_DEPTH, depth);
D
Daniel Barkalow 已提交
918

919
	if (argc > 0) {
D
Daniel Barkalow 已提交
920
		int j = 0;
921
		refs = xcalloc(argc + 1, sizeof(const char *));
922
		for (i = 0; i < argc; i++) {
D
Daniel Barkalow 已提交
923 924 925
			if (!strcmp(argv[i], "tag")) {
				char *ref;
				i++;
926
				if (i >= argc)
927
					die(_("You need to specify a tag name."));
D
Daniel Barkalow 已提交
928 929 930 931 932 933 934 935 936 937 938 939 940
				ref = xmalloc(strlen(argv[i]) * 2 + 22);
				strcpy(ref, "refs/tags/");
				strcat(ref, argv[i]);
				strcat(ref, ":refs/tags/");
				strcat(ref, argv[i]);
				refs[j++] = ref;
			} else
				refs[j++] = argv[i];
		}
		refs[j] = NULL;
		ref_nr = j;
	}

941
	sigchain_push_common(unlock_pack_on_signal);
942
	atexit(unlock_pack);
J
Jim Meyering 已提交
943 944
	refspec = parse_fetch_refspec(ref_nr, refs);
	exit_code = do_fetch(transport, refspec, ref_nr);
945
	free_refspec(ref_nr, refspec);
946 947 948
	transport_disconnect(transport);
	transport = NULL;
	return exit_code;
D
Daniel Barkalow 已提交
949
}
950 951 952 953

int cmd_fetch(int argc, const char **argv, const char *prefix)
{
	int i;
954
	struct string_list list = STRING_LIST_INIT_NODUP;
955 956 957
	struct remote *remote;
	int result = 0;

J
Jeff King 已提交
958 959
	packet_trace_identity("fetch");

960 961 962 963 964 965 966 967
	/* Record the command line for the reflog */
	strbuf_addstr(&default_rla, "fetch");
	for (i = 1; i < argc; i++)
		strbuf_addf(&default_rla, " %s", argv[i]);

	argc = parse_options(argc, argv, prefix,
			     builtin_fetch_options, builtin_fetch_usage, 0);

968 969 970 971 972 973 974 975 976
	if (recurse_submodules != RECURSE_SUBMODULES_OFF) {
		if (recurse_submodules_default) {
			int arg = parse_fetch_recurse_submodules_arg("--recurse-submodules-default", recurse_submodules_default);
			set_config_fetch_recurse_submodules(arg);
		}
		gitmodules_config();
		git_config(submodule_config, NULL);
	}

977 978
	if (all) {
		if (argc == 1)
979
			die(_("fetch --all does not take a repository argument"));
980
		else if (argc > 1)
981
			die(_("fetch --all does not make sense with refspecs"));
982 983 984 985 986 987
		(void) for_each_remote(get_one_remote_for_fetch, &list);
		result = fetch_multiple(&list);
	} else if (argc == 0) {
		/* No arguments -- use default remote */
		remote = remote_get(NULL);
		result = fetch_one(remote, argc, argv);
988 989 990 991
	} else if (multiple) {
		/* All arguments are assumed to be remotes or groups */
		for (i = 0; i < argc; i++)
			if (!add_remote_or_group(argv[i], &list))
992
				die(_("No such remote or remote group: %s"), argv[i]);
993
		result = fetch_multiple(&list);
994 995 996 997 998 999
	} else {
		/* Single remote or group */
		(void) add_remote_or_group(argv[0], &list);
		if (list.nr > 1) {
			/* More than one remote */
			if (argc > 1)
1000
				die(_("Fetching a group and specifying refspecs does not make sense"));
1001 1002 1003 1004 1005 1006 1007 1008
			result = fetch_multiple(&list);
		} else {
			/* Zero or one remotes */
			remote = remote_get(argv[0]);
			result = fetch_one(remote, argc-1, argv+1);
		}
	}

1009
	if (!result && (recurse_submodules != RECURSE_SUBMODULES_OFF)) {
1010 1011 1012 1013 1014
		const char *options[10];
		int num_options = 0;
		add_options_to_argv(&num_options, options);
		result = fetch_populated_submodules(num_options, options,
						    submodule_prefix,
1015
						    recurse_submodules,
1016 1017 1018
						    verbosity < 0);
	}

1019 1020 1021 1022 1023 1024
	/* All names were strdup()ed or strndup()ed */
	list.strdup_strings = 1;
	string_list_clear(&list, 0);

	return result;
}