worktree: simplify find_shared_symref() memory ownership model

Storing the worktrees list in a static variable meant that
find_shared_symref() had to rebuild the list on each call (which is
inefficient when the call site is in a loop), and also that each call
invalidated the pointer returned by the previous call (which is
confusing).

Instead, make it the caller’s responsibility to pass in the worktrees
list and manage its lifetime.

Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Anders Kaseorg
2021-12-01 14:15:43 -08:00
committed by Junio C Hamano
parent 7435e7e2e7
commit c8dd491fa5
6 changed files with 65 additions and 38 deletions

View File

@ -143,9 +143,10 @@ void free_worktrees(struct worktree **);
/*
* Check if a per-worktree symref points to a ref in the main worktree
* or any linked worktree, and return the worktree that holds the ref,
* or NULL otherwise. The result may be destroyed by the next call.
* or NULL otherwise.
*/
const struct worktree *find_shared_symref(const char *symref,
const struct worktree *find_shared_symref(struct worktree **worktrees,
const char *symref,
const char *target);
/*