builtin-remote: fix two inconsistencies in the output of "show <remote>"
authorJay Soffian <jaysoffian@gmail.com>
Wed, 25 Feb 2009 08:32:23 +0000 (03:32 -0500)
committerJunio C Hamano <gitster@pobox.com>
Fri, 27 Feb 2009 23:19:09 +0000 (15:19 -0800)
Remote and stale branches are emitted in alphabetical order, but new and
tracked branches are not. So sort the latter to be consistent with the
former. This also lets us use more efficient string_list_has_string()
instead of unsorted_string_list_has_string().

"show <remote>" prunes symrefs, but "show <remote> -n" does not. Fix the
latter to match the former.

Signed-off-by: Jay Soffian <jaysoffian@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-remote.c
t/t5505-remote.sh

index 1b5e8b6811a04f1b880a669502e0906414702896..963be6df95e2d38166a54a2727c895f14663127d 100644 (file)
@@ -226,10 +226,8 @@ static int handle_one_branch(const char *refname,
                const char *name = abbrev_branch(refspec.src);
                /* symbolic refs pointing nowhere were handled already */
                if ((flags & REF_ISSYMREF) ||
-                               unsorted_string_list_has_string(&states->tracked,
-                                       name) ||
-                               unsorted_string_list_has_string(&states->new,
-                                       name))
+                   string_list_has_string(&states->tracked, name) ||
+                   string_list_has_string(&states->new, name))
                        return 0;
                item = string_list_append(name, &states->stale);
                item->util = xstrdup(refname);
@@ -258,6 +256,8 @@ static int get_ref_states(const struct ref *remote_refs, struct ref_states *stat
        }
        free_refs(fetch_map);
 
+       sort_string_list(&states->new);
+       sort_string_list(&states->tracked);
        for_each_ref(handle_one_branch, states);
        sort_string_list(&states->stale);
 
@@ -638,6 +638,9 @@ static int append_ref_to_tracked_list(const char *refname,
        struct ref_states *states = cb_data;
        struct refspec refspec;
 
+       if (flags & REF_ISSYMREF)
+               return 0;
+
        memset(&refspec, 0, sizeof(refspec));
        refspec.dst = (char *)refname;
        if (!remote_find_tracking(states->remote, &refspec))
@@ -666,8 +669,10 @@ static int get_remote_ref_states(const char *name,
                transport_disconnect(transport);
 
                get_ref_states(remote_refs, states);
-       } else
+       } else {
                for_each_ref(append_ref_to_tracked_list, states);
+               sort_string_list(&states->tracked);
+       }
 
        return 0;
 }
index eb637184a00007c61e6d92f7b5546eed6ec5a0ae..a13d4b66d6766c003c1cbad1d0c70f385b12b0f3 100755 (executable)
@@ -141,8 +141,8 @@ cat > test/expect << EOF
   New remote branch (next fetch will store in remotes/origin)
     master
   Tracked remote branches
-    side
     master
+    side
   Local branches pushed with 'git push'
     master:upstream
     +refs/tags/lastbackup