1#ifndef WORKTREE_H 2#define WORKTREE_H 3 4#include"refs.h" 5 6struct worktree { 7char*path; 8char*id; 9char*head_ref;/* NULL if HEAD is broken or detached */ 10char*lock_reason;/* internal use */ 11struct object_id head_oid; 12int is_detached; 13int is_bare; 14int is_current; 15int 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 */ 30externstruct worktree **get_worktrees(unsigned flags); 31 32/* 33 * Returns 1 if linked worktrees exist, 0 otherwise. 34 */ 35externintsubmodule_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 */ 41externconst 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 */ 47externstruct worktree *find_worktree(struct worktree **list, 48const char*prefix, 49const char*arg); 50 51/* 52 * Return true if the given worktree is the main one. 53 */ 54externintis_main_worktree(const struct worktree *wt); 55 56/* 57 * Return the reason string if the given worktree is locked or NULL 58 * otherwise. 59 */ 60externconst char*is_worktree_locked(struct worktree *wt); 61 62/* 63 * Free up the memory for worktree(s) 64 */ 65externvoidfree_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 */ 72externconst struct worktree *find_shared_symref(const char*symref, 73const 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 */ 79intother_head_refs(each_ref_fn fn,void*cb_data); 80 81intis_worktree_being_rebased(const struct worktree *wt,const char*target); 82intis_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 */ 88externconst char*worktree_git_path(const struct worktree *wt, 89const char*fmt, ...) 90__attribute__((format(printf,2,3))); 91 92#endif