log: teach "terminator" vs "separator" mode to "--pretty=format"
[gitweb.git] / builtin-fetch.c
index 26c3d74b76de701a8e1a5e0c7031751599c1487f..139a6b10c50d38fa3caf224e8031a152eac1a22e 100644 (file)
@@ -40,6 +40,8 @@ static struct option builtin_fetch_options[] = {
                    "force overwrite of local branch"),
        OPT_SET_INT('t', "tags", &tags,
                    "fetch all tags and associated objects", TAGS_SET),
+       OPT_SET_INT('n', NULL, &tags,
+                   "do not fetch all tags (--no-tags)", TAGS_UNSET),
        OPT_BOOLEAN('k', "keep", &keep, "keep downloaded pack"),
        OPT_BOOLEAN('u', "update-head-ok", &update_head_ok,
                    "allow updating of HEAD ref"),
@@ -213,13 +215,6 @@ static int update_local_ref(struct ref *ref,
        if (type < 0)
                die("object %s not found", sha1_to_hex(ref->new_sha1));
 
-       if (!*ref->name) {
-               /* Not storing */
-               if (verbose)
-                       sprintf(display, "* branch %s -> FETCH_HEAD", remote);
-               return 0;
-       }
-
        if (!hashcmp(ref->old_sha1, ref->new_sha1)) {
                if (verbose)
                        sprintf(display, "= %-*s %-*s -> %s", SUMMARY_WIDTH,
@@ -363,16 +358,21 @@ static int store_updated_refs(const char *url, struct ref *ref_map)
                        rm->merge ? "" : "not-for-merge",
                        note);
 
-               if (ref) {
+               if (ref)
                        update_local_ref(ref, what, verbose, note);
-                       if (*note) {
-                               if (!shown_url) {
-                                       fprintf(stderr, "From %.*s\n",
-                                                       url_len, url);
-                                       shown_url = 1;
-                               }
-                               fprintf(stderr, " %s\n", note);
+               else if (verbose)
+                       sprintf(note, "* %-*s %-*s -> FETCH_HEAD",
+                               SUMMARY_WIDTH, *kind ? kind : "branch",
+                                REFCOL_WIDTH, *what ? what : "HEAD");
+               else
+                       *note = '\0';
+               if (*note) {
+                       if (!shown_url) {
+                               fprintf(stderr, "From %.*s\n",
+                                               url_len, url);
+                               shown_url = 1;
                        }
+                       fprintf(stderr, " %s\n", note);
                }
        }
        fclose(fp);
@@ -555,6 +555,8 @@ static int do_fetch(struct transport *transport,
                        read_ref(rm->peer_ref->name, rm->peer_ref->old_sha1);
        }
 
+       if (tags == TAGS_DEFAULT && autotags)
+               transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
        if (fetch_refs(transport, ref_map)) {
                free_refs(ref_map);
                return 1;
@@ -568,6 +570,7 @@ static int do_fetch(struct transport *transport,
                ref_map = NULL;
                find_non_local_tags(transport, &ref_map, &tail);
                if (ref_map) {
+                       transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, NULL);
                        transport_set_option(transport, TRANS_OPT_DEPTH, "0");
                        fetch_refs(transport, ref_map);
                }
@@ -632,6 +635,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
                        if (!strcmp(argv[i], "tag")) {
                                char *ref;
                                i++;
+                               if (i >= argc)
+                                       die("You need to specify a tag name.");
                                ref = xmalloc(strlen(argv[i]) * 2 + 22);
                                strcpy(ref, "refs/tags/");
                                strcat(ref, argv[i]);
@@ -647,5 +652,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
 
        signal(SIGINT, unlock_pack_on_signal);
        atexit(unlock_pack);
-       return do_fetch(transport, parse_ref_spec(ref_nr, refs), ref_nr);
+       return do_fetch(transport,
+                       parse_fetch_refspec(ref_nr, refs), ref_nr);
 }