Skip to content
  • Michael Haggerty's avatar
    refs: introduce an iterator interface · 3bc581b9
    Michael Haggerty authored and Junio C Hamano's avatar Junio C Hamano committed
    Currently, the API for iterating over references is via a family of
    for_each_ref()-type functions that invoke a callback function for each
    selected reference. All of these eventually call do_for_each_ref(),
    which knows how to do one thing: iterate in parallel through two
    ref_caches, one for loose and one for packed refs, giving loose
    references precedence over packed refs. This is rather complicated code,
    and is quite specialized to the files backend. It also requires callers
    to encapsulate their work into a callback function, which often means
    that they have to define and use a "cb_data" struct to manage their
    context.
    
    The current design is already bursting at the seams, and will become
    even more awkward in the upcoming world of multiple reference storage
    backends:
    
    * Per-worktree vs. shared references are currently handled via a kludge
      in git_path() rather than iterating over each part of the reference
      namespace separately and merging the results. This kludge w...
    3bc581b9