Browse Source

builtin-remote: fix two inconsistencies in the output of "show <remote>"

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>
maint
Jay Soffian 16 years ago committed by Junio C Hamano
parent
commit
3bd925636c
  1. 15
      builtin-remote.c
  2. 2
      t/t5505-remote.sh

15
builtin-remote.c

@ -226,10 +226,8 @@ static int handle_one_branch(const char *refname,
const char *name = abbrev_branch(refspec.src); const char *name = abbrev_branch(refspec.src);
/* symbolic refs pointing nowhere were handled already */ /* symbolic refs pointing nowhere were handled already */
if ((flags & REF_ISSYMREF) || if ((flags & REF_ISSYMREF) ||
unsorted_string_list_has_string(&states->tracked, string_list_has_string(&states->tracked, name) ||
name) || string_list_has_string(&states->new, name))
unsorted_string_list_has_string(&states->new,
name))
return 0; return 0;
item = string_list_append(name, &states->stale); item = string_list_append(name, &states->stale);
item->util = xstrdup(refname); 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); free_refs(fetch_map);


sort_string_list(&states->new);
sort_string_list(&states->tracked);
for_each_ref(handle_one_branch, states); for_each_ref(handle_one_branch, states);
sort_string_list(&states->stale); 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 ref_states *states = cb_data;
struct refspec refspec; struct refspec refspec;


if (flags & REF_ISSYMREF)
return 0;

memset(&refspec, 0, sizeof(refspec)); memset(&refspec, 0, sizeof(refspec));
refspec.dst = (char *)refname; refspec.dst = (char *)refname;
if (!remote_find_tracking(states->remote, &refspec)) if (!remote_find_tracking(states->remote, &refspec))
@ -666,8 +669,10 @@ static int get_remote_ref_states(const char *name,
transport_disconnect(transport); transport_disconnect(transport);


get_ref_states(remote_refs, states); get_ref_states(remote_refs, states);
} else } else {
for_each_ref(append_ref_to_tracked_list, states); for_each_ref(append_ref_to_tracked_list, states);
sort_string_list(&states->tracked);
}


return 0; return 0;
} }

2
t/t5505-remote.sh

@ -141,8 +141,8 @@ cat > test/expect << EOF
New remote branch (next fetch will store in remotes/origin) New remote branch (next fetch will store in remotes/origin)
master master
Tracked remote branches Tracked remote branches
side
master master
side
Local branches pushed with 'git push' Local branches pushed with 'git push'
master:upstream master:upstream
+refs/tags/lastbackup +refs/tags/lastbackup

Loading…
Cancel
Save