fetch: plug two leaks on error exit in store_updated_refs
[git] / builtin / fetch.c
1 /*
2  * "git fetch"
3  */
4 #include "cache.h"
5 #include "refs.h"
6 #include "commit.h"
7 #include "builtin.h"
8 #include "string-list.h"
9 #include "remote.h"
10 #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
17 static const char * const builtin_fetch_usage[] = {
18         "git fetch [<options>] [<repository> [<refspec>...]]",
19         "git fetch [<options>] <group>",
20         "git fetch --multiple [<options>] [(<repository> | <group>)...]",
21         "git fetch --all [<options>]",
22         NULL
23 };
24
25 enum {
26         TAGS_UNSET = 0,
27         TAGS_DEFAULT = 1,
28         TAGS_SET = 2
29 };
30
31 static int all, append, dry_run, force, keep, multiple, prune, update_head_ok, verbosity;
32 static int progress, recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
33 static int tags = TAGS_DEFAULT;
34 static const char *depth;
35 static const char *upload_pack;
36 static struct strbuf default_rla = STRBUF_INIT;
37 static struct transport *transport;
38 static const char *submodule_prefix = "";
39 static const char *recurse_submodules_default;
40
41 static int option_parse_recurse_submodules(const struct option *opt,
42                                    const char *arg, int unset)
43 {
44         if (unset) {
45                 recurse_submodules = RECURSE_SUBMODULES_OFF;
46         } else {
47                 if (arg)
48                         recurse_submodules = parse_fetch_recurse_submodules_arg(opt->long_name, arg);
49                 else
50                         recurse_submodules = RECURSE_SUBMODULES_ON;
51         }
52         return 0;
53 }
54
55 static struct option builtin_fetch_options[] = {
56         OPT__VERBOSITY(&verbosity),
57         OPT_BOOLEAN(0, "all", &all,
58                     "fetch from all remotes"),
59         OPT_BOOLEAN('a', "append", &append,
60                     "append to .git/FETCH_HEAD instead of overwriting"),
61         OPT_STRING(0, "upload-pack", &upload_pack, "path",
62                    "path to upload pack on remote end"),
63         OPT__FORCE(&force, "force overwrite of local branch"),
64         OPT_BOOLEAN('m', "multiple", &multiple,
65                     "fetch from multiple remotes"),
66         OPT_SET_INT('t', "tags", &tags,
67                     "fetch all tags and associated objects", TAGS_SET),
68         OPT_SET_INT('n', NULL, &tags,
69                     "do not fetch all tags (--no-tags)", TAGS_UNSET),
70         OPT_BOOLEAN('p', "prune", &prune,
71                     "prune remote-tracking branches no longer on remote"),
72         { OPTION_CALLBACK, 0, "recurse-submodules", NULL, "on-demand",
73                     "control recursive fetching of submodules",
74                     PARSE_OPT_OPTARG, option_parse_recurse_submodules },
75         OPT_BOOLEAN(0, "dry-run", &dry_run,
76                     "dry run"),
77         OPT_BOOLEAN('k', "keep", &keep, "keep downloaded pack"),
78         OPT_BOOLEAN('u', "update-head-ok", &update_head_ok,
79                     "allow updating of HEAD ref"),
80         OPT_BOOLEAN(0, "progress", &progress, "force progress reporting"),
81         OPT_STRING(0, "depth", &depth, "depth",
82                    "deepen history of shallow clone"),
83         { OPTION_STRING, 0, "submodule-prefix", &submodule_prefix, "dir",
84                    "prepend this to submodule path output", PARSE_OPT_HIDDEN },
85         { OPTION_STRING, 0, "recurse-submodules-default",
86                    &recurse_submodules_default, NULL,
87                    "default mode for recursion", PARSE_OPT_HIDDEN },
88         OPT_END()
89 };
90
91 static void unlock_pack(void)
92 {
93         if (transport)
94                 transport_unlock_pack(transport);
95 }
96
97 static void unlock_pack_on_signal(int signo)
98 {
99         unlock_pack();
100         sigchain_pop(signo);
101         raise(signo);
102 }
103
104 static void add_merge_config(struct ref **head,
105                            const struct ref *remote_refs,
106                            struct branch *branch,
107                            struct ref ***tail)
108 {
109         int i;
110
111         for (i = 0; i < branch->merge_nr; i++) {
112                 struct ref *rm, **old_tail = *tail;
113                 struct refspec refspec;
114
115                 for (rm = *head; rm; rm = rm->next) {
116                         if (branch_merge_matches(branch, i, rm->name)) {
117                                 rm->merge = 1;
118                                 break;
119                         }
120                 }
121                 if (rm)
122                         continue;
123
124                 /*
125                  * Not fetched to a remote-tracking branch?  We need to fetch
126                  * it anyway to allow this branch's "branch.$name.merge"
127                  * to be honored by 'git pull', but we do not have to
128                  * fail if branch.$name.merge is misconfigured to point
129                  * at a nonexisting branch.  If we were indeed called by
130                  * 'git pull', it will notice the misconfiguration because
131                  * there is no entry in the resulting FETCH_HEAD marked
132                  * for merging.
133                  */
134                 memset(&refspec, 0, sizeof(refspec));
135                 refspec.src = branch->merge[i]->src;
136                 get_fetch_map(remote_refs, &refspec, tail, 1);
137                 for (rm = *old_tail; rm; rm = rm->next)
138                         rm->merge = 1;
139         }
140 }
141
142 static void find_non_local_tags(struct transport *transport,
143                         struct ref **head,
144                         struct ref ***tail);
145
146 static struct ref *get_ref_map(struct transport *transport,
147                                struct refspec *refs, int ref_count, int tags,
148                                int *autotags)
149 {
150         int i;
151         struct ref *rm;
152         struct ref *ref_map = NULL;
153         struct ref **tail = &ref_map;
154
155         const struct ref *remote_refs = transport_get_remote_refs(transport);
156
157         if (ref_count || tags == TAGS_SET) {
158                 for (i = 0; i < ref_count; i++) {
159                         get_fetch_map(remote_refs, &refs[i], &tail, 0);
160                         if (refs[i].dst && refs[i].dst[0])
161                                 *autotags = 1;
162                 }
163                 /* Merge everything on the command line, but not --tags */
164                 for (rm = ref_map; rm; rm = rm->next)
165                         rm->merge = 1;
166                 if (tags == TAGS_SET)
167                         get_fetch_map(remote_refs, tag_refspec, &tail, 0);
168         } else {
169                 /* Use the defaults */
170                 struct remote *remote = transport->remote;
171                 struct branch *branch = branch_get(NULL);
172                 int has_merge = branch_has_merge_config(branch);
173                 if (remote &&
174                     (remote->fetch_refspec_nr ||
175                      /* Note: has_merge implies non-NULL branch->remote_name */
176                      (has_merge && !strcmp(branch->remote_name, remote->name)))) {
177                         for (i = 0; i < remote->fetch_refspec_nr; i++) {
178                                 get_fetch_map(remote_refs, &remote->fetch[i], &tail, 0);
179                                 if (remote->fetch[i].dst &&
180                                     remote->fetch[i].dst[0])
181                                         *autotags = 1;
182                                 if (!i && !has_merge && ref_map &&
183                                     !remote->fetch[0].pattern)
184                                         ref_map->merge = 1;
185                         }
186                         /*
187                          * if the remote we're fetching from is the same
188                          * as given in branch.<name>.remote, we add the
189                          * ref given in branch.<name>.merge, too.
190                          *
191                          * Note: has_merge implies non-NULL branch->remote_name
192                          */
193                         if (has_merge &&
194                             !strcmp(branch->remote_name, remote->name))
195                                 add_merge_config(&ref_map, remote_refs, branch, &tail);
196                 } else {
197                         ref_map = get_remote_ref(remote_refs, "HEAD");
198                         if (!ref_map)
199                                 die(_("Couldn't find remote ref HEAD"));
200                         ref_map->merge = 1;
201                         tail = &ref_map->next;
202                 }
203         }
204         if (tags == TAGS_DEFAULT && *autotags)
205                 find_non_local_tags(transport, &ref_map, &tail);
206         ref_remove_duplicates(ref_map);
207
208         return ref_map;
209 }
210
211 #define STORE_REF_ERROR_OTHER 1
212 #define STORE_REF_ERROR_DF_CONFLICT 2
213
214 static int s_update_ref(const char *action,
215                         struct ref *ref,
216                         int check_old)
217 {
218         char msg[1024];
219         char *rla = getenv("GIT_REFLOG_ACTION");
220         static struct ref_lock *lock;
221
222         if (dry_run)
223                 return 0;
224         if (!rla)
225                 rla = default_rla.buf;
226         snprintf(msg, sizeof(msg), "%s: %s", rla, action);
227         lock = lock_any_ref_for_update(ref->name,
228                                        check_old ? ref->old_sha1 : NULL, 0);
229         if (!lock)
230                 return errno == ENOTDIR ? STORE_REF_ERROR_DF_CONFLICT :
231                                           STORE_REF_ERROR_OTHER;
232         if (write_ref_sha1(lock, ref->new_sha1, msg) < 0)
233                 return errno == ENOTDIR ? STORE_REF_ERROR_DF_CONFLICT :
234                                           STORE_REF_ERROR_OTHER;
235         return 0;
236 }
237
238 #define REFCOL_WIDTH  10
239
240 static int update_local_ref(struct ref *ref,
241                             const char *remote,
242                             char *display)
243 {
244         struct commit *current = NULL, *updated;
245         enum object_type type;
246         struct branch *current_branch = branch_get(NULL);
247         const char *pretty_ref = prettify_refname(ref->name);
248
249         *display = 0;
250         type = sha1_object_info(ref->new_sha1, NULL);
251         if (type < 0)
252                 die(_("object %s not found"), sha1_to_hex(ref->new_sha1));
253
254         if (!hashcmp(ref->old_sha1, ref->new_sha1)) {
255                 if (verbosity > 0)
256                         sprintf(display, "= %-*s %-*s -> %s", TRANSPORT_SUMMARY_WIDTH,
257                                 _("[up to date]"), REFCOL_WIDTH, remote,
258                                 pretty_ref);
259                 return 0;
260         }
261
262         if (current_branch &&
263             !strcmp(ref->name, current_branch->name) &&
264             !(update_head_ok || is_bare_repository()) &&
265             !is_null_sha1(ref->old_sha1)) {
266                 /*
267                  * If this is the head, and it's not okay to update
268                  * the head, and the old value of the head isn't empty...
269                  */
270                 sprintf(display, _("! %-*s %-*s -> %s  (can't fetch in current branch)"),
271                         TRANSPORT_SUMMARY_WIDTH, _("[rejected]"), REFCOL_WIDTH, remote,
272                         pretty_ref);
273                 return 1;
274         }
275
276         if (!is_null_sha1(ref->old_sha1) &&
277             !prefixcmp(ref->name, "refs/tags/")) {
278                 int r;
279                 r = s_update_ref("updating tag", ref, 0);
280                 sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '-',
281                         TRANSPORT_SUMMARY_WIDTH, _("[tag update]"), REFCOL_WIDTH, remote,
282                         pretty_ref, r ? _("  (unable to update local ref)") : "");
283                 return r;
284         }
285
286         current = lookup_commit_reference_gently(ref->old_sha1, 1);
287         updated = lookup_commit_reference_gently(ref->new_sha1, 1);
288         if (!current || !updated) {
289                 const char *msg;
290                 const char *what;
291                 int r;
292                 if (!strncmp(ref->name, "refs/tags/", 10)) {
293                         msg = "storing tag";
294                         what = _("[new tag]");
295                 }
296                 else {
297                         msg = "storing head";
298                         what = _("[new branch]");
299                         if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
300                             (recurse_submodules != RECURSE_SUBMODULES_ON))
301                                 check_for_new_submodule_commits(ref->new_sha1);
302                 }
303
304                 r = s_update_ref(msg, ref, 0);
305                 sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '*',
306                         TRANSPORT_SUMMARY_WIDTH, what, REFCOL_WIDTH, remote, pretty_ref,
307                         r ? _("  (unable to update local ref)") : "");
308                 return r;
309         }
310
311         if (in_merge_bases(current, &updated, 1)) {
312                 char quickref[83];
313                 int r;
314                 strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
315                 strcat(quickref, "..");
316                 strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
317                 if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
318                     (recurse_submodules != RECURSE_SUBMODULES_ON))
319                         check_for_new_submodule_commits(ref->new_sha1);
320                 r = s_update_ref("fast-forward", ref, 1);
321                 sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : ' ',
322                         TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
323                         pretty_ref, r ? _("  (unable to update local ref)") : "");
324                 return r;
325         } else if (force || ref->force) {
326                 char quickref[84];
327                 int r;
328                 strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
329                 strcat(quickref, "...");
330                 strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
331                 if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
332                     (recurse_submodules != RECURSE_SUBMODULES_ON))
333                         check_for_new_submodule_commits(ref->new_sha1);
334                 r = s_update_ref("forced-update", ref, 1);
335                 sprintf(display, "%c %-*s %-*s -> %s  (%s)", r ? '!' : '+',
336                         TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
337                         pretty_ref,
338                         r ? _("unable to update local ref") : _("forced update"));
339                 return r;
340         } else {
341                 sprintf(display, "! %-*s %-*s -> %s  %s",
342                         TRANSPORT_SUMMARY_WIDTH, _("[rejected]"), REFCOL_WIDTH, remote,
343                         pretty_ref, _("(non-fast-forward)"));
344                 return 1;
345         }
346 }
347
348 /*
349  * The ref_map records the tips of the refs we are fetching. If
350  *
351  *  $ git rev-list --verify-objects --stdin --not --all
352  *
353  * (feeding all the refs in ref_map on its standard input) does not
354  * error out, that means everything reachable from these updated refs
355  * locally exists and is connected to some of our existing refs.
356  *
357  * Returns 0 if everything is connected, non-zero otherwise.
358  */
359 static int check_everything_connected(struct ref *ref_map, int quiet)
360 {
361         struct child_process rev_list;
362         const char *argv[] = {"rev-list", "--verify-objects",
363                               "--stdin", "--not", "--all", NULL, NULL};
364         char commit[41];
365         struct ref *ref;
366         int err = 0;
367
368         if (!ref_map)
369                 return 0;
370
371         if (quiet)
372                 argv[5] = "--quiet";
373
374         memset(&rev_list, 0, sizeof(rev_list));
375         rev_list.argv = argv;
376         rev_list.git_cmd = 1;
377         rev_list.in = -1;
378         rev_list.no_stdout = 1;
379         rev_list.no_stderr = quiet;
380         if (start_command(&rev_list))
381                 return error(_("Could not run 'git rev-list'"));
382
383         sigchain_push(SIGPIPE, SIG_IGN);
384
385         memcpy(commit + 40, "\n", 2);
386         for (ref = ref_map; ref; ref = ref->next) {
387                 memcpy(commit, sha1_to_hex(ref->old_sha1), 40);
388                 if (write_in_full(rev_list.in, commit, 41) < 0) {
389                         if (errno != EPIPE && errno != EINVAL)
390                                 error(_("failed write to rev-list: %s"),
391                                       strerror(errno));
392                         err = -1;
393                         break;
394                 }
395         }
396         if (close(rev_list.in)) {
397                 error(_("failed to close rev-list's stdin: %s"), strerror(errno));
398                 err = -1;
399         }
400
401         sigchain_pop(SIGPIPE);
402
403         return finish_command(&rev_list) || err;
404 }
405
406 static int store_updated_refs(const char *raw_url, const char *remote_name,
407                 struct ref *ref_map)
408 {
409         FILE *fp;
410         struct commit *commit;
411         int url_len, i, note_len, shown_url = 0, rc = 0;
412         char note[1024];
413         const char *what, *kind;
414         struct ref *rm;
415         char *url, *filename = dry_run ? "/dev/null" : git_path("FETCH_HEAD");
416
417         fp = fopen(filename, "a");
418         if (!fp)
419                 return error(_("cannot open %s: %s\n"), filename, strerror(errno));
420
421         if (raw_url)
422                 url = transport_anonymize_url(raw_url);
423         else
424                 url = xstrdup("foreign");
425
426         if (check_everything_connected(ref_map, 0)) {
427                 rc = error(_("%s did not send all necessary objects\n"), url);
428                 goto abort;
429         }
430
431         for (rm = ref_map; rm; rm = rm->next) {
432                 struct ref *ref = NULL;
433
434                 if (rm->peer_ref) {
435                         ref = xcalloc(1, sizeof(*ref) + strlen(rm->peer_ref->name) + 1);
436                         strcpy(ref->name, rm->peer_ref->name);
437                         hashcpy(ref->old_sha1, rm->peer_ref->old_sha1);
438                         hashcpy(ref->new_sha1, rm->old_sha1);
439                         ref->force = rm->peer_ref->force;
440                 }
441
442                 commit = lookup_commit_reference_gently(rm->old_sha1, 1);
443                 if (!commit)
444                         rm->merge = 0;
445
446                 if (!strcmp(rm->name, "HEAD")) {
447                         kind = "";
448                         what = "";
449                 }
450                 else if (!prefixcmp(rm->name, "refs/heads/")) {
451                         kind = "branch";
452                         what = rm->name + 11;
453                 }
454                 else if (!prefixcmp(rm->name, "refs/tags/")) {
455                         kind = "tag";
456                         what = rm->name + 10;
457                 }
458                 else if (!prefixcmp(rm->name, "refs/remotes/")) {
459                         kind = "remote-tracking branch";
460                         what = rm->name + 13;
461                 }
462                 else {
463                         kind = "";
464                         what = rm->name;
465                 }
466
467                 url_len = strlen(url);
468                 for (i = url_len - 1; url[i] == '/' && 0 <= i; i--)
469                         ;
470                 url_len = i + 1;
471                 if (4 < i && !strncmp(".git", url + i - 3, 4))
472                         url_len = i - 3;
473
474                 note_len = 0;
475                 if (*what) {
476                         if (*kind)
477                                 note_len += sprintf(note + note_len, "%s ",
478                                                     kind);
479                         note_len += sprintf(note + note_len, "'%s' of ", what);
480                 }
481                 note[note_len] = '\0';
482                 fprintf(fp, "%s\t%s\t%s",
483                         sha1_to_hex(commit ? commit->object.sha1 :
484                                     rm->old_sha1),
485                         rm->merge ? "" : "not-for-merge",
486                         note);
487                 for (i = 0; i < url_len; ++i)
488                         if ('\n' == url[i])
489                                 fputs("\\n", fp);
490                         else
491                                 fputc(url[i], fp);
492                 fputc('\n', fp);
493
494                 if (ref) {
495                         rc |= update_local_ref(ref, what, note);
496                         free(ref);
497                 } else
498                         sprintf(note, "* %-*s %-*s -> FETCH_HEAD",
499                                 TRANSPORT_SUMMARY_WIDTH, *kind ? kind : "branch",
500                                  REFCOL_WIDTH, *what ? what : "HEAD");
501                 if (*note) {
502                         if (verbosity >= 0 && !shown_url) {
503                                 fprintf(stderr, _("From %.*s\n"),
504                                                 url_len, url);
505                                 shown_url = 1;
506                         }
507                         if (verbosity >= 0)
508                                 fprintf(stderr, " %s\n", note);
509                 }
510         }
511
512         if (rc & STORE_REF_ERROR_DF_CONFLICT)
513                 error(_("some local refs could not be updated; try running\n"
514                       " 'git remote prune %s' to remove any old, conflicting "
515                       "branches"), remote_name);
516
517  abort:
518         free(url);
519         fclose(fp);
520         return rc;
521 }
522
523 /*
524  * We would want to bypass the object transfer altogether if
525  * everything we are going to fetch already exists and is connected
526  * locally.
527  */
528 static int quickfetch(struct ref *ref_map)
529 {
530         /*
531          * If we are deepening a shallow clone we already have these
532          * objects reachable.  Running rev-list here will return with
533          * a good (0) exit status and we'll bypass the fetch that we
534          * really need to perform.  Claiming failure now will ensure
535          * we perform the network exchange to deepen our history.
536          */
537         if (depth)
538                 return -1;
539         return check_everything_connected(ref_map, 1);
540 }
541
542 static int fetch_refs(struct transport *transport, struct ref *ref_map)
543 {
544         int ret = quickfetch(ref_map);
545         if (ret)
546                 ret = transport_fetch_refs(transport, ref_map);
547         if (!ret)
548                 ret |= store_updated_refs(transport->url,
549                                 transport->remote->name,
550                                 ref_map);
551         transport_unlock_pack(transport);
552         return ret;
553 }
554
555 static int prune_refs(struct transport *transport, struct ref *ref_map)
556 {
557         int result = 0;
558         struct ref *ref, *stale_refs = get_stale_heads(transport->remote, ref_map);
559         const char *dangling_msg = dry_run
560                 ? _("   (%s will become dangling)\n")
561                 : _("   (%s has become dangling)\n");
562
563         for (ref = stale_refs; ref; ref = ref->next) {
564                 if (!dry_run)
565                         result |= delete_ref(ref->name, NULL, 0);
566                 if (verbosity >= 0) {
567                         fprintf(stderr, " x %-*s %-*s -> %s\n",
568                                 TRANSPORT_SUMMARY_WIDTH, _("[deleted]"),
569                                 REFCOL_WIDTH, _("(none)"), prettify_refname(ref->name));
570                         warn_dangling_symref(stderr, dangling_msg, ref->name);
571                 }
572         }
573         free_refs(stale_refs);
574         return result;
575 }
576
577 static int add_existing(const char *refname, const unsigned char *sha1,
578                         int flag, void *cbdata)
579 {
580         struct string_list *list = (struct string_list *)cbdata;
581         struct string_list_item *item = string_list_insert(list, refname);
582         item->util = (void *)sha1;
583         return 0;
584 }
585
586 static int will_fetch(struct ref **head, const unsigned char *sha1)
587 {
588         struct ref *rm = *head;
589         while (rm) {
590                 if (!hashcmp(rm->old_sha1, sha1))
591                         return 1;
592                 rm = rm->next;
593         }
594         return 0;
595 }
596
597 static void find_non_local_tags(struct transport *transport,
598                         struct ref **head,
599                         struct ref ***tail)
600 {
601         struct string_list existing_refs = STRING_LIST_INIT_NODUP;
602         struct string_list remote_refs = STRING_LIST_INIT_NODUP;
603         const struct ref *ref;
604         struct string_list_item *item = NULL;
605
606         for_each_ref(add_existing, &existing_refs);
607         for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {
608                 if (prefixcmp(ref->name, "refs/tags"))
609                         continue;
610
611                 /*
612                  * The peeled ref always follows the matching base
613                  * ref, so if we see a peeled ref that we don't want
614                  * to fetch then we can mark the ref entry in the list
615                  * as one to ignore by setting util to NULL.
616                  */
617                 if (!suffixcmp(ref->name, "^{}")) {
618                         if (item && !has_sha1_file(ref->old_sha1) &&
619                             !will_fetch(head, ref->old_sha1) &&
620                             !has_sha1_file(item->util) &&
621                             !will_fetch(head, item->util))
622                                 item->util = NULL;
623                         item = NULL;
624                         continue;
625                 }
626
627                 /*
628                  * If item is non-NULL here, then we previously saw a
629                  * ref not followed by a peeled reference, so we need
630                  * to check if it is a lightweight tag that we want to
631                  * fetch.
632                  */
633                 if (item && !has_sha1_file(item->util) &&
634                     !will_fetch(head, item->util))
635                         item->util = NULL;
636
637                 item = NULL;
638
639                 /* skip duplicates and refs that we already have */
640                 if (string_list_has_string(&remote_refs, ref->name) ||
641                     string_list_has_string(&existing_refs, ref->name))
642                         continue;
643
644                 item = string_list_insert(&remote_refs, ref->name);
645                 item->util = (void *)ref->old_sha1;
646         }
647         string_list_clear(&existing_refs, 0);
648
649         /*
650          * We may have a final lightweight tag that needs to be
651          * checked to see if it needs fetching.
652          */
653         if (item && !has_sha1_file(item->util) &&
654             !will_fetch(head, item->util))
655                 item->util = NULL;
656
657         /*
658          * For all the tags in the remote_refs string list,
659          * add them to the list of refs to be fetched
660          */
661         for_each_string_list_item(item, &remote_refs) {
662                 /* Unless we have already decided to ignore this item... */
663                 if (item->util)
664                 {
665                         struct ref *rm = alloc_ref(item->string);
666                         rm->peer_ref = alloc_ref(item->string);
667                         hashcpy(rm->old_sha1, item->util);
668                         **tail = rm;
669                         *tail = &rm->next;
670                 }
671         }
672
673         string_list_clear(&remote_refs, 0);
674 }
675
676 static void check_not_current_branch(struct ref *ref_map)
677 {
678         struct branch *current_branch = branch_get(NULL);
679
680         if (is_bare_repository() || !current_branch)
681                 return;
682
683         for (; ref_map; ref_map = ref_map->next)
684                 if (ref_map->peer_ref && !strcmp(current_branch->refname,
685                                         ref_map->peer_ref->name))
686                         die(_("Refusing to fetch into current branch %s "
687                             "of non-bare repository"), current_branch->refname);
688 }
689
690 static int truncate_fetch_head(void)
691 {
692         char *filename = git_path("FETCH_HEAD");
693         FILE *fp = fopen(filename, "w");
694
695         if (!fp)
696                 return error(_("cannot open %s: %s\n"), filename, strerror(errno));
697         fclose(fp);
698         return 0;
699 }
700
701 static int do_fetch(struct transport *transport,
702                     struct refspec *refs, int ref_count)
703 {
704         struct string_list existing_refs = STRING_LIST_INIT_NODUP;
705         struct string_list_item *peer_item = NULL;
706         struct ref *ref_map;
707         struct ref *rm;
708         int autotags = (transport->remote->fetch_tags == 1);
709
710         for_each_ref(add_existing, &existing_refs);
711
712         if (tags == TAGS_DEFAULT) {
713                 if (transport->remote->fetch_tags == 2)
714                         tags = TAGS_SET;
715                 if (transport->remote->fetch_tags == -1)
716                         tags = TAGS_UNSET;
717         }
718
719         if (!transport->get_refs_list || !transport->fetch)
720                 die(_("Don't know how to fetch from %s"), transport->url);
721
722         /* if not appending, truncate FETCH_HEAD */
723         if (!append && !dry_run) {
724                 int errcode = truncate_fetch_head();
725                 if (errcode)
726                         return errcode;
727         }
728
729         ref_map = get_ref_map(transport, refs, ref_count, tags, &autotags);
730         if (!update_head_ok)
731                 check_not_current_branch(ref_map);
732
733         for (rm = ref_map; rm; rm = rm->next) {
734                 if (rm->peer_ref) {
735                         peer_item = string_list_lookup(&existing_refs,
736                                                        rm->peer_ref->name);
737                         if (peer_item)
738                                 hashcpy(rm->peer_ref->old_sha1,
739                                         peer_item->util);
740                 }
741         }
742
743         if (tags == TAGS_DEFAULT && autotags)
744                 transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
745         if (fetch_refs(transport, ref_map)) {
746                 free_refs(ref_map);
747                 return 1;
748         }
749         if (prune)
750                 prune_refs(transport, ref_map);
751         free_refs(ref_map);
752
753         /* if neither --no-tags nor --tags was specified, do automated tag
754          * following ... */
755         if (tags == TAGS_DEFAULT && autotags) {
756                 struct ref **tail = &ref_map;
757                 ref_map = NULL;
758                 find_non_local_tags(transport, &ref_map, &tail);
759                 if (ref_map) {
760                         transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
761                         transport_set_option(transport, TRANS_OPT_DEPTH, "0");
762                         fetch_refs(transport, ref_map);
763                 }
764                 free_refs(ref_map);
765         }
766
767         return 0;
768 }
769
770 static void set_option(const char *name, const char *value)
771 {
772         int r = transport_set_option(transport, name, value);
773         if (r < 0)
774                 die(_("Option \"%s\" value \"%s\" is not valid for %s"),
775                         name, value, transport->url);
776         if (r > 0)
777                 warning(_("Option \"%s\" is ignored for %s\n"),
778                         name, transport->url);
779 }
780
781 static int get_one_remote_for_fetch(struct remote *remote, void *priv)
782 {
783         struct string_list *list = priv;
784         if (!remote->skip_default_update)
785                 string_list_append(list, remote->name);
786         return 0;
787 }
788
789 struct remote_group_data {
790         const char *name;
791         struct string_list *list;
792 };
793
794 static int get_remote_group(const char *key, const char *value, void *priv)
795 {
796         struct remote_group_data *g = priv;
797
798         if (!prefixcmp(key, "remotes.") &&
799                         !strcmp(key + 8, g->name)) {
800                 /* split list by white space */
801                 int space = strcspn(value, " \t\n");
802                 while (*value) {
803                         if (space > 1) {
804                                 string_list_append(g->list,
805                                                    xstrndup(value, space));
806                         }
807                         value += space + (value[space] != '\0');
808                         space = strcspn(value, " \t\n");
809                 }
810         }
811
812         return 0;
813 }
814
815 static int add_remote_or_group(const char *name, struct string_list *list)
816 {
817         int prev_nr = list->nr;
818         struct remote_group_data g;
819         g.name = name; g.list = list;
820
821         git_config(get_remote_group, &g);
822         if (list->nr == prev_nr) {
823                 struct remote *remote;
824                 if (!remote_is_configured(name))
825                         return 0;
826                 remote = remote_get(name);
827                 string_list_append(list, remote->name);
828         }
829         return 1;
830 }
831
832 static void add_options_to_argv(int *argc, const char **argv)
833 {
834         if (dry_run)
835                 argv[(*argc)++] = "--dry-run";
836         if (prune)
837                 argv[(*argc)++] = "--prune";
838         if (update_head_ok)
839                 argv[(*argc)++] = "--update-head-ok";
840         if (force)
841                 argv[(*argc)++] = "--force";
842         if (keep)
843                 argv[(*argc)++] = "--keep";
844         if (recurse_submodules == RECURSE_SUBMODULES_ON)
845                 argv[(*argc)++] = "--recurse-submodules";
846         else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
847                 argv[(*argc)++] = "--recurse-submodules=on-demand";
848         if (verbosity >= 2)
849                 argv[(*argc)++] = "-v";
850         if (verbosity >= 1)
851                 argv[(*argc)++] = "-v";
852         else if (verbosity < 0)
853                 argv[(*argc)++] = "-q";
854
855 }
856
857 static int fetch_multiple(struct string_list *list)
858 {
859         int i, result = 0;
860         const char *argv[12] = { "fetch", "--append" };
861         int argc = 2;
862
863         add_options_to_argv(&argc, argv);
864
865         if (!append && !dry_run) {
866                 int errcode = truncate_fetch_head();
867                 if (errcode)
868                         return errcode;
869         }
870
871         for (i = 0; i < list->nr; i++) {
872                 const char *name = list->items[i].string;
873                 argv[argc] = name;
874                 argv[argc + 1] = NULL;
875                 if (verbosity >= 0)
876                         printf(_("Fetching %s\n"), name);
877                 if (run_command_v_opt(argv, RUN_GIT_CMD)) {
878                         error(_("Could not fetch %s"), name);
879                         result = 1;
880                 }
881         }
882
883         return result;
884 }
885
886 static int fetch_one(struct remote *remote, int argc, const char **argv)
887 {
888         int i;
889         static const char **refs = NULL;
890         int ref_nr = 0;
891         int exit_code;
892
893         if (!remote)
894                 die(_("No remote repository specified.  Please, specify either a URL or a\n"
895                     "remote name from which new revisions should be fetched."));
896
897         transport = transport_get(remote, NULL);
898         transport_set_verbosity(transport, verbosity, progress);
899         if (upload_pack)
900                 set_option(TRANS_OPT_UPLOADPACK, upload_pack);
901         if (keep)
902                 set_option(TRANS_OPT_KEEP, "yes");
903         if (depth)
904                 set_option(TRANS_OPT_DEPTH, depth);
905
906         if (argc > 0) {
907                 int j = 0;
908                 refs = xcalloc(argc + 1, sizeof(const char *));
909                 for (i = 0; i < argc; i++) {
910                         if (!strcmp(argv[i], "tag")) {
911                                 char *ref;
912                                 i++;
913                                 if (i >= argc)
914                                         die(_("You need to specify a tag name."));
915                                 ref = xmalloc(strlen(argv[i]) * 2 + 22);
916                                 strcpy(ref, "refs/tags/");
917                                 strcat(ref, argv[i]);
918                                 strcat(ref, ":refs/tags/");
919                                 strcat(ref, argv[i]);
920                                 refs[j++] = ref;
921                         } else
922                                 refs[j++] = argv[i];
923                 }
924                 refs[j] = NULL;
925                 ref_nr = j;
926         }
927
928         sigchain_push_common(unlock_pack_on_signal);
929         atexit(unlock_pack);
930         exit_code = do_fetch(transport,
931                         parse_fetch_refspec(ref_nr, refs), ref_nr);
932         transport_disconnect(transport);
933         transport = NULL;
934         return exit_code;
935 }
936
937 int cmd_fetch(int argc, const char **argv, const char *prefix)
938 {
939         int i;
940         struct string_list list = STRING_LIST_INIT_NODUP;
941         struct remote *remote;
942         int result = 0;
943
944         packet_trace_identity("fetch");
945
946         /* Record the command line for the reflog */
947         strbuf_addstr(&default_rla, "fetch");
948         for (i = 1; i < argc; i++)
949                 strbuf_addf(&default_rla, " %s", argv[i]);
950
951         argc = parse_options(argc, argv, prefix,
952                              builtin_fetch_options, builtin_fetch_usage, 0);
953
954         if (all) {
955                 if (argc == 1)
956                         die(_("fetch --all does not take a repository argument"));
957                 else if (argc > 1)
958                         die(_("fetch --all does not make sense with refspecs"));
959                 (void) for_each_remote(get_one_remote_for_fetch, &list);
960                 result = fetch_multiple(&list);
961         } else if (argc == 0) {
962                 /* No arguments -- use default remote */
963                 remote = remote_get(NULL);
964                 result = fetch_one(remote, argc, argv);
965         } else if (multiple) {
966                 /* All arguments are assumed to be remotes or groups */
967                 for (i = 0; i < argc; i++)
968                         if (!add_remote_or_group(argv[i], &list))
969                                 die(_("No such remote or remote group: %s"), argv[i]);
970                 result = fetch_multiple(&list);
971         } else {
972                 /* Single remote or group */
973                 (void) add_remote_or_group(argv[0], &list);
974                 if (list.nr > 1) {
975                         /* More than one remote */
976                         if (argc > 1)
977                                 die(_("Fetching a group and specifying refspecs does not make sense"));
978                         result = fetch_multiple(&list);
979                 } else {
980                         /* Zero or one remotes */
981                         remote = remote_get(argv[0]);
982                         result = fetch_one(remote, argc-1, argv+1);
983                 }
984         }
985
986         if (!result && (recurse_submodules != RECURSE_SUBMODULES_OFF)) {
987                 const char *options[10];
988                 int num_options = 0;
989                 if (recurse_submodules_default) {
990                         int arg = parse_fetch_recurse_submodules_arg("--recurse-submodules-default", recurse_submodules_default);
991                         set_config_fetch_recurse_submodules(arg);
992                 }
993                 gitmodules_config();
994                 git_config(submodule_config, NULL);
995                 add_options_to_argv(&num_options, options);
996                 result = fetch_populated_submodules(num_options, options,
997                                                     submodule_prefix,
998                                                     recurse_submodules,
999                                                     verbosity < 0);
1000         }
1001
1002         /* All names were strdup()ed or strndup()ed */
1003         list.strdup_strings = 1;
1004         string_list_clear(&list, 0);
1005
1006         return result;
1007 }