🌐 AI搜索 & 代理 主页
blob: 5ea5e503fbe491a76d3c8ce279b7e281a5d07d3e [file] [log] [blame]
Michael Rappazzoac6c5612015-10-02 11:55:311#ifndef WORKTREE_H
2#define WORKTREE_H
3
Michael Rappazzo51934902015-10-08 17:01:034struct worktree {
5 char *path;
Nguyễn Thái Ngọc Duy69dfe3b2016-04-22 13:01:266 char *id;
Nguyễn Thái Ngọc Duyfa099d22017-04-24 10:01:237 char *head_ref; /* NULL if HEAD is broken or detached */
Nguyễn Thái Ngọc Duy346ef532016-06-13 12:18:238 char *lock_reason; /* internal use */
Michael Rappazzo92718b72015-10-08 17:01:049 unsigned char head_sha1[20];
10 int is_detached;
11 int is_bare;
Nguyễn Thái Ngọc Duy750e8a62016-04-22 13:01:2812 int is_current;
Nguyễn Thái Ngọc Duy346ef532016-06-13 12:18:2313 int lock_reason_valid;
Michael Rappazzo51934902015-10-08 17:01:0314};
15
16/* Functions for acting on the information about worktrees. */
17
Nguyễn Thái Ngọc Duy4df1d4d2016-11-28 09:36:5618#define GWT_SORT_LINKED (1 << 0) /* keeps linked worktrees sorted */
19
Michael Rappazzo51934902015-10-08 17:01:0320/*
21 * Get the worktrees. The primary worktree will always be the first returned,
22 * and linked worktrees will be pointed to by 'next' in each subsequent
23 * worktree. No specific ordering is done on the linked worktrees.
24 *
25 * The caller is responsible for freeing the memory from the returned
26 * worktree(s).
27 */
Nguyễn Thái Ngọc Duy4fff1ef2016-11-28 09:36:5528extern struct worktree **get_worktrees(unsigned flags);
Michael Rappazzo51934902015-10-08 17:01:0329
30/*
Stefan Beller1a248cf2016-12-12 19:04:3331 * Returns 1 if linked worktrees exist, 0 otherwise.
32 */
33extern int submodule_uses_worktrees(const char *path);
34
35/*
Nguyễn Thái Ngọc Duy69dfe3b2016-04-22 13:01:2636 * Return git dir of the worktree. Note that the path may be relative.
37 * If wt is NULL, git dir of current worktree is returned.
38 */
39extern const char *get_worktree_git_dir(const struct worktree *wt);
40
41/*
Nguyễn Thái Ngọc Duy68353142016-06-03 12:19:3942 * Search a worktree that can be unambiguously identified by
43 * "arg". "prefix" must not be NULL.
44 */
45extern struct worktree *find_worktree(struct worktree **list,
46 const char *prefix,
47 const char *arg);
48
49/*
Nguyễn Thái Ngọc Duy984ad9e2016-06-03 12:19:4050 * Return true if the given worktree is the main one.
51 */
52extern int is_main_worktree(const struct worktree *wt);
53
54/*
Nguyễn Thái Ngọc Duy346ef532016-06-13 12:18:2355 * Return the reason string if the given worktree is locked or NULL
56 * otherwise.
57 */
58extern const char *is_worktree_locked(struct worktree *wt);
59
60/*
Michael Rappazzo51934902015-10-08 17:01:0361 * Free up the memory for worktree(s)
62 */
63extern void free_worktrees(struct worktree **);
64
Michael Rappazzoac6c5612015-10-02 11:55:3165/*
66 * Check if a per-worktree symref points to a ref in the main worktree
Nguyễn Thái Ngọc Duyd3b9ac02016-04-22 13:01:2767 * or any linked worktree, and return the worktree that holds the ref,
68 * or NULL otherwise. The result may be destroyed by the next call.
Michael Rappazzoac6c5612015-10-02 11:55:3169 */
Nguyễn Thái Ngọc Duyd3b9ac02016-04-22 13:01:2770extern const struct worktree *find_shared_symref(const char *symref,
71 const char *target);
Michael Rappazzoac6c5612015-10-02 11:55:3172
Nguyễn Thái Ngọc Duy14ace5b2016-04-22 13:01:3673int is_worktree_being_rebased(const struct worktree *wt, const char *target);
74int is_worktree_being_bisected(const struct worktree *wt, const char *target);
75
Nguyễn Thái Ngọc Duy2e641d52016-04-22 13:01:2976/*
77 * Similar to git_path() but can produce paths for a specified
78 * worktree instead of current one
79 */
80extern const char *worktree_git_path(const struct worktree *wt,
81 const char *fmt, ...)
82 __attribute__((format (printf, 2, 3)));
83
Michael Rappazzoac6c5612015-10-02 11:55:3184#endif