Merge branch 'mb/fetch-call-a-non-branch-a-ref'
authorJunio C Hamano <gitster@pobox.com>
Thu, 26 Apr 2012 17:57:43 +0000 (10:57 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 26 Apr 2012 17:57:44 +0000 (10:57 -0700)
The report from "git fetch" said "new branch" even for a non branch
ref.

By Marc Branchaud
* mb/fetch-call-a-non-branch-a-ref:
fetch: describe new refs based on where it came from
fetch: Give remote_ref to update_local_ref() as well

1  2 
builtin/fetch.c
diff --combined builtin/fetch.c
index cfb43df4e843970a7ff93078ea1bcbbdb9985260,0f80cf81855fd8801de5a5f0548686fb19ab5068..1c8cb62445a3dc7a0ff1ff6d2663faec1bced167
@@@ -240,6 -240,7 +240,7 @@@ static int s_update_ref(const char *act
  
  static int update_local_ref(struct ref *ref,
                            const char *remote,
+                           const struct ref *remote_ref,
                            struct strbuf *display)
  {
        struct commit *current = NULL, *updated;
                const char *msg;
                const char *what;
                int r;
-               if (!strncmp(ref->name, "refs/tags/", 10)) {
+               /*
+                * Nicely describe the new ref we're fetching.
+                * Base this on the remote's ref name, as it's
+                * more likely to follow a standard layout.
+                */
+               const char *name = remote_ref ? remote_ref->name : "";
+               if (!prefixcmp(name, "refs/tags/")) {
                        msg = "storing tag";
                        what = _("[new tag]");
-               }
-               else {
+               } else if (!prefixcmp(name, "refs/heads/")) {
                        msg = "storing head";
                        what = _("[new branch]");
 -                      if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
 -                          (recurse_submodules != RECURSE_SUBMODULES_ON))
 -                              check_for_new_submodule_commits(ref->new_sha1);
+               } else {
+                       msg = "storing ref";
+                       what = _("[new ref]");
                }
  
 +              if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
 +                  (recurse_submodules != RECURSE_SUBMODULES_ON))
 +                      check_for_new_submodule_commits(ref->new_sha1);
                r = s_update_ref(msg, ref, 0);
                strbuf_addf(display, "%c %-*s %-*s -> %s%s",
                            r ? '!' : '*',
@@@ -466,7 -475,7 +475,7 @@@ static int store_updated_refs(const cha
  
                        strbuf_reset(&note);
                        if (ref) {
-                               rc |= update_local_ref(ref, what, &note);
+                               rc |= update_local_ref(ref, what, rm, &note);
                                free(ref);
                        } else
                                strbuf_addf(&note, "* %-*s %-*s -> FETCH_HEAD",
@@@ -585,7 -594,7 +594,7 @@@ static void find_non_local_tags(struct 
  
        for_each_ref(add_existing, &existing_refs);
        for (ref = transport_get_remote_refs(transport); ref; ref = ref->next) {
 -              if (prefixcmp(ref->name, "refs/tags"))
 +              if (prefixcmp(ref->name, "refs/tags/"))
                        continue;
  
                /*