Merge tag 'v2.8.6' into maint-2.9
[git] / worktree.h
1 #ifndef WORKTREE_H
2 #define WORKTREE_H
3
4 struct worktree {
5         char *path;
6         char *id;
7         char *head_ref;
8         unsigned char head_sha1[20];
9         int is_detached;
10         int is_bare;
11         int is_current;
12 };
13
14 /* Functions for acting on the information about worktrees. */
15
16 /*
17  * Get the worktrees.  The primary worktree will always be the first returned,
18  * and linked worktrees will be pointed to by 'next' in each subsequent
19  * worktree.  No specific ordering is done on the linked worktrees.
20  *
21  * The caller is responsible for freeing the memory from the returned
22  * worktree(s).
23  */
24 extern struct worktree **get_worktrees(void);
25
26 /*
27  * Return git dir of the worktree. Note that the path may be relative.
28  * If wt is NULL, git dir of current worktree is returned.
29  */
30 extern const char *get_worktree_git_dir(const struct worktree *wt);
31
32 /*
33  * Free up the memory for worktree(s)
34  */
35 extern void free_worktrees(struct worktree **);
36
37 /*
38  * Check if a per-worktree symref points to a ref in the main worktree
39  * or any linked worktree, and return the worktree that holds the ref,
40  * or NULL otherwise. The result may be destroyed by the next call.
41  */
42 extern const struct worktree *find_shared_symref(const char *symref,
43                                                  const char *target);
44
45 int is_worktree_being_rebased(const struct worktree *wt, const char *target);
46 int is_worktree_being_bisected(const struct worktree *wt, const char *target);
47
48 /*
49  * Similar to git_path() but can produce paths for a specified
50  * worktree instead of current one
51  */
52 extern const char *worktree_git_path(const struct worktree *wt,
53                                      const char *fmt, ...)
54         __attribute__((format (printf, 2, 3)));
55
56 #endif