worktree: expose interface to look up worktree by name
Our worktree interfaces do not provide a way to look up a worktree by its name. Expose `get_linked_worktree()` to allow for this usecase. As callers are responsible for freeing this worktree, introduce a new function `free_worktree()` that does so. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
84f0ea956f
commit
b8a846b2e0
27
worktree.c
27
worktree.c
@ -12,18 +12,23 @@
|
|||||||
#include "wt-status.h"
|
#include "wt-status.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
void free_worktree(struct worktree *worktree)
|
||||||
|
{
|
||||||
|
if (!worktree)
|
||||||
|
return;
|
||||||
|
free(worktree->path);
|
||||||
|
free(worktree->id);
|
||||||
|
free(worktree->head_ref);
|
||||||
|
free(worktree->lock_reason);
|
||||||
|
free(worktree->prune_reason);
|
||||||
|
free(worktree);
|
||||||
|
}
|
||||||
|
|
||||||
void free_worktrees(struct worktree **worktrees)
|
void free_worktrees(struct worktree **worktrees)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
for (i = 0; worktrees[i]; i++)
|
||||||
for (i = 0; worktrees[i]; i++) {
|
free_worktree(worktrees[i]);
|
||||||
free(worktrees[i]->path);
|
|
||||||
free(worktrees[i]->id);
|
|
||||||
free(worktrees[i]->head_ref);
|
|
||||||
free(worktrees[i]->lock_reason);
|
|
||||||
free(worktrees[i]->prune_reason);
|
|
||||||
free(worktrees[i]);
|
|
||||||
}
|
|
||||||
free (worktrees);
|
free (worktrees);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,8 +80,8 @@ static struct worktree *get_main_worktree(int skip_reading_head)
|
|||||||
return worktree;
|
return worktree;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct worktree *get_linked_worktree(const char *id,
|
struct worktree *get_linked_worktree(const char *id,
|
||||||
int skip_reading_head)
|
int skip_reading_head)
|
||||||
{
|
{
|
||||||
struct worktree *worktree = NULL;
|
struct worktree *worktree = NULL;
|
||||||
struct strbuf path = STRBUF_INIT;
|
struct strbuf path = STRBUF_INIT;
|
||||||
|
12
worktree.h
12
worktree.h
@ -57,6 +57,13 @@ struct worktree *find_worktree(struct worktree **list,
|
|||||||
const char *prefix,
|
const char *prefix,
|
||||||
const char *arg);
|
const char *arg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Look up the worktree corresponding to `id`, or NULL of no such worktree
|
||||||
|
* exists.
|
||||||
|
*/
|
||||||
|
struct worktree *get_linked_worktree(const char *id,
|
||||||
|
int skip_reading_head);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the worktree corresponding to `path`, or NULL if no such worktree
|
* Return the worktree corresponding to `path`, or NULL if no such worktree
|
||||||
* exists.
|
* exists.
|
||||||
@ -134,6 +141,11 @@ void repair_worktrees(worktree_repair_fn, void *cb_data);
|
|||||||
*/
|
*/
|
||||||
void repair_worktree_at_path(const char *, worktree_repair_fn, void *cb_data);
|
void repair_worktree_at_path(const char *, worktree_repair_fn, void *cb_data);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free up the memory for a worktree.
|
||||||
|
*/
|
||||||
|
void free_worktree(struct worktree *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free up the memory for worktree(s)
|
* Free up the memory for worktree(s)
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user