Coverage Report

Created: 2024-09-08 06:24

/src/git/builtin/fetch.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * "git fetch"
3
 */
4
#include "builtin.h"
5
#include "advice.h"
6
#include "config.h"
7
#include "gettext.h"
8
#include "environment.h"
9
#include "hex.h"
10
#include "repository.h"
11
#include "refs.h"
12
#include "refspec.h"
13
#include "object-name.h"
14
#include "object-store-ll.h"
15
#include "oidset.h"
16
#include "oid-array.h"
17
#include "commit.h"
18
#include "string-list.h"
19
#include "remote.h"
20
#include "transport.h"
21
#include "run-command.h"
22
#include "parse-options.h"
23
#include "sigchain.h"
24
#include "submodule-config.h"
25
#include "submodule.h"
26
#include "connected.h"
27
#include "strvec.h"
28
#include "utf8.h"
29
#include "pager.h"
30
#include "path.h"
31
#include "pkt-line.h"
32
#include "list-objects-filter-options.h"
33
#include "commit-reach.h"
34
#include "branch.h"
35
#include "promisor-remote.h"
36
#include "commit-graph.h"
37
#include "shallow.h"
38
#include "trace.h"
39
#include "trace2.h"
40
#include "bundle-uri.h"
41
42
0
#define FORCED_UPDATES_DELAY_WARNING_IN_MS (10 * 1000)
43
44
static const char * const builtin_fetch_usage[] = {
45
  N_("git fetch [<options>] [<repository> [<refspec>...]]"),
46
  N_("git fetch [<options>] <group>"),
47
  N_("git fetch --multiple [<options>] [(<repository> | <group>)...]"),
48
  N_("git fetch --all [<options>]"),
49
  NULL
50
};
51
52
enum {
53
  TAGS_UNSET = 0,
54
  TAGS_DEFAULT = 1,
55
  TAGS_SET = 2
56
};
57
58
enum display_format {
59
  DISPLAY_FORMAT_FULL,
60
  DISPLAY_FORMAT_COMPACT,
61
  DISPLAY_FORMAT_PORCELAIN,
62
};
63
64
struct display_state {
65
  struct strbuf buf;
66
67
  int refcol_width;
68
  enum display_format format;
69
70
  char *url;
71
  int url_len, shown_url;
72
};
73
74
static uint64_t forced_updates_ms = 0;
75
static int prefetch = 0;
76
static int prune = -1; /* unspecified */
77
0
#define PRUNE_BY_DEFAULT 0 /* do we prune by default? */
78
79
static int prune_tags = -1; /* unspecified */
80
0
#define PRUNE_TAGS_BY_DEFAULT 0 /* do we prune tags by default? */
81
82
static int append, dry_run, force, keep, update_head_ok;
83
static int write_fetch_head = 1;
84
static int verbosity, deepen_relative, set_upstream, refetch;
85
static int progress = -1;
86
static int tags = TAGS_DEFAULT, update_shallow, deepen;
87
static int atomic_fetch;
88
static enum transport_family family;
89
static const char *depth;
90
static const char *deepen_since;
91
static const char *upload_pack;
92
static struct string_list deepen_not = STRING_LIST_INIT_NODUP;
93
static struct strbuf default_rla = STRBUF_INIT;
94
static struct transport *gtransport;
95
static struct transport *gsecondary;
96
static struct refspec refmap = REFSPEC_INIT_FETCH;
97
static struct list_objects_filter_options filter_options = LIST_OBJECTS_FILTER_INIT;
98
static struct string_list server_options = STRING_LIST_INIT_DUP;
99
static struct string_list negotiation_tip = STRING_LIST_INIT_NODUP;
100
101
struct fetch_config {
102
  enum display_format display_format;
103
  int all;
104
  int prune;
105
  int prune_tags;
106
  int show_forced_updates;
107
  int recurse_submodules;
108
  int parallel;
109
  int submodule_fetch_jobs;
110
};
111
112
static int git_fetch_config(const char *k, const char *v,
113
          const struct config_context *ctx, void *cb)
114
0
{
115
0
  struct fetch_config *fetch_config = cb;
116
117
0
  if (!strcmp(k, "fetch.all")) {
118
0
    fetch_config->all = git_config_bool(k, v);
119
0
    return 0;
120
0
  }
121
122
0
  if (!strcmp(k, "fetch.prune")) {
123
0
    fetch_config->prune = git_config_bool(k, v);
124
0
    return 0;
125
0
  }
126
127
0
  if (!strcmp(k, "fetch.prunetags")) {
128
0
    fetch_config->prune_tags = git_config_bool(k, v);
129
0
    return 0;
130
0
  }
131
132
0
  if (!strcmp(k, "fetch.showforcedupdates")) {
133
0
    fetch_config->show_forced_updates = git_config_bool(k, v);
134
0
    return 0;
135
0
  }
136
137
0
  if (!strcmp(k, "submodule.recurse")) {
138
0
    int r = git_config_bool(k, v) ?
139
0
      RECURSE_SUBMODULES_ON : RECURSE_SUBMODULES_OFF;
140
0
    fetch_config->recurse_submodules = r;
141
0
    return 0;
142
0
  }
143
144
0
  if (!strcmp(k, "submodule.fetchjobs")) {
145
0
    fetch_config->submodule_fetch_jobs = parse_submodule_fetchjobs(k, v, ctx->kvi);
146
0
    return 0;
147
0
  } else if (!strcmp(k, "fetch.recursesubmodules")) {
148
0
    fetch_config->recurse_submodules = parse_fetch_recurse_submodules_arg(k, v);
149
0
    return 0;
150
0
  }
151
152
0
  if (!strcmp(k, "fetch.parallel")) {
153
0
    fetch_config->parallel = git_config_int(k, v, ctx->kvi);
154
0
    if (fetch_config->parallel < 0)
155
0
      die(_("fetch.parallel cannot be negative"));
156
0
    if (!fetch_config->parallel)
157
0
      fetch_config->parallel = online_cpus();
158
0
    return 0;
159
0
  }
160
161
0
  if (!strcmp(k, "fetch.output")) {
162
0
    if (!v)
163
0
      return config_error_nonbool(k);
164
0
    else if (!strcasecmp(v, "full"))
165
0
      fetch_config->display_format = DISPLAY_FORMAT_FULL;
166
0
    else if (!strcasecmp(v, "compact"))
167
0
      fetch_config->display_format = DISPLAY_FORMAT_COMPACT;
168
0
    else
169
0
      die(_("invalid value for '%s': '%s'"),
170
0
          "fetch.output", v);
171
0
  }
172
173
0
  return git_default_config(k, v, ctx, cb);
174
0
}
175
176
static int parse_refmap_arg(const struct option *opt, const char *arg, int unset)
177
0
{
178
0
  BUG_ON_OPT_NEG(unset);
179
180
  /*
181
   * "git fetch --refmap='' origin foo"
182
   * can be used to tell the command not to store anywhere
183
   */
184
0
  refspec_append(opt->value, arg);
185
186
0
  return 0;
187
0
}
188
189
static void unlock_pack(unsigned int flags)
190
0
{
191
0
  if (gtransport)
192
0
    transport_unlock_pack(gtransport, flags);
193
0
  if (gsecondary)
194
0
    transport_unlock_pack(gsecondary, flags);
195
0
}
196
197
static void unlock_pack_atexit(void)
198
0
{
199
0
  unlock_pack(0);
200
0
}
201
202
static void unlock_pack_on_signal(int signo)
203
0
{
204
0
  unlock_pack(TRANSPORT_UNLOCK_PACK_IN_SIGNAL_HANDLER);
205
0
  sigchain_pop(signo);
206
0
  raise(signo);
207
0
}
208
209
static void add_merge_config(struct ref **head,
210
         const struct ref *remote_refs,
211
               struct branch *branch,
212
               struct ref ***tail)
213
0
{
214
0
  int i;
215
216
0
  for (i = 0; i < branch->merge_nr; i++) {
217
0
    struct ref *rm, **old_tail = *tail;
218
0
    struct refspec_item refspec;
219
220
0
    for (rm = *head; rm; rm = rm->next) {
221
0
      if (branch_merge_matches(branch, i, rm->name)) {
222
0
        rm->fetch_head_status = FETCH_HEAD_MERGE;
223
0
        break;
224
0
      }
225
0
    }
226
0
    if (rm)
227
0
      continue;
228
229
    /*
230
     * Not fetched to a remote-tracking branch?  We need to fetch
231
     * it anyway to allow this branch's "branch.$name.merge"
232
     * to be honored by 'git pull', but we do not have to
233
     * fail if branch.$name.merge is misconfigured to point
234
     * at a nonexisting branch.  If we were indeed called by
235
     * 'git pull', it will notice the misconfiguration because
236
     * there is no entry in the resulting FETCH_HEAD marked
237
     * for merging.
238
     */
239
0
    memset(&refspec, 0, sizeof(refspec));
240
0
    refspec.src = branch->merge[i]->src;
241
0
    get_fetch_map(remote_refs, &refspec, tail, 1);
242
0
    for (rm = *old_tail; rm; rm = rm->next)
243
0
      rm->fetch_head_status = FETCH_HEAD_MERGE;
244
0
  }
245
0
}
246
247
static void create_fetch_oidset(struct ref **head, struct oidset *out)
248
0
{
249
0
  struct ref *rm = *head;
250
0
  while (rm) {
251
0
    oidset_insert(out, &rm->old_oid);
252
0
    rm = rm->next;
253
0
  }
254
0
}
255
256
struct refname_hash_entry {
257
  struct hashmap_entry ent;
258
  struct object_id oid;
259
  int ignore;
260
  char refname[FLEX_ARRAY];
261
};
262
263
static int refname_hash_entry_cmp(const void *hashmap_cmp_fn_data UNUSED,
264
          const struct hashmap_entry *eptr,
265
          const struct hashmap_entry *entry_or_key,
266
          const void *keydata)
267
0
{
268
0
  const struct refname_hash_entry *e1, *e2;
269
270
0
  e1 = container_of(eptr, const struct refname_hash_entry, ent);
271
0
  e2 = container_of(entry_or_key, const struct refname_hash_entry, ent);
272
0
  return strcmp(e1->refname, keydata ? keydata : e2->refname);
273
0
}
274
275
static struct refname_hash_entry *refname_hash_add(struct hashmap *map,
276
               const char *refname,
277
               const struct object_id *oid)
278
0
{
279
0
  struct refname_hash_entry *ent;
280
0
  size_t len = strlen(refname);
281
282
0
  FLEX_ALLOC_MEM(ent, refname, refname, len);
283
0
  hashmap_entry_init(&ent->ent, strhash(refname));
284
0
  oidcpy(&ent->oid, oid);
285
0
  hashmap_add(map, &ent->ent);
286
0
  return ent;
287
0
}
288
289
static int add_one_refname(const char *refname, const char *referent UNUSED,
290
         const struct object_id *oid,
291
         int flag UNUSED, void *cbdata)
292
0
{
293
0
  struct hashmap *refname_map = cbdata;
294
295
0
  (void) refname_hash_add(refname_map, refname, oid);
296
0
  return 0;
297
0
}
298
299
static void refname_hash_init(struct hashmap *map)
300
0
{
301
0
  hashmap_init(map, refname_hash_entry_cmp, NULL, 0);
302
0
}
303
304
static int refname_hash_exists(struct hashmap *map, const char *refname)
305
0
{
306
0
  return !!hashmap_get_from_hash(map, strhash(refname), refname);
307
0
}
308
309
static void clear_item(struct refname_hash_entry *item)
310
0
{
311
0
  item->ignore = 1;
312
0
}
313
314
315
static void add_already_queued_tags(const char *refname,
316
            const struct object_id *old_oid UNUSED,
317
            const struct object_id *new_oid,
318
            void *cb_data)
319
0
{
320
0
  struct hashmap *queued_tags = cb_data;
321
0
  if (starts_with(refname, "refs/tags/") && new_oid)
322
0
    (void) refname_hash_add(queued_tags, refname, new_oid);
323
0
}
324
325
static void find_non_local_tags(const struct ref *refs,
326
        struct ref_transaction *transaction,
327
        struct ref **head,
328
        struct ref ***tail)
329
0
{
330
0
  struct hashmap existing_refs;
331
0
  struct hashmap remote_refs;
332
0
  struct oidset fetch_oids = OIDSET_INIT;
333
0
  struct string_list remote_refs_list = STRING_LIST_INIT_NODUP;
334
0
  struct string_list_item *remote_ref_item;
335
0
  const struct ref *ref;
336
0
  struct refname_hash_entry *item = NULL;
337
0
  const int quick_flags = OBJECT_INFO_QUICK | OBJECT_INFO_SKIP_FETCH_OBJECT;
338
339
0
  refname_hash_init(&existing_refs);
340
0
  refname_hash_init(&remote_refs);
341
0
  create_fetch_oidset(head, &fetch_oids);
342
343
0
  refs_for_each_ref(get_main_ref_store(the_repository), add_one_refname,
344
0
        &existing_refs);
345
346
  /*
347
   * If we already have a transaction, then we need to filter out all
348
   * tags which have already been queued up.
349
   */
350
0
  if (transaction)
351
0
    ref_transaction_for_each_queued_update(transaction,
352
0
                   add_already_queued_tags,
353
0
                   &existing_refs);
354
355
0
  for (ref = refs; ref; ref = ref->next) {
356
0
    if (!starts_with(ref->name, "refs/tags/"))
357
0
      continue;
358
359
    /*
360
     * The peeled ref always follows the matching base
361
     * ref, so if we see a peeled ref that we don't want
362
     * to fetch then we can mark the ref entry in the list
363
     * as one to ignore by setting util to NULL.
364
     */
365
0
    if (ends_with(ref->name, "^{}")) {
366
0
      if (item &&
367
0
          !repo_has_object_file_with_flags(the_repository, &ref->old_oid, quick_flags) &&
368
0
          !oidset_contains(&fetch_oids, &ref->old_oid) &&
369
0
          !repo_has_object_file_with_flags(the_repository, &item->oid, quick_flags) &&
370
0
          !oidset_contains(&fetch_oids, &item->oid))
371
0
        clear_item(item);
372
0
      item = NULL;
373
0
      continue;
374
0
    }
375
376
    /*
377
     * If item is non-NULL here, then we previously saw a
378
     * ref not followed by a peeled reference, so we need
379
     * to check if it is a lightweight tag that we want to
380
     * fetch.
381
     */
382
0
    if (item &&
383
0
        !repo_has_object_file_with_flags(the_repository, &item->oid, quick_flags) &&
384
0
        !oidset_contains(&fetch_oids, &item->oid))
385
0
      clear_item(item);
386
387
0
    item = NULL;
388
389
    /* skip duplicates and refs that we already have */
390
0
    if (refname_hash_exists(&remote_refs, ref->name) ||
391
0
        refname_hash_exists(&existing_refs, ref->name))
392
0
      continue;
393
394
0
    item = refname_hash_add(&remote_refs, ref->name, &ref->old_oid);
395
0
    string_list_insert(&remote_refs_list, ref->name);
396
0
  }
397
0
  hashmap_clear_and_free(&existing_refs, struct refname_hash_entry, ent);
398
399
  /*
400
   * We may have a final lightweight tag that needs to be
401
   * checked to see if it needs fetching.
402
   */
403
0
  if (item &&
404
0
      !repo_has_object_file_with_flags(the_repository, &item->oid, quick_flags) &&
405
0
      !oidset_contains(&fetch_oids, &item->oid))
406
0
    clear_item(item);
407
408
  /*
409
   * For all the tags in the remote_refs_list,
410
   * add them to the list of refs to be fetched
411
   */
412
0
  for_each_string_list_item(remote_ref_item, &remote_refs_list) {
413
0
    const char *refname = remote_ref_item->string;
414
0
    struct ref *rm;
415
0
    unsigned int hash = strhash(refname);
416
417
0
    item = hashmap_get_entry_from_hash(&remote_refs, hash, refname,
418
0
          struct refname_hash_entry, ent);
419
0
    if (!item)
420
0
      BUG("unseen remote ref?");
421
422
    /* Unless we have already decided to ignore this item... */
423
0
    if (item->ignore)
424
0
      continue;
425
426
0
    rm = alloc_ref(item->refname);
427
0
    rm->peer_ref = alloc_ref(item->refname);
428
0
    oidcpy(&rm->old_oid, &item->oid);
429
0
    **tail = rm;
430
0
    *tail = &rm->next;
431
0
  }
432
0
  hashmap_clear_and_free(&remote_refs, struct refname_hash_entry, ent);
433
0
  string_list_clear(&remote_refs_list, 0);
434
0
  oidset_clear(&fetch_oids);
435
0
}
436
437
static void filter_prefetch_refspec(struct refspec *rs)
438
0
{
439
0
  int i;
440
441
0
  if (!prefetch)
442
0
    return;
443
444
0
  for (i = 0; i < rs->nr; i++) {
445
0
    struct strbuf new_dst = STRBUF_INIT;
446
0
    char *old_dst;
447
0
    const char *sub = NULL;
448
449
0
    if (rs->items[i].negative)
450
0
      continue;
451
0
    if (!rs->items[i].dst ||
452
0
        (rs->items[i].src &&
453
0
         starts_with(rs->items[i].src,
454
0
         ref_namespace[NAMESPACE_TAGS].ref))) {
455
0
      int j;
456
457
0
      free(rs->items[i].src);
458
0
      free(rs->items[i].dst);
459
460
0
      for (j = i + 1; j < rs->nr; j++) {
461
0
        rs->items[j - 1] = rs->items[j];
462
0
        rs->raw[j - 1] = rs->raw[j];
463
0
      }
464
0
      rs->nr--;
465
0
      i--;
466
0
      continue;
467
0
    }
468
469
0
    old_dst = rs->items[i].dst;
470
0
    strbuf_addstr(&new_dst, ref_namespace[NAMESPACE_PREFETCH].ref);
471
472
    /*
473
     * If old_dst starts with "refs/", then place
474
     * sub after that prefix. Otherwise, start at
475
     * the beginning of the string.
476
     */
477
0
    if (!skip_prefix(old_dst, "refs/", &sub))
478
0
      sub = old_dst;
479
0
    strbuf_addstr(&new_dst, sub);
480
481
0
    rs->items[i].dst = strbuf_detach(&new_dst, NULL);
482
0
    rs->items[i].force = 1;
483
484
0
    free(old_dst);
485
0
  }
486
0
}
487
488
static struct ref *get_ref_map(struct remote *remote,
489
             const struct ref *remote_refs,
490
             struct refspec *rs,
491
             int tags, int *autotags)
492
0
{
493
0
  int i;
494
0
  struct ref *rm;
495
0
  struct ref *ref_map = NULL;
496
0
  struct ref **tail = &ref_map;
497
498
  /* opportunistically-updated references: */
499
0
  struct ref *orefs = NULL, **oref_tail = &orefs;
500
501
0
  struct hashmap existing_refs;
502
0
  int existing_refs_populated = 0;
503
504
0
  filter_prefetch_refspec(rs);
505
0
  if (remote)
506
0
    filter_prefetch_refspec(&remote->fetch);
507
508
0
  if (rs->nr) {
509
0
    struct refspec *fetch_refspec;
510
511
0
    for (i = 0; i < rs->nr; i++) {
512
0
      get_fetch_map(remote_refs, &rs->items[i], &tail, 0);
513
0
      if (rs->items[i].dst && rs->items[i].dst[0])
514
0
        *autotags = 1;
515
0
    }
516
    /* Merge everything on the command line (but not --tags) */
517
0
    for (rm = ref_map; rm; rm = rm->next)
518
0
      rm->fetch_head_status = FETCH_HEAD_MERGE;
519
520
    /*
521
     * For any refs that we happen to be fetching via
522
     * command-line arguments, the destination ref might
523
     * have been missing or have been different than the
524
     * remote-tracking ref that would be derived from the
525
     * configured refspec.  In these cases, we want to
526
     * take the opportunity to update their configured
527
     * remote-tracking reference.  However, we do not want
528
     * to mention these entries in FETCH_HEAD at all, as
529
     * they would simply be duplicates of existing
530
     * entries, so we set them FETCH_HEAD_IGNORE below.
531
     *
532
     * We compute these entries now, based only on the
533
     * refspecs specified on the command line.  But we add
534
     * them to the list following the refspecs resulting
535
     * from the tags option so that one of the latter,
536
     * which has FETCH_HEAD_NOT_FOR_MERGE, is not removed
537
     * by ref_remove_duplicates() in favor of one of these
538
     * opportunistic entries with FETCH_HEAD_IGNORE.
539
     */
540
0
    if (refmap.nr)
541
0
      fetch_refspec = &refmap;
542
0
    else
543
0
      fetch_refspec = &remote->fetch;
544
545
0
    for (i = 0; i < fetch_refspec->nr; i++)
546
0
      get_fetch_map(ref_map, &fetch_refspec->items[i], &oref_tail, 1);
547
0
  } else if (refmap.nr) {
548
0
    die("--refmap option is only meaningful with command-line refspec(s)");
549
0
  } else {
550
    /* Use the defaults */
551
0
    struct branch *branch = branch_get(NULL);
552
0
    int has_merge = branch_has_merge_config(branch);
553
0
    if (remote &&
554
0
        (remote->fetch.nr ||
555
         /* Note: has_merge implies non-NULL branch->remote_name */
556
0
         (has_merge && !strcmp(branch->remote_name, remote->name)))) {
557
0
      for (i = 0; i < remote->fetch.nr; i++) {
558
0
        get_fetch_map(remote_refs, &remote->fetch.items[i], &tail, 0);
559
0
        if (remote->fetch.items[i].dst &&
560
0
            remote->fetch.items[i].dst[0])
561
0
          *autotags = 1;
562
0
        if (!i && !has_merge && ref_map &&
563
0
            !remote->fetch.items[0].pattern)
564
0
          ref_map->fetch_head_status = FETCH_HEAD_MERGE;
565
0
      }
566
      /*
567
       * if the remote we're fetching from is the same
568
       * as given in branch.<name>.remote, we add the
569
       * ref given in branch.<name>.merge, too.
570
       *
571
       * Note: has_merge implies non-NULL branch->remote_name
572
       */
573
0
      if (has_merge &&
574
0
          !strcmp(branch->remote_name, remote->name))
575
0
        add_merge_config(&ref_map, remote_refs, branch, &tail);
576
0
    } else if (!prefetch) {
577
0
      ref_map = get_remote_ref(remote_refs, "HEAD");
578
0
      if (!ref_map)
579
0
        die(_("couldn't find remote ref HEAD"));
580
0
      ref_map->fetch_head_status = FETCH_HEAD_MERGE;
581
0
      tail = &ref_map->next;
582
0
    }
583
0
  }
584
585
0
  if (tags == TAGS_SET) {
586
0
    struct refspec_item tag_refspec;
587
588
    /* also fetch all tags */
589
0
    refspec_item_init(&tag_refspec, TAG_REFSPEC, 0);
590
0
    get_fetch_map(remote_refs, &tag_refspec, &tail, 0);
591
0
    refspec_item_clear(&tag_refspec);
592
0
  } else if (tags == TAGS_DEFAULT && *autotags) {
593
0
    find_non_local_tags(remote_refs, NULL, &ref_map, &tail);
594
0
  }
595
596
  /* Now append any refs to be updated opportunistically: */
597
0
  *tail = orefs;
598
0
  for (rm = orefs; rm; rm = rm->next) {
599
0
    rm->fetch_head_status = FETCH_HEAD_IGNORE;
600
0
    tail = &rm->next;
601
0
  }
602
603
  /*
604
   * apply negative refspecs first, before we remove duplicates. This is
605
   * necessary as negative refspecs might remove an otherwise conflicting
606
   * duplicate.
607
   */
608
0
  if (rs->nr)
609
0
    ref_map = apply_negative_refspecs(ref_map, rs);
610
0
  else
611
0
    ref_map = apply_negative_refspecs(ref_map, &remote->fetch);
612
613
0
  ref_map = ref_remove_duplicates(ref_map);
614
615
0
  for (rm = ref_map; rm; rm = rm->next) {
616
0
    if (rm->peer_ref) {
617
0
      const char *refname = rm->peer_ref->name;
618
0
      struct refname_hash_entry *peer_item;
619
0
      unsigned int hash = strhash(refname);
620
621
0
      if (!existing_refs_populated) {
622
0
        refname_hash_init(&existing_refs);
623
0
        refs_for_each_ref(get_main_ref_store(the_repository),
624
0
              add_one_refname,
625
0
              &existing_refs);
626
0
        existing_refs_populated = 1;
627
0
      }
628
629
0
      peer_item = hashmap_get_entry_from_hash(&existing_refs,
630
0
            hash, refname,
631
0
            struct refname_hash_entry, ent);
632
0
      if (peer_item) {
633
0
        struct object_id *old_oid = &peer_item->oid;
634
0
        oidcpy(&rm->peer_ref->old_oid, old_oid);
635
0
      }
636
0
    }
637
0
  }
638
0
  if (existing_refs_populated)
639
0
    hashmap_clear_and_free(&existing_refs, struct refname_hash_entry, ent);
640
641
0
  return ref_map;
642
0
}
643
644
0
#define STORE_REF_ERROR_OTHER 1
645
0
#define STORE_REF_ERROR_DF_CONFLICT 2
646
647
static int s_update_ref(const char *action,
648
      struct ref *ref,
649
      struct ref_transaction *transaction,
650
      int check_old)
651
0
{
652
0
  char *msg;
653
0
  char *rla = getenv("GIT_REFLOG_ACTION");
654
0
  struct ref_transaction *our_transaction = NULL;
655
0
  struct strbuf err = STRBUF_INIT;
656
0
  int ret;
657
658
0
  if (dry_run)
659
0
    return 0;
660
0
  if (!rla)
661
0
    rla = default_rla.buf;
662
0
  msg = xstrfmt("%s: %s", rla, action);
663
664
  /*
665
   * If no transaction was passed to us, we manage the transaction
666
   * ourselves. Otherwise, we trust the caller to handle the transaction
667
   * lifecycle.
668
   */
669
0
  if (!transaction) {
670
0
    transaction = our_transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
671
0
                      &err);
672
0
    if (!transaction) {
673
0
      ret = STORE_REF_ERROR_OTHER;
674
0
      goto out;
675
0
    }
676
0
  }
677
678
0
  ret = ref_transaction_update(transaction, ref->name, &ref->new_oid,
679
0
             check_old ? &ref->old_oid : NULL,
680
0
             NULL, NULL, 0, msg, &err);
681
0
  if (ret) {
682
0
    ret = STORE_REF_ERROR_OTHER;
683
0
    goto out;
684
0
  }
685
686
0
  if (our_transaction) {
687
0
    switch (ref_transaction_commit(our_transaction, &err)) {
688
0
    case 0:
689
0
      break;
690
0
    case TRANSACTION_NAME_CONFLICT:
691
0
      ret = STORE_REF_ERROR_DF_CONFLICT;
692
0
      goto out;
693
0
    default:
694
0
      ret = STORE_REF_ERROR_OTHER;
695
0
      goto out;
696
0
    }
697
0
  }
698
699
0
out:
700
0
  ref_transaction_free(our_transaction);
701
0
  if (ret)
702
0
    error("%s", err.buf);
703
0
  strbuf_release(&err);
704
0
  free(msg);
705
0
  return ret;
706
0
}
707
708
static int refcol_width(const struct ref *ref_map, int compact_format)
709
0
{
710
0
  const struct ref *ref;
711
0
  int max, width = 10;
712
713
0
  max = term_columns();
714
0
  if (compact_format)
715
0
    max = max * 2 / 3;
716
717
0
  for (ref = ref_map; ref; ref = ref->next) {
718
0
    int rlen, llen = 0, len;
719
720
0
    if (ref->status == REF_STATUS_REJECT_SHALLOW ||
721
0
        !ref->peer_ref ||
722
0
        !strcmp(ref->name, "HEAD"))
723
0
      continue;
724
725
    /* uptodate lines are only shown on high verbosity level */
726
0
    if (verbosity <= 0 && oideq(&ref->peer_ref->old_oid, &ref->old_oid))
727
0
      continue;
728
729
0
    rlen = utf8_strwidth(prettify_refname(ref->name));
730
0
    if (!compact_format)
731
0
      llen = utf8_strwidth(prettify_refname(ref->peer_ref->name));
732
733
    /*
734
     * rough estimation to see if the output line is too long and
735
     * should not be counted (we can't do precise calculation
736
     * anyway because we don't know if the error explanation part
737
     * will be printed in update_local_ref)
738
     */
739
0
    len = 21 /* flag and summary */ + rlen + 4 /* -> */ + llen;
740
0
    if (len >= max)
741
0
      continue;
742
743
0
    if (width < rlen)
744
0
      width = rlen;
745
0
  }
746
747
0
  return width;
748
0
}
749
750
static void display_state_init(struct display_state *display_state, struct ref *ref_map,
751
             const char *raw_url, enum display_format format)
752
0
{
753
0
  int i;
754
755
0
  memset(display_state, 0, sizeof(*display_state));
756
0
  strbuf_init(&display_state->buf, 0);
757
0
  display_state->format = format;
758
759
0
  if (raw_url)
760
0
    display_state->url = transport_anonymize_url(raw_url);
761
0
  else
762
0
    display_state->url = xstrdup("foreign");
763
764
0
  display_state->url_len = strlen(display_state->url);
765
0
  for (i = display_state->url_len - 1; display_state->url[i] == '/' && 0 <= i; i--)
766
0
    ;
767
0
  display_state->url_len = i + 1;
768
0
  if (4 < i && !strncmp(".git", display_state->url + i - 3, 4))
769
0
    display_state->url_len = i - 3;
770
771
0
  if (verbosity < 0)
772
0
    return;
773
774
0
  switch (display_state->format) {
775
0
  case DISPLAY_FORMAT_FULL:
776
0
  case DISPLAY_FORMAT_COMPACT:
777
0
    display_state->refcol_width = refcol_width(ref_map,
778
0
                 display_state->format == DISPLAY_FORMAT_COMPACT);
779
0
    break;
780
0
  case DISPLAY_FORMAT_PORCELAIN:
781
    /* We don't need to precompute anything here. */
782
0
    break;
783
0
  default:
784
0
    BUG("unexpected display format %d", display_state->format);
785
0
  }
786
0
}
787
788
static void display_state_release(struct display_state *display_state)
789
0
{
790
0
  strbuf_release(&display_state->buf);
791
0
  free(display_state->url);
792
0
}
793
794
static void print_remote_to_local(struct display_state *display_state,
795
          const char *remote, const char *local)
796
0
{
797
0
  strbuf_addf(&display_state->buf, "%-*s -> %s",
798
0
        display_state->refcol_width, remote, local);
799
0
}
800
801
static int find_and_replace(struct strbuf *haystack,
802
          const char *needle,
803
          const char *placeholder)
804
0
{
805
0
  const char *p = NULL;
806
0
  int plen, nlen;
807
808
0
  nlen = strlen(needle);
809
0
  if (ends_with(haystack->buf, needle))
810
0
    p = haystack->buf + haystack->len - nlen;
811
0
  else
812
0
    p = strstr(haystack->buf, needle);
813
0
  if (!p)
814
0
    return 0;
815
816
0
  if (p > haystack->buf && p[-1] != '/')
817
0
    return 0;
818
819
0
  plen = strlen(p);
820
0
  if (plen > nlen && p[nlen] != '/')
821
0
    return 0;
822
823
0
  strbuf_splice(haystack, p - haystack->buf, nlen,
824
0
          placeholder, strlen(placeholder));
825
0
  return 1;
826
0
}
827
828
static void print_compact(struct display_state *display_state,
829
        const char *remote, const char *local)
830
0
{
831
0
  struct strbuf r = STRBUF_INIT;
832
0
  struct strbuf l = STRBUF_INIT;
833
834
0
  if (!strcmp(remote, local)) {
835
0
    strbuf_addf(&display_state->buf, "%-*s -> *", display_state->refcol_width, remote);
836
0
    return;
837
0
  }
838
839
0
  strbuf_addstr(&r, remote);
840
0
  strbuf_addstr(&l, local);
841
842
0
  if (!find_and_replace(&r, local, "*"))
843
0
    find_and_replace(&l, remote, "*");
844
0
  print_remote_to_local(display_state, r.buf, l.buf);
845
846
0
  strbuf_release(&r);
847
0
  strbuf_release(&l);
848
0
}
849
850
static void display_ref_update(struct display_state *display_state, char code,
851
             const char *summary, const char *error,
852
             const char *remote, const char *local,
853
             const struct object_id *old_oid,
854
             const struct object_id *new_oid,
855
             int summary_width)
856
0
{
857
0
  FILE *f = stderr;
858
859
0
  if (verbosity < 0)
860
0
    return;
861
862
0
  strbuf_reset(&display_state->buf);
863
864
0
  switch (display_state->format) {
865
0
  case DISPLAY_FORMAT_FULL:
866
0
  case DISPLAY_FORMAT_COMPACT: {
867
0
    int width;
868
869
0
    if (!display_state->shown_url) {
870
0
      strbuf_addf(&display_state->buf, _("From %.*s\n"),
871
0
            display_state->url_len, display_state->url);
872
0
      display_state->shown_url = 1;
873
0
    }
874
875
0
    width = (summary_width + strlen(summary) - gettext_width(summary));
876
0
    remote = prettify_refname(remote);
877
0
    local = prettify_refname(local);
878
879
0
    strbuf_addf(&display_state->buf, " %c %-*s ", code, width, summary);
880
881
0
    if (display_state->format != DISPLAY_FORMAT_COMPACT)
882
0
      print_remote_to_local(display_state, remote, local);
883
0
    else
884
0
      print_compact(display_state, remote, local);
885
886
0
    if (error)
887
0
      strbuf_addf(&display_state->buf, "  (%s)", error);
888
889
0
    break;
890
0
  }
891
0
  case DISPLAY_FORMAT_PORCELAIN:
892
0
    strbuf_addf(&display_state->buf, "%c %s %s %s", code,
893
0
          oid_to_hex(old_oid), oid_to_hex(new_oid), local);
894
0
    f = stdout;
895
0
    break;
896
0
  default:
897
0
    BUG("unexpected display format %d", display_state->format);
898
0
  };
899
0
  strbuf_addch(&display_state->buf, '\n');
900
901
0
  fputs(display_state->buf.buf, f);
902
0
}
903
904
static int update_local_ref(struct ref *ref,
905
          struct ref_transaction *transaction,
906
          struct display_state *display_state,
907
          const struct ref *remote_ref,
908
          int summary_width,
909
          const struct fetch_config *config)
910
0
{
911
0
  struct commit *current = NULL, *updated;
912
0
  int fast_forward = 0;
913
914
0
  if (!repo_has_object_file(the_repository, &ref->new_oid))
915
0
    die(_("object %s not found"), oid_to_hex(&ref->new_oid));
916
917
0
  if (oideq(&ref->old_oid, &ref->new_oid)) {
918
0
    if (verbosity > 0)
919
0
      display_ref_update(display_state, '=', _("[up to date]"), NULL,
920
0
             remote_ref->name, ref->name,
921
0
             &ref->old_oid, &ref->new_oid, summary_width);
922
0
    return 0;
923
0
  }
924
925
0
  if (!update_head_ok &&
926
0
      !is_null_oid(&ref->old_oid) &&
927
0
      branch_checked_out(ref->name)) {
928
    /*
929
     * If this is the head, and it's not okay to update
930
     * the head, and the old value of the head isn't empty...
931
     */
932
0
    display_ref_update(display_state, '!', _("[rejected]"),
933
0
           _("can't fetch into checked-out branch"),
934
0
           remote_ref->name, ref->name,
935
0
           &ref->old_oid, &ref->new_oid, summary_width);
936
0
    return 1;
937
0
  }
938
939
0
  if (!is_null_oid(&ref->old_oid) &&
940
0
      starts_with(ref->name, "refs/tags/")) {
941
0
    if (force || ref->force) {
942
0
      int r;
943
0
      r = s_update_ref("updating tag", ref, transaction, 0);
944
0
      display_ref_update(display_state, r ? '!' : 't', _("[tag update]"),
945
0
             r ? _("unable to update local ref") : NULL,
946
0
             remote_ref->name, ref->name,
947
0
             &ref->old_oid, &ref->new_oid, summary_width);
948
0
      return r;
949
0
    } else {
950
0
      display_ref_update(display_state, '!', _("[rejected]"),
951
0
             _("would clobber existing tag"),
952
0
             remote_ref->name, ref->name,
953
0
             &ref->old_oid, &ref->new_oid, summary_width);
954
0
      return 1;
955
0
    }
956
0
  }
957
958
0
  current = lookup_commit_reference_gently(the_repository,
959
0
             &ref->old_oid, 1);
960
0
  updated = lookup_commit_reference_gently(the_repository,
961
0
             &ref->new_oid, 1);
962
0
  if (!current || !updated) {
963
0
    const char *msg;
964
0
    const char *what;
965
0
    int r;
966
    /*
967
     * Nicely describe the new ref we're fetching.
968
     * Base this on the remote's ref name, as it's
969
     * more likely to follow a standard layout.
970
     */
971
0
    if (starts_with(remote_ref->name, "refs/tags/")) {
972
0
      msg = "storing tag";
973
0
      what = _("[new tag]");
974
0
    } else if (starts_with(remote_ref->name, "refs/heads/")) {
975
0
      msg = "storing head";
976
0
      what = _("[new branch]");
977
0
    } else {
978
0
      msg = "storing ref";
979
0
      what = _("[new ref]");
980
0
    }
981
982
0
    r = s_update_ref(msg, ref, transaction, 0);
983
0
    display_ref_update(display_state, r ? '!' : '*', what,
984
0
           r ? _("unable to update local ref") : NULL,
985
0
           remote_ref->name, ref->name,
986
0
           &ref->old_oid, &ref->new_oid, summary_width);
987
0
    return r;
988
0
  }
989
990
0
  if (config->show_forced_updates) {
991
0
    uint64_t t_before = getnanotime();
992
0
    fast_forward = repo_in_merge_bases(the_repository, current,
993
0
               updated);
994
0
    if (fast_forward < 0)
995
0
      exit(128);
996
0
    forced_updates_ms += (getnanotime() - t_before) / 1000000;
997
0
  } else {
998
0
    fast_forward = 1;
999
0
  }
1000
1001
0
  if (fast_forward) {
1002
0
    struct strbuf quickref = STRBUF_INIT;
1003
0
    int r;
1004
1005
0
    strbuf_add_unique_abbrev(&quickref, &current->object.oid, DEFAULT_ABBREV);
1006
0
    strbuf_addstr(&quickref, "..");
1007
0
    strbuf_add_unique_abbrev(&quickref, &ref->new_oid, DEFAULT_ABBREV);
1008
0
    r = s_update_ref("fast-forward", ref, transaction, 1);
1009
0
    display_ref_update(display_state, r ? '!' : ' ', quickref.buf,
1010
0
           r ? _("unable to update local ref") : NULL,
1011
0
           remote_ref->name, ref->name,
1012
0
           &ref->old_oid, &ref->new_oid, summary_width);
1013
0
    strbuf_release(&quickref);
1014
0
    return r;
1015
0
  } else if (force || ref->force) {
1016
0
    struct strbuf quickref = STRBUF_INIT;
1017
0
    int r;
1018
0
    strbuf_add_unique_abbrev(&quickref, &current->object.oid, DEFAULT_ABBREV);
1019
0
    strbuf_addstr(&quickref, "...");
1020
0
    strbuf_add_unique_abbrev(&quickref, &ref->new_oid, DEFAULT_ABBREV);
1021
0
    r = s_update_ref("forced-update", ref, transaction, 1);
1022
0
    display_ref_update(display_state, r ? '!' : '+', quickref.buf,
1023
0
           r ? _("unable to update local ref") : _("forced update"),
1024
0
           remote_ref->name, ref->name,
1025
0
           &ref->old_oid, &ref->new_oid, summary_width);
1026
0
    strbuf_release(&quickref);
1027
0
    return r;
1028
0
  } else {
1029
0
    display_ref_update(display_state, '!', _("[rejected]"), _("non-fast-forward"),
1030
0
           remote_ref->name, ref->name,
1031
0
           &ref->old_oid, &ref->new_oid, summary_width);
1032
0
    return 1;
1033
0
  }
1034
0
}
1035
1036
static const struct object_id *iterate_ref_map(void *cb_data)
1037
0
{
1038
0
  struct ref **rm = cb_data;
1039
0
  struct ref *ref = *rm;
1040
1041
0
  while (ref && ref->status == REF_STATUS_REJECT_SHALLOW)
1042
0
    ref = ref->next;
1043
0
  if (!ref)
1044
0
    return NULL;
1045
0
  *rm = ref->next;
1046
0
  return &ref->old_oid;
1047
0
}
1048
1049
struct fetch_head {
1050
  FILE *fp;
1051
  struct strbuf buf;
1052
};
1053
1054
static int open_fetch_head(struct fetch_head *fetch_head)
1055
0
{
1056
0
  const char *filename = git_path_fetch_head(the_repository);
1057
1058
0
  if (write_fetch_head) {
1059
0
    fetch_head->fp = fopen(filename, "a");
1060
0
    if (!fetch_head->fp)
1061
0
      return error_errno(_("cannot open '%s'"), filename);
1062
0
    strbuf_init(&fetch_head->buf, 0);
1063
0
  } else {
1064
0
    fetch_head->fp = NULL;
1065
0
  }
1066
1067
0
  return 0;
1068
0
}
1069
1070
static void append_fetch_head(struct fetch_head *fetch_head,
1071
            const struct object_id *old_oid,
1072
            enum fetch_head_status fetch_head_status,
1073
            const char *note,
1074
            const char *url, size_t url_len)
1075
0
{
1076
0
  char old_oid_hex[GIT_MAX_HEXSZ + 1];
1077
0
  const char *merge_status_marker;
1078
0
  size_t i;
1079
1080
0
  if (!fetch_head->fp)
1081
0
    return;
1082
1083
0
  switch (fetch_head_status) {
1084
0
  case FETCH_HEAD_NOT_FOR_MERGE:
1085
0
    merge_status_marker = "not-for-merge";
1086
0
    break;
1087
0
  case FETCH_HEAD_MERGE:
1088
0
    merge_status_marker = "";
1089
0
    break;
1090
0
  default:
1091
    /* do not write anything to FETCH_HEAD */
1092
0
    return;
1093
0
  }
1094
1095
0
  strbuf_addf(&fetch_head->buf, "%s\t%s\t%s",
1096
0
        oid_to_hex_r(old_oid_hex, old_oid), merge_status_marker, note);
1097
0
  for (i = 0; i < url_len; ++i)
1098
0
    if ('\n' == url[i])
1099
0
      strbuf_addstr(&fetch_head->buf, "\\n");
1100
0
    else
1101
0
      strbuf_addch(&fetch_head->buf, url[i]);
1102
0
  strbuf_addch(&fetch_head->buf, '\n');
1103
1104
  /*
1105
   * When using an atomic fetch, we do not want to update FETCH_HEAD if
1106
   * any of the reference updates fails. We thus have to write all
1107
   * updates to a buffer first and only commit it as soon as all
1108
   * references have been successfully updated.
1109
   */
1110
0
  if (!atomic_fetch) {
1111
0
    strbuf_write(&fetch_head->buf, fetch_head->fp);
1112
0
    strbuf_reset(&fetch_head->buf);
1113
0
  }
1114
0
}
1115
1116
static void commit_fetch_head(struct fetch_head *fetch_head)
1117
0
{
1118
0
  if (!fetch_head->fp || !atomic_fetch)
1119
0
    return;
1120
0
  strbuf_write(&fetch_head->buf, fetch_head->fp);
1121
0
}
1122
1123
static void close_fetch_head(struct fetch_head *fetch_head)
1124
0
{
1125
0
  if (!fetch_head->fp)
1126
0
    return;
1127
1128
0
  fclose(fetch_head->fp);
1129
0
  strbuf_release(&fetch_head->buf);
1130
0
}
1131
1132
static const char warn_show_forced_updates[] =
1133
N_("fetch normally indicates which branches had a forced update,\n"
1134
   "but that check has been disabled; to re-enable, use '--show-forced-updates'\n"
1135
   "flag or run 'git config fetch.showForcedUpdates true'");
1136
static const char warn_time_show_forced_updates[] =
1137
N_("it took %.2f seconds to check forced updates; you can use\n"
1138
   "'--no-show-forced-updates' or run 'git config fetch.showForcedUpdates false'\n"
1139
   "to avoid this check\n");
1140
1141
static int store_updated_refs(struct display_state *display_state,
1142
            const char *remote_name,
1143
            int connectivity_checked,
1144
            struct ref_transaction *transaction, struct ref *ref_map,
1145
            struct fetch_head *fetch_head,
1146
            const struct fetch_config *config)
1147
0
{
1148
0
  int rc = 0;
1149
0
  struct strbuf note = STRBUF_INIT;
1150
0
  const char *what, *kind;
1151
0
  struct ref *rm;
1152
0
  int want_status;
1153
0
  int summary_width = 0;
1154
1155
0
  if (verbosity >= 0)
1156
0
    summary_width = transport_summary_width(ref_map);
1157
1158
0
  if (!connectivity_checked) {
1159
0
    struct check_connected_options opt = CHECK_CONNECTED_INIT;
1160
1161
0
    opt.exclude_hidden_refs_section = "fetch";
1162
0
    rm = ref_map;
1163
0
    if (check_connected(iterate_ref_map, &rm, &opt)) {
1164
0
      rc = error(_("%s did not send all necessary objects"),
1165
0
           display_state->url);
1166
0
      goto abort;
1167
0
    }
1168
0
  }
1169
1170
  /*
1171
   * We do a pass for each fetch_head_status type in their enum order, so
1172
   * merged entries are written before not-for-merge. That lets readers
1173
   * use FETCH_HEAD as a refname to refer to the ref to be merged.
1174
   */
1175
0
  for (want_status = FETCH_HEAD_MERGE;
1176
0
       want_status <= FETCH_HEAD_IGNORE;
1177
0
       want_status++) {
1178
0
    for (rm = ref_map; rm; rm = rm->next) {
1179
0
      struct ref *ref = NULL;
1180
1181
0
      if (rm->status == REF_STATUS_REJECT_SHALLOW) {
1182
0
        if (want_status == FETCH_HEAD_MERGE)
1183
0
          warning(_("rejected %s because shallow roots are not allowed to be updated"),
1184
0
            rm->peer_ref ? rm->peer_ref->name : rm->name);
1185
0
        continue;
1186
0
      }
1187
1188
      /*
1189
       * When writing FETCH_HEAD we need to determine whether
1190
       * we already have the commit or not. If not, then the
1191
       * reference is not for merge and needs to be written
1192
       * to the reflog after other commits which we already
1193
       * have. We're not interested in this property though
1194
       * in case FETCH_HEAD is not to be updated, so we can
1195
       * skip the classification in that case.
1196
       */
1197
0
      if (fetch_head->fp) {
1198
0
        struct commit *commit = NULL;
1199
1200
        /*
1201
         * References in "refs/tags/" are often going to point
1202
         * to annotated tags, which are not part of the
1203
         * commit-graph. We thus only try to look up refs in
1204
         * the graph which are not in that namespace to not
1205
         * regress performance in repositories with many
1206
         * annotated tags.
1207
         */
1208
0
        if (!starts_with(rm->name, "refs/tags/"))
1209
0
          commit = lookup_commit_in_graph(the_repository, &rm->old_oid);
1210
0
        if (!commit) {
1211
0
          commit = lookup_commit_reference_gently(the_repository,
1212
0
                    &rm->old_oid,
1213
0
                    1);
1214
0
          if (!commit)
1215
0
            rm->fetch_head_status = FETCH_HEAD_NOT_FOR_MERGE;
1216
0
        }
1217
0
      }
1218
1219
0
      if (rm->fetch_head_status != want_status)
1220
0
        continue;
1221
1222
0
      if (rm->peer_ref) {
1223
0
        ref = alloc_ref(rm->peer_ref->name);
1224
0
        oidcpy(&ref->old_oid, &rm->peer_ref->old_oid);
1225
0
        oidcpy(&ref->new_oid, &rm->old_oid);
1226
0
        ref->force = rm->peer_ref->force;
1227
0
      }
1228
1229
0
      if (config->recurse_submodules != RECURSE_SUBMODULES_OFF &&
1230
0
          (!rm->peer_ref || !oideq(&ref->old_oid, &ref->new_oid))) {
1231
0
        check_for_new_submodule_commits(&rm->old_oid);
1232
0
      }
1233
1234
0
      if (!strcmp(rm->name, "HEAD")) {
1235
0
        kind = "";
1236
0
        what = "";
1237
0
      } else if (skip_prefix(rm->name, "refs/heads/", &what)) {
1238
0
        kind = "branch";
1239
0
      } else if (skip_prefix(rm->name, "refs/tags/", &what)) {
1240
0
        kind = "tag";
1241
0
      } else if (skip_prefix(rm->name, "refs/remotes/", &what)) {
1242
0
        kind = "remote-tracking branch";
1243
0
      } else {
1244
0
        kind = "";
1245
0
        what = rm->name;
1246
0
      }
1247
1248
0
      strbuf_reset(&note);
1249
0
      if (*what) {
1250
0
        if (*kind)
1251
0
          strbuf_addf(&note, "%s ", kind);
1252
0
        strbuf_addf(&note, "'%s' of ", what);
1253
0
      }
1254
1255
0
      append_fetch_head(fetch_head, &rm->old_oid,
1256
0
            rm->fetch_head_status,
1257
0
            note.buf, display_state->url,
1258
0
            display_state->url_len);
1259
1260
0
      if (ref) {
1261
0
        rc |= update_local_ref(ref, transaction, display_state,
1262
0
                   rm, summary_width, config);
1263
0
        free(ref);
1264
0
      } else if (write_fetch_head || dry_run) {
1265
        /*
1266
         * Display fetches written to FETCH_HEAD (or
1267
         * would be written to FETCH_HEAD, if --dry-run
1268
         * is set).
1269
         */
1270
0
        display_ref_update(display_state, '*',
1271
0
               *kind ? kind : "branch", NULL,
1272
0
               rm->name,
1273
0
               "FETCH_HEAD",
1274
0
               &rm->new_oid, &rm->old_oid,
1275
0
               summary_width);
1276
0
      }
1277
0
    }
1278
0
  }
1279
1280
0
  if (rc & STORE_REF_ERROR_DF_CONFLICT)
1281
0
    error(_("some local refs could not be updated; try running\n"
1282
0
          " 'git remote prune %s' to remove any old, conflicting "
1283
0
          "branches"), remote_name);
1284
1285
0
  if (advice_enabled(ADVICE_FETCH_SHOW_FORCED_UPDATES)) {
1286
0
    if (!config->show_forced_updates) {
1287
0
      warning(_(warn_show_forced_updates));
1288
0
    } else if (forced_updates_ms > FORCED_UPDATES_DELAY_WARNING_IN_MS) {
1289
0
      warning(_(warn_time_show_forced_updates),
1290
0
        forced_updates_ms / 1000.0);
1291
0
    }
1292
0
  }
1293
1294
0
 abort:
1295
0
  strbuf_release(&note);
1296
0
  return rc;
1297
0
}
1298
1299
/*
1300
 * We would want to bypass the object transfer altogether if
1301
 * everything we are going to fetch already exists and is connected
1302
 * locally.
1303
 */
1304
static int check_exist_and_connected(struct ref *ref_map)
1305
0
{
1306
0
  struct ref *rm = ref_map;
1307
0
  struct check_connected_options opt = CHECK_CONNECTED_INIT;
1308
0
  struct ref *r;
1309
1310
  /*
1311
   * If we are deepening a shallow clone we already have these
1312
   * objects reachable.  Running rev-list here will return with
1313
   * a good (0) exit status and we'll bypass the fetch that we
1314
   * really need to perform.  Claiming failure now will ensure
1315
   * we perform the network exchange to deepen our history.
1316
   */
1317
0
  if (deepen)
1318
0
    return -1;
1319
1320
  /*
1321
   * Similarly, if we need to refetch, we always want to perform a full
1322
   * fetch ignoring existing objects.
1323
   */
1324
0
  if (refetch)
1325
0
    return -1;
1326
1327
1328
  /*
1329
   * check_connected() allows objects to merely be promised, but
1330
   * we need all direct targets to exist.
1331
   */
1332
0
  for (r = rm; r; r = r->next) {
1333
0
    if (!repo_has_object_file_with_flags(the_repository, &r->old_oid,
1334
0
                 OBJECT_INFO_SKIP_FETCH_OBJECT))
1335
0
      return -1;
1336
0
  }
1337
1338
0
  opt.quiet = 1;
1339
0
  opt.exclude_hidden_refs_section = "fetch";
1340
0
  return check_connected(iterate_ref_map, &rm, &opt);
1341
0
}
1342
1343
static int fetch_and_consume_refs(struct display_state *display_state,
1344
          struct transport *transport,
1345
          struct ref_transaction *transaction,
1346
          struct ref *ref_map,
1347
          struct fetch_head *fetch_head,
1348
          const struct fetch_config *config)
1349
0
{
1350
0
  int connectivity_checked = 1;
1351
0
  int ret;
1352
1353
  /*
1354
   * We don't need to perform a fetch in case we can already satisfy all
1355
   * refs.
1356
   */
1357
0
  ret = check_exist_and_connected(ref_map);
1358
0
  if (ret) {
1359
0
    trace2_region_enter("fetch", "fetch_refs", the_repository);
1360
0
    ret = transport_fetch_refs(transport, ref_map);
1361
0
    trace2_region_leave("fetch", "fetch_refs", the_repository);
1362
0
    if (ret)
1363
0
      goto out;
1364
0
    connectivity_checked = transport->smart_options ?
1365
0
      transport->smart_options->connectivity_checked : 0;
1366
0
  }
1367
1368
0
  trace2_region_enter("fetch", "consume_refs", the_repository);
1369
0
  ret = store_updated_refs(display_state, transport->remote->name,
1370
0
         connectivity_checked, transaction, ref_map,
1371
0
         fetch_head, config);
1372
0
  trace2_region_leave("fetch", "consume_refs", the_repository);
1373
1374
0
out:
1375
0
  transport_unlock_pack(transport, 0);
1376
0
  return ret;
1377
0
}
1378
1379
static int prune_refs(struct display_state *display_state,
1380
          struct refspec *rs,
1381
          struct ref_transaction *transaction,
1382
          struct ref *ref_map)
1383
0
{
1384
0
  int result = 0;
1385
0
  struct ref *ref, *stale_refs = get_stale_heads(rs, ref_map);
1386
0
  struct strbuf err = STRBUF_INIT;
1387
0
  const char *dangling_msg = dry_run
1388
0
    ? _("   (%s will become dangling)")
1389
0
    : _("   (%s has become dangling)");
1390
1391
0
  if (!dry_run) {
1392
0
    if (transaction) {
1393
0
      for (ref = stale_refs; ref; ref = ref->next) {
1394
0
        result = ref_transaction_delete(transaction, ref->name, NULL,
1395
0
                NULL, 0, "fetch: prune", &err);
1396
0
        if (result)
1397
0
          goto cleanup;
1398
0
      }
1399
0
    } else {
1400
0
      struct string_list refnames = STRING_LIST_INIT_NODUP;
1401
1402
0
      for (ref = stale_refs; ref; ref = ref->next)
1403
0
        string_list_append(&refnames, ref->name);
1404
1405
0
      result = refs_delete_refs(get_main_ref_store(the_repository),
1406
0
              "fetch: prune", &refnames,
1407
0
              0);
1408
0
      string_list_clear(&refnames, 0);
1409
0
    }
1410
0
  }
1411
1412
0
  if (verbosity >= 0) {
1413
0
    int summary_width = transport_summary_width(stale_refs);
1414
1415
0
    for (ref = stale_refs; ref; ref = ref->next) {
1416
0
      display_ref_update(display_state, '-', _("[deleted]"), NULL,
1417
0
             _("(none)"), ref->name,
1418
0
             &ref->new_oid, &ref->old_oid,
1419
0
             summary_width);
1420
0
      refs_warn_dangling_symref(get_main_ref_store(the_repository),
1421
0
              stderr, dangling_msg, ref->name);
1422
0
    }
1423
0
  }
1424
1425
0
cleanup:
1426
0
  strbuf_release(&err);
1427
0
  free_refs(stale_refs);
1428
0
  return result;
1429
0
}
1430
1431
static void check_not_current_branch(struct ref *ref_map)
1432
0
{
1433
0
  const char *path;
1434
0
  for (; ref_map; ref_map = ref_map->next)
1435
0
    if (ref_map->peer_ref &&
1436
0
        starts_with(ref_map->peer_ref->name, "refs/heads/") &&
1437
0
        (path = branch_checked_out(ref_map->peer_ref->name)))
1438
0
      die(_("refusing to fetch into branch '%s' "
1439
0
            "checked out at '%s'"),
1440
0
          ref_map->peer_ref->name, path);
1441
0
}
1442
1443
static int truncate_fetch_head(void)
1444
0
{
1445
0
  const char *filename = git_path_fetch_head(the_repository);
1446
0
  FILE *fp = fopen_for_writing(filename);
1447
1448
0
  if (!fp)
1449
0
    return error_errno(_("cannot open '%s'"), filename);
1450
0
  fclose(fp);
1451
0
  return 0;
1452
0
}
1453
1454
static void set_option(struct transport *transport, const char *name, const char *value)
1455
0
{
1456
0
  int r = transport_set_option(transport, name, value);
1457
0
  if (r < 0)
1458
0
    die(_("option \"%s\" value \"%s\" is not valid for %s"),
1459
0
        name, value, transport->url);
1460
0
  if (r > 0)
1461
0
    warning(_("option \"%s\" is ignored for %s"),
1462
0
      name, transport->url);
1463
0
}
1464
1465
1466
static int add_oid(const char *refname UNUSED,
1467
       const char *referent UNUSED,
1468
       const struct object_id *oid,
1469
       int flags UNUSED, void *cb_data)
1470
0
{
1471
0
  struct oid_array *oids = cb_data;
1472
1473
0
  oid_array_append(oids, oid);
1474
0
  return 0;
1475
0
}
1476
1477
static void add_negotiation_tips(struct git_transport_options *smart_options)
1478
0
{
1479
0
  struct oid_array *oids = xcalloc(1, sizeof(*oids));
1480
0
  int i;
1481
1482
0
  for (i = 0; i < negotiation_tip.nr; i++) {
1483
0
    const char *s = negotiation_tip.items[i].string;
1484
0
    int old_nr;
1485
0
    if (!has_glob_specials(s)) {
1486
0
      struct object_id oid;
1487
0
      if (repo_get_oid(the_repository, s, &oid))
1488
0
        die(_("%s is not a valid object"), s);
1489
0
      if (!has_object(the_repository, &oid, 0))
1490
0
        die(_("the object %s does not exist"), s);
1491
0
      oid_array_append(oids, &oid);
1492
0
      continue;
1493
0
    }
1494
0
    old_nr = oids->nr;
1495
0
    refs_for_each_glob_ref(get_main_ref_store(the_repository),
1496
0
               add_oid, s, oids);
1497
0
    if (old_nr == oids->nr)
1498
0
      warning("ignoring --negotiation-tip=%s because it does not match any refs",
1499
0
        s);
1500
0
  }
1501
0
  smart_options->negotiation_tips = oids;
1502
0
}
1503
1504
static struct transport *prepare_transport(struct remote *remote, int deepen)
1505
0
{
1506
0
  struct transport *transport;
1507
1508
0
  transport = transport_get(remote, NULL);
1509
0
  transport_set_verbosity(transport, verbosity, progress);
1510
0
  transport->family = family;
1511
0
  if (upload_pack)
1512
0
    set_option(transport, TRANS_OPT_UPLOADPACK, upload_pack);
1513
0
  if (keep)
1514
0
    set_option(transport, TRANS_OPT_KEEP, "yes");
1515
0
  if (depth)
1516
0
    set_option(transport, TRANS_OPT_DEPTH, depth);
1517
0
  if (deepen && deepen_since)
1518
0
    set_option(transport, TRANS_OPT_DEEPEN_SINCE, deepen_since);
1519
0
  if (deepen && deepen_not.nr)
1520
0
    set_option(transport, TRANS_OPT_DEEPEN_NOT,
1521
0
         (const char *)&deepen_not);
1522
0
  if (deepen_relative)
1523
0
    set_option(transport, TRANS_OPT_DEEPEN_RELATIVE, "yes");
1524
0
  if (update_shallow)
1525
0
    set_option(transport, TRANS_OPT_UPDATE_SHALLOW, "yes");
1526
0
  if (refetch)
1527
0
    set_option(transport, TRANS_OPT_REFETCH, "yes");
1528
0
  if (filter_options.choice) {
1529
0
    const char *spec =
1530
0
      expand_list_objects_filter_spec(&filter_options);
1531
0
    set_option(transport, TRANS_OPT_LIST_OBJECTS_FILTER, spec);
1532
0
    set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
1533
0
  }
1534
0
  if (negotiation_tip.nr) {
1535
0
    if (transport->smart_options)
1536
0
      add_negotiation_tips(transport->smart_options);
1537
0
    else
1538
0
      warning("ignoring --negotiation-tip because the protocol does not support it");
1539
0
  }
1540
0
  return transport;
1541
0
}
1542
1543
static int backfill_tags(struct display_state *display_state,
1544
       struct transport *transport,
1545
       struct ref_transaction *transaction,
1546
       struct ref *ref_map,
1547
       struct fetch_head *fetch_head,
1548
       const struct fetch_config *config)
1549
0
{
1550
0
  int retcode, cannot_reuse;
1551
1552
  /*
1553
   * Once we have set TRANS_OPT_DEEPEN_SINCE, we can't unset it
1554
   * when remote helper is used (setting it to an empty string
1555
   * is not unsetting). We could extend the remote helper
1556
   * protocol for that, but for now, just force a new connection
1557
   * without deepen-since. Similar story for deepen-not.
1558
   */
1559
0
  cannot_reuse = transport->cannot_reuse ||
1560
0
    deepen_since || deepen_not.nr;
1561
0
  if (cannot_reuse) {
1562
0
    gsecondary = prepare_transport(transport->remote, 0);
1563
0
    transport = gsecondary;
1564
0
  }
1565
1566
0
  transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
1567
0
  transport_set_option(transport, TRANS_OPT_DEPTH, "0");
1568
0
  transport_set_option(transport, TRANS_OPT_DEEPEN_RELATIVE, NULL);
1569
0
  retcode = fetch_and_consume_refs(display_state, transport, transaction, ref_map,
1570
0
           fetch_head, config);
1571
1572
0
  if (gsecondary) {
1573
0
    transport_disconnect(gsecondary);
1574
0
    gsecondary = NULL;
1575
0
  }
1576
1577
0
  return retcode;
1578
0
}
1579
1580
static int do_fetch(struct transport *transport,
1581
        struct refspec *rs,
1582
        const struct fetch_config *config)
1583
0
{
1584
0
  struct ref_transaction *transaction = NULL;
1585
0
  struct ref *ref_map = NULL;
1586
0
  struct display_state display_state = { 0 };
1587
0
  int autotags = (transport->remote->fetch_tags == 1);
1588
0
  int retcode = 0;
1589
0
  const struct ref *remote_refs;
1590
0
  struct transport_ls_refs_options transport_ls_refs_options =
1591
0
    TRANSPORT_LS_REFS_OPTIONS_INIT;
1592
0
  int must_list_refs = 1;
1593
0
  struct fetch_head fetch_head = { 0 };
1594
0
  struct strbuf err = STRBUF_INIT;
1595
1596
0
  if (tags == TAGS_DEFAULT) {
1597
0
    if (transport->remote->fetch_tags == 2)
1598
0
      tags = TAGS_SET;
1599
0
    if (transport->remote->fetch_tags == -1)
1600
0
      tags = TAGS_UNSET;
1601
0
  }
1602
1603
  /* if not appending, truncate FETCH_HEAD */
1604
0
  if (!append && write_fetch_head) {
1605
0
    retcode = truncate_fetch_head();
1606
0
    if (retcode)
1607
0
      goto cleanup;
1608
0
  }
1609
1610
0
  if (rs->nr) {
1611
0
    int i;
1612
1613
0
    refspec_ref_prefixes(rs, &transport_ls_refs_options.ref_prefixes);
1614
1615
    /*
1616
     * We can avoid listing refs if all of them are exact
1617
     * OIDs
1618
     */
1619
0
    must_list_refs = 0;
1620
0
    for (i = 0; i < rs->nr; i++) {
1621
0
      if (!rs->items[i].exact_sha1) {
1622
0
        must_list_refs = 1;
1623
0
        break;
1624
0
      }
1625
0
    }
1626
0
  } else {
1627
0
    struct branch *branch = branch_get(NULL);
1628
1629
0
    if (transport->remote->fetch.nr)
1630
0
      refspec_ref_prefixes(&transport->remote->fetch,
1631
0
               &transport_ls_refs_options.ref_prefixes);
1632
0
    if (branch_has_merge_config(branch) &&
1633
0
        !strcmp(branch->remote_name, transport->remote->name)) {
1634
0
      int i;
1635
0
      for (i = 0; i < branch->merge_nr; i++) {
1636
0
        strvec_push(&transport_ls_refs_options.ref_prefixes,
1637
0
              branch->merge[i]->src);
1638
0
      }
1639
0
    }
1640
0
  }
1641
1642
0
  if (tags == TAGS_SET || tags == TAGS_DEFAULT) {
1643
0
    must_list_refs = 1;
1644
0
    if (transport_ls_refs_options.ref_prefixes.nr)
1645
0
      strvec_push(&transport_ls_refs_options.ref_prefixes,
1646
0
            "refs/tags/");
1647
0
  }
1648
1649
0
  if (must_list_refs) {
1650
0
    trace2_region_enter("fetch", "remote_refs", the_repository);
1651
0
    remote_refs = transport_get_remote_refs(transport,
1652
0
              &transport_ls_refs_options);
1653
0
    trace2_region_leave("fetch", "remote_refs", the_repository);
1654
0
  } else
1655
0
    remote_refs = NULL;
1656
1657
0
  transport_ls_refs_options_release(&transport_ls_refs_options);
1658
1659
0
  ref_map = get_ref_map(transport->remote, remote_refs, rs,
1660
0
            tags, &autotags);
1661
0
  if (!update_head_ok)
1662
0
    check_not_current_branch(ref_map);
1663
1664
0
  retcode = open_fetch_head(&fetch_head);
1665
0
  if (retcode)
1666
0
    goto cleanup;
1667
1668
0
  display_state_init(&display_state, ref_map, transport->url,
1669
0
         config->display_format);
1670
1671
0
  if (atomic_fetch) {
1672
0
    transaction = ref_store_transaction_begin(get_main_ref_store(the_repository),
1673
0
                &err);
1674
0
    if (!transaction) {
1675
0
      retcode = -1;
1676
0
      goto cleanup;
1677
0
    }
1678
0
  }
1679
1680
0
  if (tags == TAGS_DEFAULT && autotags)
1681
0
    transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
1682
0
  if (prune) {
1683
    /*
1684
     * We only prune based on refspecs specified
1685
     * explicitly (via command line or configuration); we
1686
     * don't care whether --tags was specified.
1687
     */
1688
0
    if (rs->nr) {
1689
0
      retcode = prune_refs(&display_state, rs, transaction, ref_map);
1690
0
    } else {
1691
0
      retcode = prune_refs(&display_state, &transport->remote->fetch,
1692
0
               transaction, ref_map);
1693
0
    }
1694
0
    if (retcode != 0)
1695
0
      retcode = 1;
1696
0
  }
1697
1698
0
  if (fetch_and_consume_refs(&display_state, transport, transaction, ref_map,
1699
0
           &fetch_head, config)) {
1700
0
    retcode = 1;
1701
0
    goto cleanup;
1702
0
  }
1703
1704
  /*
1705
   * If neither --no-tags nor --tags was specified, do automated tag
1706
   * following.
1707
   */
1708
0
  if (tags == TAGS_DEFAULT && autotags) {
1709
0
    struct ref *tags_ref_map = NULL, **tail = &tags_ref_map;
1710
1711
0
    find_non_local_tags(remote_refs, transaction, &tags_ref_map, &tail);
1712
0
    if (tags_ref_map) {
1713
      /*
1714
       * If backfilling of tags fails then we want to tell
1715
       * the user so, but we have to continue regardless to
1716
       * populate upstream information of the references we
1717
       * have already fetched above. The exception though is
1718
       * when `--atomic` is passed: in that case we'll abort
1719
       * the transaction and don't commit anything.
1720
       */
1721
0
      if (backfill_tags(&display_state, transport, transaction, tags_ref_map,
1722
0
            &fetch_head, config))
1723
0
        retcode = 1;
1724
0
    }
1725
1726
0
    free_refs(tags_ref_map);
1727
0
  }
1728
1729
0
  if (transaction) {
1730
0
    if (retcode)
1731
0
      goto cleanup;
1732
1733
0
    retcode = ref_transaction_commit(transaction, &err);
1734
0
    if (retcode)
1735
0
      goto cleanup;
1736
0
  }
1737
1738
0
  commit_fetch_head(&fetch_head);
1739
1740
0
  if (set_upstream) {
1741
0
    struct branch *branch = branch_get("HEAD");
1742
0
    struct ref *rm;
1743
0
    struct ref *source_ref = NULL;
1744
1745
    /*
1746
     * We're setting the upstream configuration for the
1747
     * current branch. The relevant upstream is the
1748
     * fetched branch that is meant to be merged with the
1749
     * current one, i.e. the one fetched to FETCH_HEAD.
1750
     *
1751
     * When there are several such branches, consider the
1752
     * request ambiguous and err on the safe side by doing
1753
     * nothing and just emit a warning.
1754
     */
1755
0
    for (rm = ref_map; rm; rm = rm->next) {
1756
0
      if (!rm->peer_ref) {
1757
0
        if (source_ref) {
1758
0
          warning(_("multiple branches detected, incompatible with --set-upstream"));
1759
0
          goto cleanup;
1760
0
        } else {
1761
0
          source_ref = rm;
1762
0
        }
1763
0
      }
1764
0
    }
1765
0
    if (source_ref) {
1766
0
      if (!branch) {
1767
0
        const char *shortname = source_ref->name;
1768
0
        skip_prefix(shortname, "refs/heads/", &shortname);
1769
1770
0
        warning(_("could not set upstream of HEAD to '%s' from '%s' when "
1771
0
            "it does not point to any branch."),
1772
0
          shortname, transport->remote->name);
1773
0
        goto cleanup;
1774
0
      }
1775
1776
0
      if (!strcmp(source_ref->name, "HEAD") ||
1777
0
          starts_with(source_ref->name, "refs/heads/"))
1778
0
        install_branch_config(0,
1779
0
                  branch->name,
1780
0
                  transport->remote->name,
1781
0
                  source_ref->name);
1782
0
      else if (starts_with(source_ref->name, "refs/remotes/"))
1783
0
        warning(_("not setting upstream for a remote remote-tracking branch"));
1784
0
      else if (starts_with(source_ref->name, "refs/tags/"))
1785
0
        warning(_("not setting upstream for a remote tag"));
1786
0
      else
1787
0
        warning(_("unknown branch type"));
1788
0
    } else {
1789
0
      warning(_("no source branch found;\n"
1790
0
          "you need to specify exactly one branch with the --set-upstream option"));
1791
0
    }
1792
0
  }
1793
1794
0
cleanup:
1795
0
  if (retcode) {
1796
0
    if (err.len) {
1797
0
      error("%s", err.buf);
1798
0
      strbuf_reset(&err);
1799
0
    }
1800
0
    if (transaction && ref_transaction_abort(transaction, &err) &&
1801
0
        err.len)
1802
0
      error("%s", err.buf);
1803
0
    transaction = NULL;
1804
0
  }
1805
1806
0
  if (transaction)
1807
0
    ref_transaction_free(transaction);
1808
0
  display_state_release(&display_state);
1809
0
  close_fetch_head(&fetch_head);
1810
0
  strbuf_release(&err);
1811
0
  free_refs(ref_map);
1812
0
  return retcode;
1813
0
}
1814
1815
static int get_one_remote_for_fetch(struct remote *remote, void *priv)
1816
0
{
1817
0
  struct string_list *list = priv;
1818
0
  if (!remote->skip_default_update)
1819
0
    string_list_append(list, remote->name);
1820
0
  return 0;
1821
0
}
1822
1823
struct remote_group_data {
1824
  const char *name;
1825
  struct string_list *list;
1826
};
1827
1828
static int get_remote_group(const char *key, const char *value,
1829
          const struct config_context *ctx UNUSED,
1830
          void *priv)
1831
0
{
1832
0
  struct remote_group_data *g = priv;
1833
1834
0
  if (skip_prefix(key, "remotes.", &key) && !strcmp(key, g->name)) {
1835
    /* split list by white space */
1836
0
    while (*value) {
1837
0
      size_t wordlen = strcspn(value, " \t\n");
1838
1839
0
      if (wordlen >= 1)
1840
0
        string_list_append_nodup(g->list,
1841
0
               xstrndup(value, wordlen));
1842
0
      value += wordlen + (value[wordlen] != '\0');
1843
0
    }
1844
0
  }
1845
1846
0
  return 0;
1847
0
}
1848
1849
static int add_remote_or_group(const char *name, struct string_list *list)
1850
0
{
1851
0
  int prev_nr = list->nr;
1852
0
  struct remote_group_data g;
1853
0
  g.name = name; g.list = list;
1854
1855
0
  git_config(get_remote_group, &g);
1856
0
  if (list->nr == prev_nr) {
1857
0
    struct remote *remote = remote_get(name);
1858
0
    if (!remote_is_configured(remote, 0))
1859
0
      return 0;
1860
0
    string_list_append(list, remote->name);
1861
0
  }
1862
0
  return 1;
1863
0
}
1864
1865
static void add_options_to_argv(struct strvec *argv,
1866
        const struct fetch_config *config)
1867
0
{
1868
0
  if (dry_run)
1869
0
    strvec_push(argv, "--dry-run");
1870
0
  if (prune != -1)
1871
0
    strvec_push(argv, prune ? "--prune" : "--no-prune");
1872
0
  if (prune_tags != -1)
1873
0
    strvec_push(argv, prune_tags ? "--prune-tags" : "--no-prune-tags");
1874
0
  if (update_head_ok)
1875
0
    strvec_push(argv, "--update-head-ok");
1876
0
  if (force)
1877
0
    strvec_push(argv, "--force");
1878
0
  if (keep)
1879
0
    strvec_push(argv, "--keep");
1880
0
  if (config->recurse_submodules == RECURSE_SUBMODULES_ON)
1881
0
    strvec_push(argv, "--recurse-submodules");
1882
0
  else if (config->recurse_submodules == RECURSE_SUBMODULES_OFF)
1883
0
    strvec_push(argv, "--no-recurse-submodules");
1884
0
  else if (config->recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
1885
0
    strvec_push(argv, "--recurse-submodules=on-demand");
1886
0
  if (tags == TAGS_SET)
1887
0
    strvec_push(argv, "--tags");
1888
0
  else if (tags == TAGS_UNSET)
1889
0
    strvec_push(argv, "--no-tags");
1890
0
  if (verbosity >= 2)
1891
0
    strvec_push(argv, "-v");
1892
0
  if (verbosity >= 1)
1893
0
    strvec_push(argv, "-v");
1894
0
  else if (verbosity < 0)
1895
0
    strvec_push(argv, "-q");
1896
0
  if (family == TRANSPORT_FAMILY_IPV4)
1897
0
    strvec_push(argv, "--ipv4");
1898
0
  else if (family == TRANSPORT_FAMILY_IPV6)
1899
0
    strvec_push(argv, "--ipv6");
1900
0
  if (!write_fetch_head)
1901
0
    strvec_push(argv, "--no-write-fetch-head");
1902
0
  if (config->display_format == DISPLAY_FORMAT_PORCELAIN)
1903
0
    strvec_pushf(argv, "--porcelain");
1904
0
}
1905
1906
/* Fetch multiple remotes in parallel */
1907
1908
struct parallel_fetch_state {
1909
  const char **argv;
1910
  struct string_list *remotes;
1911
  int next, result;
1912
  const struct fetch_config *config;
1913
};
1914
1915
static int fetch_next_remote(struct child_process *cp,
1916
           struct strbuf *out UNUSED,
1917
           void *cb, void **task_cb)
1918
0
{
1919
0
  struct parallel_fetch_state *state = cb;
1920
0
  char *remote;
1921
1922
0
  if (state->next < 0 || state->next >= state->remotes->nr)
1923
0
    return 0;
1924
1925
0
  remote = state->remotes->items[state->next++].string;
1926
0
  *task_cb = remote;
1927
1928
0
  strvec_pushv(&cp->args, state->argv);
1929
0
  strvec_push(&cp->args, remote);
1930
0
  cp->git_cmd = 1;
1931
1932
0
  if (verbosity >= 0 && state->config->display_format != DISPLAY_FORMAT_PORCELAIN)
1933
0
    printf(_("Fetching %s\n"), remote);
1934
1935
0
  return 1;
1936
0
}
1937
1938
static int fetch_failed_to_start(struct strbuf *out UNUSED,
1939
         void *cb, void *task_cb)
1940
0
{
1941
0
  struct parallel_fetch_state *state = cb;
1942
0
  const char *remote = task_cb;
1943
1944
0
  state->result = error(_("could not fetch %s"), remote);
1945
1946
0
  return 0;
1947
0
}
1948
1949
static int fetch_finished(int result, struct strbuf *out,
1950
        void *cb, void *task_cb)
1951
0
{
1952
0
  struct parallel_fetch_state *state = cb;
1953
0
  const char *remote = task_cb;
1954
1955
0
  if (result) {
1956
0
    strbuf_addf(out, _("could not fetch '%s' (exit code: %d)\n"),
1957
0
          remote, result);
1958
0
    state->result = -1;
1959
0
  }
1960
1961
0
  return 0;
1962
0
}
1963
1964
static int fetch_multiple(struct string_list *list, int max_children,
1965
        const struct fetch_config *config)
1966
0
{
1967
0
  int i, result = 0;
1968
0
  struct strvec argv = STRVEC_INIT;
1969
1970
0
  if (!append && write_fetch_head) {
1971
0
    int errcode = truncate_fetch_head();
1972
0
    if (errcode)
1973
0
      return errcode;
1974
0
  }
1975
1976
  /*
1977
   * Cancel out the fetch.bundleURI config when running subprocesses,
1978
   * to avoid fetching from the same bundle list multiple times.
1979
   */
1980
0
  strvec_pushl(&argv, "-c", "fetch.bundleURI=",
1981
0
         "fetch", "--append", "--no-auto-gc",
1982
0
         "--no-write-commit-graph", NULL);
1983
0
  add_options_to_argv(&argv, config);
1984
1985
0
  if (max_children != 1 && list->nr != 1) {
1986
0
    struct parallel_fetch_state state = { argv.v, list, 0, 0, config };
1987
0
    const struct run_process_parallel_opts opts = {
1988
0
      .tr2_category = "fetch",
1989
0
      .tr2_label = "parallel/fetch",
1990
1991
0
      .processes = max_children,
1992
1993
0
      .get_next_task = &fetch_next_remote,
1994
0
      .start_failure = &fetch_failed_to_start,
1995
0
      .task_finished = &fetch_finished,
1996
0
      .data = &state,
1997
0
    };
1998
1999
0
    strvec_push(&argv, "--end-of-options");
2000
2001
0
    run_processes_parallel(&opts);
2002
0
    result = state.result;
2003
0
  } else
2004
0
    for (i = 0; i < list->nr; i++) {
2005
0
      const char *name = list->items[i].string;
2006
0
      struct child_process cmd = CHILD_PROCESS_INIT;
2007
2008
0
      strvec_pushv(&cmd.args, argv.v);
2009
0
      strvec_push(&cmd.args, name);
2010
0
      if (verbosity >= 0 && config->display_format != DISPLAY_FORMAT_PORCELAIN)
2011
0
        printf(_("Fetching %s\n"), name);
2012
0
      cmd.git_cmd = 1;
2013
0
      if (run_command(&cmd)) {
2014
0
        error(_("could not fetch %s"), name);
2015
0
        result = 1;
2016
0
      }
2017
0
    }
2018
2019
0
  strvec_clear(&argv);
2020
0
  return !!result;
2021
0
}
2022
2023
/*
2024
 * Fetching from the promisor remote should use the given filter-spec
2025
 * or inherit the default filter-spec from the config.
2026
 */
2027
static inline void fetch_one_setup_partial(struct remote *remote)
2028
0
{
2029
  /*
2030
   * Explicit --no-filter argument overrides everything, regardless
2031
   * of any prior partial clones and fetches.
2032
   */
2033
0
  if (filter_options.no_filter)
2034
0
    return;
2035
2036
  /*
2037
   * If no prior partial clone/fetch and the current fetch DID NOT
2038
   * request a partial-fetch, do a normal fetch.
2039
   */
2040
0
  if (!repo_has_promisor_remote(the_repository) && !filter_options.choice)
2041
0
    return;
2042
2043
  /*
2044
   * If this is a partial-fetch request, we enable partial on
2045
   * this repo if not already enabled and remember the given
2046
   * filter-spec as the default for subsequent fetches to this
2047
   * remote if there is currently no default filter-spec.
2048
   */
2049
0
  if (filter_options.choice) {
2050
0
    partial_clone_register(remote->name, &filter_options);
2051
0
    return;
2052
0
  }
2053
2054
  /*
2055
   * Do a partial-fetch from the promisor remote using either the
2056
   * explicitly given filter-spec or inherit the filter-spec from
2057
   * the config.
2058
   */
2059
0
  if (!filter_options.choice)
2060
0
    partial_clone_get_default_filter_spec(&filter_options, remote->name);
2061
0
  return;
2062
0
}
2063
2064
static int fetch_one(struct remote *remote, int argc, const char **argv,
2065
         int prune_tags_ok, int use_stdin_refspecs,
2066
         const struct fetch_config *config)
2067
0
{
2068
0
  struct refspec rs = REFSPEC_INIT_FETCH;
2069
0
  int i;
2070
0
  int exit_code;
2071
0
  int maybe_prune_tags;
2072
0
  int remote_via_config = remote_is_configured(remote, 0);
2073
2074
0
  if (!remote)
2075
0
    die(_("no remote repository specified; please specify either a URL or a\n"
2076
0
          "remote name from which new revisions should be fetched"));
2077
2078
0
  gtransport = prepare_transport(remote, 1);
2079
2080
0
  if (prune < 0) {
2081
    /* no command line request */
2082
0
    if (0 <= remote->prune)
2083
0
      prune = remote->prune;
2084
0
    else if (0 <= config->prune)
2085
0
      prune = config->prune;
2086
0
    else
2087
0
      prune = PRUNE_BY_DEFAULT;
2088
0
  }
2089
2090
0
  if (prune_tags < 0) {
2091
    /* no command line request */
2092
0
    if (0 <= remote->prune_tags)
2093
0
      prune_tags = remote->prune_tags;
2094
0
    else if (0 <= config->prune_tags)
2095
0
      prune_tags = config->prune_tags;
2096
0
    else
2097
0
      prune_tags = PRUNE_TAGS_BY_DEFAULT;
2098
0
  }
2099
2100
0
  maybe_prune_tags = prune_tags_ok && prune_tags;
2101
0
  if (maybe_prune_tags && remote_via_config)
2102
0
    refspec_append(&remote->fetch, TAG_REFSPEC);
2103
2104
0
  if (maybe_prune_tags && (argc || !remote_via_config))
2105
0
    refspec_append(&rs, TAG_REFSPEC);
2106
2107
0
  for (i = 0; i < argc; i++) {
2108
0
    if (!strcmp(argv[i], "tag")) {
2109
0
      i++;
2110
0
      if (i >= argc)
2111
0
        die(_("you need to specify a tag name"));
2112
2113
0
      refspec_appendf(&rs, "refs/tags/%s:refs/tags/%s",
2114
0
          argv[i], argv[i]);
2115
0
    } else {
2116
0
      refspec_append(&rs, argv[i]);
2117
0
    }
2118
0
  }
2119
2120
0
  if (use_stdin_refspecs) {
2121
0
    struct strbuf line = STRBUF_INIT;
2122
0
    while (strbuf_getline_lf(&line, stdin) != EOF)
2123
0
      refspec_append(&rs, line.buf);
2124
0
    strbuf_release(&line);
2125
0
  }
2126
2127
0
  if (server_options.nr)
2128
0
    gtransport->server_options = &server_options;
2129
2130
0
  sigchain_push_common(unlock_pack_on_signal);
2131
0
  atexit(unlock_pack_atexit);
2132
0
  sigchain_push(SIGPIPE, SIG_IGN);
2133
0
  exit_code = do_fetch(gtransport, &rs, config);
2134
0
  sigchain_pop(SIGPIPE);
2135
0
  refspec_clear(&rs);
2136
0
  transport_disconnect(gtransport);
2137
0
  gtransport = NULL;
2138
0
  return exit_code;
2139
0
}
2140
2141
int cmd_fetch(int argc, const char **argv, const char *prefix)
2142
0
{
2143
0
  struct fetch_config config = {
2144
0
    .display_format = DISPLAY_FORMAT_FULL,
2145
0
    .prune = -1,
2146
0
    .prune_tags = -1,
2147
0
    .show_forced_updates = 1,
2148
0
    .recurse_submodules = RECURSE_SUBMODULES_DEFAULT,
2149
0
    .parallel = 1,
2150
0
    .submodule_fetch_jobs = -1,
2151
0
  };
2152
0
  const char *submodule_prefix = "";
2153
0
  const char *bundle_uri;
2154
0
  struct string_list list = STRING_LIST_INIT_DUP;
2155
0
  struct remote *remote = NULL;
2156
0
  int all = -1, multiple = 0;
2157
0
  int result = 0;
2158
0
  int prune_tags_ok = 1;
2159
0
  int enable_auto_gc = 1;
2160
0
  int unshallow = 0;
2161
0
  int max_jobs = -1;
2162
0
  int recurse_submodules_cli = RECURSE_SUBMODULES_DEFAULT;
2163
0
  int recurse_submodules_default = RECURSE_SUBMODULES_ON_DEMAND;
2164
0
  int fetch_write_commit_graph = -1;
2165
0
  int stdin_refspecs = 0;
2166
0
  int negotiate_only = 0;
2167
0
  int porcelain = 0;
2168
0
  int i;
2169
2170
0
  struct option builtin_fetch_options[] = {
2171
0
    OPT__VERBOSITY(&verbosity),
2172
0
    OPT_BOOL(0, "all", &all,
2173
0
       N_("fetch from all remotes")),
2174
0
    OPT_BOOL(0, "set-upstream", &set_upstream,
2175
0
       N_("set upstream for git pull/fetch")),
2176
0
    OPT_BOOL('a', "append", &append,
2177
0
       N_("append to .git/FETCH_HEAD instead of overwriting")),
2178
0
    OPT_BOOL(0, "atomic", &atomic_fetch,
2179
0
       N_("use atomic transaction to update references")),
2180
0
    OPT_STRING(0, "upload-pack", &upload_pack, N_("path"),
2181
0
         N_("path to upload pack on remote end")),
2182
0
    OPT__FORCE(&force, N_("force overwrite of local reference"), 0),
2183
0
    OPT_BOOL('m', "multiple", &multiple,
2184
0
       N_("fetch from multiple remotes")),
2185
0
    OPT_SET_INT('t', "tags", &tags,
2186
0
          N_("fetch all tags and associated objects"), TAGS_SET),
2187
0
    OPT_SET_INT('n', NULL, &tags,
2188
0
          N_("do not fetch all tags (--no-tags)"), TAGS_UNSET),
2189
0
    OPT_INTEGER('j', "jobs", &max_jobs,
2190
0
          N_("number of submodules fetched in parallel")),
2191
0
    OPT_BOOL(0, "prefetch", &prefetch,
2192
0
       N_("modify the refspec to place all refs within refs/prefetch/")),
2193
0
    OPT_BOOL('p', "prune", &prune,
2194
0
       N_("prune remote-tracking branches no longer on remote")),
2195
0
    OPT_BOOL('P', "prune-tags", &prune_tags,
2196
0
       N_("prune local tags no longer on remote and clobber changed tags")),
2197
0
    OPT_CALLBACK_F(0, "recurse-submodules", &recurse_submodules_cli, N_("on-demand"),
2198
0
          N_("control recursive fetching of submodules"),
2199
0
          PARSE_OPT_OPTARG, option_fetch_parse_recurse_submodules),
2200
0
    OPT_BOOL(0, "dry-run", &dry_run,
2201
0
       N_("dry run")),
2202
0
    OPT_BOOL(0, "porcelain", &porcelain, N_("machine-readable output")),
2203
0
    OPT_BOOL(0, "write-fetch-head", &write_fetch_head,
2204
0
       N_("write fetched references to the FETCH_HEAD file")),
2205
0
    OPT_BOOL('k', "keep", &keep, N_("keep downloaded pack")),
2206
0
    OPT_BOOL('u', "update-head-ok", &update_head_ok,
2207
0
          N_("allow updating of HEAD ref")),
2208
0
    OPT_BOOL(0, "progress", &progress, N_("force progress reporting")),
2209
0
    OPT_STRING(0, "depth", &depth, N_("depth"),
2210
0
         N_("deepen history of shallow clone")),
2211
0
    OPT_STRING(0, "shallow-since", &deepen_since, N_("time"),
2212
0
         N_("deepen history of shallow repository based on time")),
2213
0
    OPT_STRING_LIST(0, "shallow-exclude", &deepen_not, N_("revision"),
2214
0
        N_("deepen history of shallow clone, excluding rev")),
2215
0
    OPT_INTEGER(0, "deepen", &deepen_relative,
2216
0
          N_("deepen history of shallow clone")),
2217
0
    OPT_SET_INT_F(0, "unshallow", &unshallow,
2218
0
            N_("convert to a complete repository"),
2219
0
            1, PARSE_OPT_NONEG),
2220
0
    OPT_SET_INT_F(0, "refetch", &refetch,
2221
0
            N_("re-fetch without negotiating common commits"),
2222
0
            1, PARSE_OPT_NONEG),
2223
0
    { OPTION_STRING, 0, "submodule-prefix", &submodule_prefix, N_("dir"),
2224
0
         N_("prepend this to submodule path output"), PARSE_OPT_HIDDEN },
2225
0
    OPT_CALLBACK_F(0, "recurse-submodules-default",
2226
0
         &recurse_submodules_default, N_("on-demand"),
2227
0
         N_("default for recursive fetching of submodules "
2228
0
            "(lower priority than config files)"),
2229
0
         PARSE_OPT_HIDDEN, option_fetch_parse_recurse_submodules),
2230
0
    OPT_BOOL(0, "update-shallow", &update_shallow,
2231
0
       N_("accept refs that update .git/shallow")),
2232
0
    OPT_CALLBACK_F(0, "refmap", &refmap, N_("refmap"),
2233
0
             N_("specify fetch refmap"), PARSE_OPT_NONEG, parse_refmap_arg),
2234
0
    OPT_STRING_LIST('o', "server-option", &server_options, N_("server-specific"), N_("option to transmit")),
2235
0
    OPT_IPVERSION(&family),
2236
0
    OPT_STRING_LIST(0, "negotiation-tip", &negotiation_tip, N_("revision"),
2237
0
        N_("report that we have only objects reachable from this object")),
2238
0
    OPT_BOOL(0, "negotiate-only", &negotiate_only,
2239
0
       N_("do not fetch a packfile; instead, print ancestors of negotiation tips")),
2240
0
    OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
2241
0
    OPT_BOOL(0, "auto-maintenance", &enable_auto_gc,
2242
0
       N_("run 'maintenance --auto' after fetching")),
2243
0
    OPT_BOOL(0, "auto-gc", &enable_auto_gc,
2244
0
       N_("run 'maintenance --auto' after fetching")),
2245
0
    OPT_BOOL(0, "show-forced-updates", &config.show_forced_updates,
2246
0
       N_("check for forced-updates on all updated branches")),
2247
0
    OPT_BOOL(0, "write-commit-graph", &fetch_write_commit_graph,
2248
0
       N_("write the commit-graph after fetching")),
2249
0
    OPT_BOOL(0, "stdin", &stdin_refspecs,
2250
0
       N_("accept refspecs from stdin")),
2251
0
    OPT_END()
2252
0
  };
2253
2254
0
  packet_trace_identity("fetch");
2255
2256
  /* Record the command line for the reflog */
2257
0
  strbuf_addstr(&default_rla, "fetch");
2258
0
  for (i = 1; i < argc; i++) {
2259
    /* This handles non-URLs gracefully */
2260
0
    char *anon = transport_anonymize_url(argv[i]);
2261
2262
0
    strbuf_addf(&default_rla, " %s", anon);
2263
0
    free(anon);
2264
0
  }
2265
2266
0
  git_config(git_fetch_config, &config);
2267
0
  if (the_repository->gitdir) {
2268
0
    prepare_repo_settings(the_repository);
2269
0
    the_repository->settings.command_requires_full_index = 0;
2270
0
  }
2271
2272
0
  argc = parse_options(argc, argv, prefix,
2273
0
           builtin_fetch_options, builtin_fetch_usage, 0);
2274
2275
0
  if (recurse_submodules_cli != RECURSE_SUBMODULES_DEFAULT)
2276
0
    config.recurse_submodules = recurse_submodules_cli;
2277
2278
0
  if (negotiate_only) {
2279
0
    switch (recurse_submodules_cli) {
2280
0
    case RECURSE_SUBMODULES_OFF:
2281
0
    case RECURSE_SUBMODULES_DEFAULT:
2282
      /*
2283
       * --negotiate-only should never recurse into
2284
       * submodules. Skip it by setting recurse_submodules to
2285
       * RECURSE_SUBMODULES_OFF.
2286
       */
2287
0
      config.recurse_submodules = RECURSE_SUBMODULES_OFF;
2288
0
      break;
2289
2290
0
    default:
2291
0
      die(_("options '%s' and '%s' cannot be used together"),
2292
0
          "--negotiate-only", "--recurse-submodules");
2293
0
    }
2294
0
  }
2295
2296
0
  if (config.recurse_submodules != RECURSE_SUBMODULES_OFF) {
2297
0
    int *sfjc = config.submodule_fetch_jobs == -1
2298
0
          ? &config.submodule_fetch_jobs : NULL;
2299
0
    int *rs = config.recurse_submodules == RECURSE_SUBMODULES_DEFAULT
2300
0
        ? &config.recurse_submodules : NULL;
2301
2302
0
    fetch_config_from_gitmodules(sfjc, rs);
2303
0
  }
2304
2305
2306
0
  if (porcelain) {
2307
0
    switch (recurse_submodules_cli) {
2308
0
    case RECURSE_SUBMODULES_OFF:
2309
0
    case RECURSE_SUBMODULES_DEFAULT:
2310
      /*
2311
       * Reference updates in submodules would be ambiguous
2312
       * in porcelain mode, so we reject this combination.
2313
       */
2314
0
      config.recurse_submodules = RECURSE_SUBMODULES_OFF;
2315
0
      break;
2316
2317
0
    default:
2318
0
      die(_("options '%s' and '%s' cannot be used together"),
2319
0
          "--porcelain", "--recurse-submodules");
2320
0
    }
2321
2322
0
    config.display_format = DISPLAY_FORMAT_PORCELAIN;
2323
0
  }
2324
2325
0
  if (negotiate_only && !negotiation_tip.nr)
2326
0
    die(_("--negotiate-only needs one or more --negotiation-tip=*"));
2327
2328
0
  if (deepen_relative) {
2329
0
    if (deepen_relative < 0)
2330
0
      die(_("negative depth in --deepen is not supported"));
2331
0
    if (depth)
2332
0
      die(_("options '%s' and '%s' cannot be used together"), "--deepen", "--depth");
2333
0
    depth = xstrfmt("%d", deepen_relative);
2334
0
  }
2335
0
  if (unshallow) {
2336
0
    if (depth)
2337
0
      die(_("options '%s' and '%s' cannot be used together"), "--depth", "--unshallow");
2338
0
    else if (!is_repository_shallow(the_repository))
2339
0
      die(_("--unshallow on a complete repository does not make sense"));
2340
0
    else
2341
0
      depth = xstrfmt("%d", INFINITE_DEPTH);
2342
0
  }
2343
2344
  /* no need to be strict, transport_set_option() will validate it again */
2345
0
  if (depth && atoi(depth) < 1)
2346
0
    die(_("depth %s is not a positive number"), depth);
2347
0
  if (depth || deepen_since || deepen_not.nr)
2348
0
    deepen = 1;
2349
2350
  /* FETCH_HEAD never gets updated in --dry-run mode */
2351
0
  if (dry_run)
2352
0
    write_fetch_head = 0;
2353
2354
0
  if (!max_jobs)
2355
0
    max_jobs = online_cpus();
2356
2357
0
  if (!git_config_get_string_tmp("fetch.bundleuri", &bundle_uri) &&
2358
0
      fetch_bundle_uri(the_repository, bundle_uri, NULL))
2359
0
    warning(_("failed to fetch bundles from '%s'"), bundle_uri);
2360
2361
0
  if (all < 0) {
2362
    /*
2363
     * no --[no-]all given;
2364
     * only use config option if no remote was explicitly specified
2365
     */
2366
0
    all = (!argc) ? config.all : 0;
2367
0
  }
2368
2369
0
  if (all) {
2370
0
    if (argc == 1)
2371
0
      die(_("fetch --all does not take a repository argument"));
2372
0
    else if (argc > 1)
2373
0
      die(_("fetch --all does not make sense with refspecs"));
2374
2375
0
    (void) for_each_remote(get_one_remote_for_fetch, &list);
2376
2377
    /* do not do fetch_multiple() of one */
2378
0
    if (list.nr == 1)
2379
0
      remote = remote_get(list.items[0].string);
2380
0
  } else if (argc == 0) {
2381
    /* No arguments -- use default remote */
2382
0
    remote = remote_get(NULL);
2383
0
  } else if (multiple) {
2384
    /* All arguments are assumed to be remotes or groups */
2385
0
    for (i = 0; i < argc; i++)
2386
0
      if (!add_remote_or_group(argv[i], &list))
2387
0
        die(_("no such remote or remote group: %s"),
2388
0
            argv[i]);
2389
0
  } else {
2390
    /* Single remote or group */
2391
0
    (void) add_remote_or_group(argv[0], &list);
2392
0
    if (list.nr > 1) {
2393
      /* More than one remote */
2394
0
      if (argc > 1)
2395
0
        die(_("fetching a group and specifying refspecs does not make sense"));
2396
0
    } else {
2397
      /* Zero or one remotes */
2398
0
      remote = remote_get(argv[0]);
2399
0
      prune_tags_ok = (argc == 1);
2400
0
      argc--;
2401
0
      argv++;
2402
0
    }
2403
0
  }
2404
0
  string_list_remove_duplicates(&list, 0);
2405
2406
0
  if (negotiate_only) {
2407
0
    struct oidset acked_commits = OIDSET_INIT;
2408
0
    struct oidset_iter iter;
2409
0
    const struct object_id *oid;
2410
2411
0
    trace2_region_enter("fetch", "negotiate-only", the_repository);
2412
0
    if (!remote)
2413
0
      die(_("must supply remote when using --negotiate-only"));
2414
0
    gtransport = prepare_transport(remote, 1);
2415
0
    if (gtransport->smart_options) {
2416
0
      gtransport->smart_options->acked_commits = &acked_commits;
2417
0
    } else {
2418
0
      warning(_("protocol does not support --negotiate-only, exiting"));
2419
0
      result = 1;
2420
0
      trace2_region_leave("fetch", "negotiate-only", the_repository);
2421
0
      goto cleanup;
2422
0
    }
2423
0
    if (server_options.nr)
2424
0
      gtransport->server_options = &server_options;
2425
0
    result = transport_fetch_refs(gtransport, NULL);
2426
2427
0
    oidset_iter_init(&acked_commits, &iter);
2428
0
    while ((oid = oidset_iter_next(&iter)))
2429
0
      printf("%s\n", oid_to_hex(oid));
2430
0
    oidset_clear(&acked_commits);
2431
0
    trace2_region_leave("fetch", "negotiate-only", the_repository);
2432
0
  } else if (remote) {
2433
0
    if (filter_options.choice || repo_has_promisor_remote(the_repository)) {
2434
0
      trace2_region_enter("fetch", "setup-partial", the_repository);
2435
0
      fetch_one_setup_partial(remote);
2436
0
      trace2_region_leave("fetch", "setup-partial", the_repository);
2437
0
    }
2438
0
    trace2_region_enter("fetch", "fetch-one", the_repository);
2439
0
    result = fetch_one(remote, argc, argv, prune_tags_ok, stdin_refspecs,
2440
0
           &config);
2441
0
    trace2_region_leave("fetch", "fetch-one", the_repository);
2442
0
  } else {
2443
0
    int max_children = max_jobs;
2444
2445
0
    if (filter_options.choice)
2446
0
      die(_("--filter can only be used with the remote "
2447
0
            "configured in extensions.partialclone"));
2448
2449
0
    if (atomic_fetch)
2450
0
      die(_("--atomic can only be used when fetching "
2451
0
            "from one remote"));
2452
2453
0
    if (stdin_refspecs)
2454
0
      die(_("--stdin can only be used when fetching "
2455
0
            "from one remote"));
2456
2457
0
    if (max_children < 0)
2458
0
      max_children = config.parallel;
2459
2460
    /* TODO should this also die if we have a previous partial-clone? */
2461
0
    trace2_region_enter("fetch", "fetch-multiple", the_repository);
2462
0
    result = fetch_multiple(&list, max_children, &config);
2463
0
    trace2_region_leave("fetch", "fetch-multiple", the_repository);
2464
0
  }
2465
2466
  /*
2467
   * This is only needed after fetch_one(), which does not fetch
2468
   * submodules by itself.
2469
   *
2470
   * When we fetch from multiple remotes, fetch_multiple() has
2471
   * already updated submodules to grab commits necessary for
2472
   * the fetched history from each remote, so there is no need
2473
   * to fetch submodules from here.
2474
   */
2475
0
  if (!result && remote && (config.recurse_submodules != RECURSE_SUBMODULES_OFF)) {
2476
0
    struct strvec options = STRVEC_INIT;
2477
0
    int max_children = max_jobs;
2478
2479
0
    if (max_children < 0)
2480
0
      max_children = config.submodule_fetch_jobs;
2481
0
    if (max_children < 0)
2482
0
      max_children = config.parallel;
2483
2484
0
    add_options_to_argv(&options, &config);
2485
0
    trace2_region_enter_printf("fetch", "recurse-submodule", the_repository, "%s", submodule_prefix);
2486
0
    result = fetch_submodules(the_repository,
2487
0
            &options,
2488
0
            submodule_prefix,
2489
0
            config.recurse_submodules,
2490
0
            recurse_submodules_default,
2491
0
            verbosity < 0,
2492
0
            max_children);
2493
0
    trace2_region_leave_printf("fetch", "recurse-submodule", the_repository, "%s", submodule_prefix);
2494
0
    strvec_clear(&options);
2495
0
  }
2496
2497
  /*
2498
   * Skip irrelevant tasks because we know objects were not
2499
   * fetched.
2500
   *
2501
   * NEEDSWORK: as a future optimization, we can return early
2502
   * whenever objects were not fetched e.g. if we already have all
2503
   * of them.
2504
   */
2505
0
  if (negotiate_only)
2506
0
    goto cleanup;
2507
2508
0
  prepare_repo_settings(the_repository);
2509
0
  if (fetch_write_commit_graph > 0 ||
2510
0
      (fetch_write_commit_graph < 0 &&
2511
0
       the_repository->settings.fetch_write_commit_graph)) {
2512
0
    int commit_graph_flags = COMMIT_GRAPH_WRITE_SPLIT;
2513
2514
0
    if (progress)
2515
0
      commit_graph_flags |= COMMIT_GRAPH_WRITE_PROGRESS;
2516
2517
0
    trace2_region_enter("fetch", "write-commit-graph", the_repository);
2518
0
    write_commit_graph_reachable(the_repository->objects->odb,
2519
0
               commit_graph_flags,
2520
0
               NULL);
2521
0
    trace2_region_leave("fetch", "write-commit-graph", the_repository);
2522
0
  }
2523
2524
0
  if (enable_auto_gc) {
2525
0
    if (refetch) {
2526
      /*
2527
       * Hint auto-maintenance strongly to encourage repacking,
2528
       * but respect config settings disabling it.
2529
       */
2530
0
      int opt_val;
2531
0
      if (git_config_get_int("gc.autopacklimit", &opt_val))
2532
0
        opt_val = -1;
2533
0
      if (opt_val != 0)
2534
0
        git_config_push_parameter("gc.autoPackLimit=1");
2535
2536
0
      if (git_config_get_int("maintenance.incremental-repack.auto", &opt_val))
2537
0
        opt_val = -1;
2538
0
      if (opt_val != 0)
2539
0
        git_config_push_parameter("maintenance.incremental-repack.auto=-1");
2540
0
    }
2541
0
    run_auto_maintenance(verbosity < 0);
2542
0
  }
2543
2544
0
 cleanup:
2545
0
  string_list_clear(&list, 0);
2546
0
  return result;
2547
0
}