On Thu, Jun 16, 2022 at 2:52 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Jacob Keller <jacob.keller@xxxxxxxxx> writes: > > >> This is somewhat curious. Do we really need to destroy the > >> fetch_map like the above? I know by removing skipped items from the > >> list, the existing loop (below) can stop having to worry about them, > >> but the caller of get_ref_states() may later want to iterate over > >> the full fetch_map for other reasons (even if the current one does > >> not, a future version of the caller may have a reason to do so that > >> we do not know right now yet). > >> > > > > Good point. I'll fix this. I think we can just move the > > omit_name_by_refspec into the other loop. > > > >> > + > >> > for (ref = fetch_map; ref; ref = ref->next) { > >> > if (!ref->peer_ref || !ref_exists(ref->peer_ref->name)) > >> > string_list_append(&states->new_refs, abbrev_branch(ref->name)); > >> > >> IOW, is adding a new condition to this existing loop insufficient? > >> > > > > The tricky part here is that we don't have a simple check, and we're > > currently iterating over all of the refspecs each time. But we have to > > do that regardless so I think this makes sense. Will fix. > > Another thing that worries me is that get_stale_heads() will not see > the filtered refs with your original implementation, because you cull > them from the fetch_map in the extra loop upfront. > I think the new implementation fixed this, but I'll see about adding a test! > I do not know offhand what its effect would be, but it probably is > worth testing. In your original scenario, if we locally have > refs/remotes/jdk19/old and refs/remotes/jdk19/pr/1 (perhaps obtained > before we configured ^refs/pr/* negative refspec), we'd want to see > that pr/1 exists here but will not be updated. > Yea, I will see if I can check that. > * remote jdk19 > Fetch URL: git@xxxxxxxxxx:openjdk/jdk19.git > Push URL: git@xxxxxxxxxx:openjdk/jdk19.git > HEAD branch: master > Remote branches: > master tracked > old stale > pr/1 stale > pr/2 skipped > pr/3 skipped > Local ref configured for 'git push': > master pushes to master (fast-forwardable)