1#ifndef WORKTREE_H 2#define WORKTREE_H 3 4#include "refs.h" 5 6struct worktree { 7 char *path; 8 char *id; 9 char *head_ref; /* NULL if HEAD is broken or detached */ 10 char *lock_reason; /* internal use */ 11 unsigned char head_sha1[20]; 12 int is_detached; 13 int is_bare; 14 int is_current; 15 int lock_reason_valid; 16}; 17 18/* Functions for acting on the information about worktrees. */ 19 20#define GWT_SORT_LINKED (1 << 0) /* keeps linked worktrees sorted */ 21 22/* 23 * Get the worktrees. The primary worktree will always be the first returned, 24 * and linked worktrees will be pointed to by 'next' in each subsequent 25 * worktree. No specific ordering is done on the linked worktrees. 26 * 27 * The caller is responsible for freeing the memory from the returned 28 * worktree(s). 29 */ 30extern struct worktree **get_worktrees(unsigned flags); 31 32/* 33 * Returns 1 if linked worktrees exist, 0 otherwise. 34 */ 35extern int submodule_uses_worktrees(const char *path); 36 37/* 38 * Return git dir of the worktree. Note that the path may be relative. 39 * If wt is NULL, git dir of current worktree is returned. 40 */ 41extern const char *get_worktree_git_dir(const struct worktree *wt); 42 43/* 44 * Search a worktree that can be unambiguously identified by 45 * "arg". "prefix" must not be NULL. 46 */ 47extern struct worktree *find_worktree(struct worktree **list, 48 const char *prefix, 49 const char *arg); 50 51/* 52 * Return true if the given worktree is the main one. 53 */ 54extern int is_main_worktree(const struct worktree *wt); 55 56/* 57 * Return the reason string if the given worktree is locked or NULL 58 * otherwise. 59 */ 60extern const char *is_worktree_locked(struct worktree *wt); 61 62/* 63 * Free up the memory for worktree(s) 64 */ 65extern void free_worktrees(struct worktree **); 66 67/* 68 * Check if a per-worktree symref points to a ref in the main worktree 69 * or any linked worktree, and return the worktree that holds the ref, 70 * or NULL otherwise. The result may be destroyed by the next call. 71 */ 72extern const struct worktree *find_shared_symref(const char *symref, 73 const char *target); 74 75/* 76 * Similar to head_ref() for all HEADs _except_ one from the current 77 * worktree, which is covered by head_ref(). 78 */ 79int other_head_refs(each_ref_fn fn, void *cb_data); 80 81int is_worktree_being_rebased(const struct worktree *wt, const char *target); 82int is_worktree_being_bisected(const struct worktree *wt, const char *target); 83 84/* 85 * Similar to git_path() but can produce paths for a specified 86 * worktree instead of current one 87 */ 88extern const char *worktree_git_path(const struct worktree *wt, 89 const char *fmt, ...) 90 __attribute__((format (printf, 2, 3))); 91 92#endif