]> git.proxmox.com Git - libgit2.git/blame - include/git2/worktree.h
worktree: split off function opening working directory
[libgit2.git] / include / git2 / worktree.h
CommitLineData
45f2b7a4
PS
1/*
2 * Copyright (C) the libgit2 contributors. All rights reserved.
3 *
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
6 */
7#ifndef INCLUDE_git_worktree_h__
8#define INCLUDE_git_worktree_h__
9
10#include "common.h"
2a503485 11#include "buffer.h"
45f2b7a4
PS
12#include "types.h"
13#include "strarray.h"
14
15/**
16 * @file git2/worktrees.h
17 * @brief Git worktree related functions
18 * @defgroup git_commit Git worktree related functions
19 * @ingroup Git
20 * @{
21 */
22GIT_BEGIN_DECL
23
24/**
25 * List names of linked working trees
26 *
27 * The returned list should be released with `git_strarray_free`
28 * when no longer needed.
29 *
30 * @param out pointer to the array of working tree names
31 * @param repo the repo to use when listing working trees
32 * @return 0 or an error code
33 */
34GIT_EXTERN(int) git_worktree_list(git_strarray *out, git_repository *repo);
35
d3bc09e8
PS
36/**
37 * Lookup a working tree by its name for a given repository
38 *
39 * @param out Output pointer to looked up worktree or `NULL`
40 * @param repo The repository containing worktrees
41 * @param name Name of the working tree to look up
42 * @return 0 or an error code
43 */
44GIT_EXTERN(int) git_worktree_lookup(git_worktree **out, git_repository *repo, const char *name);
45
46/**
47 * Free a previously allocated worktree
48 *
49 * @param wt worktree handle to close. If NULL nothing occurs.
50 */
51GIT_EXTERN(void) git_worktree_free(git_worktree *wt);
52
372dc9ff
PS
53/**
54 * Check if worktree is valid
55 *
56 * A valid worktree requires both the git data structures inside
57 * the linked parent repository and the linked working copy to be
58 * present.
59 *
60 * @param wt Worktree to check
61 * @return 0 when worktree is valid, error-code otherwise
62 */
63GIT_EXTERN(int) git_worktree_validate(const git_worktree *wt);
64
dea7488e
PS
65/**
66 * Add a new working tree
67 *
68 * Add a new working tree for the repository, that is create the
69 * required data structures inside the repository and check out
70 * the current HEAD at `path`
71 *
72 * @param out Output pointer containing new working tree
73 * @param repo Repository to create working tree for
74 * @param name Name of the working tree
75 * @param path Path to create working tree at
76 * @return 0 or an error code
77 */
78GIT_EXTERN(int) git_worktree_add(git_worktree **out, git_repository *repo, const char *name, const char *path);
79
04fb12ab 80/**
2a503485
PS
81 * Lock worktree if not already locked
82 *
83 * Lock a worktree, optionally specifying a reason why the linked
84 * working tree is being locked.
85 *
86 * @param wt Worktree to lock
87 * @param reason Reason why the working tree is being locked
88 * @return 0 on success, non-zero otherwise
89 */
90GIT_EXTERN(int) git_worktree_lock(git_worktree *wt, char *reason);
91
92/**
93 * Unlock a locked worktree
94 *
95 * @param wt Worktree to unlock
96 * @return 0 on success, 1 if worktree was not locked, error-code
97 * otherwise
98 */
99GIT_EXTERN(int) git_worktree_unlock(git_worktree *wt);
100
101/**
102 * Check if worktree is locked
103 *
104 * A worktree may be locked if the linked working tree is stored
105 * on a portable device which is not available.
106 *
107 * @param reason Buffer to store reason in. If NULL no reason is stored.
108 * @param wt Worktree to check
109 * @return 0 when the working tree not locked, a value greater
110 * than zero if it is locked, less than zero if there was an
111 * error
112 */
113GIT_EXTERN(int) git_worktree_is_locked(git_buf *reason, const git_worktree *wt);
114
f0cfc341
PS
115/**
116 * Flags which can be passed to git_worktree_prune to alter its
117 * behavior.
118 */
119typedef enum {
120 /* Prune working tree even if working tree is valid */
121 GIT_WORKTREE_PRUNE_VALID = 1u << 0,
122 /* Prune working tree even if it is locked */
123 GIT_WORKTREE_PRUNE_LOCKED = 1u << 1,
124 /* Prune checked out working tree */
125 GIT_WORKTREE_PRUNE_WORKING_TREE = 1u << 2,
126} git_worktree_prune_t;
127
1ba242c9
PS
128/**
129 * Is the worktree prunable with the given set of flags?
130 *
131 * A worktree is not prunable in the following scenarios:
132 *
133 * - the worktree is linking to a valid on-disk worktree. The
134 * GIT_WORKTREE_PRUNE_VALID flag will cause this check to be
135 * ignored.
136 * - the worktree is not valid but locked. The
137 * GIT_WORKRTEE_PRUNE_LOCKED flag will cause this check to be
138 * ignored.
139 *
140 * If the worktree is not valid and not locked or if the above
141 * flags have been passed in, this function will return a
142 * positive value.
143 */
144GIT_EXTERN(int) git_worktree_is_prunable(git_worktree *wt, unsigned flags);
145
f0cfc341
PS
146/**
147 * Prune working tree
148 *
149 * Prune the working tree, that is remove the git data
150 * structures on disk. The repository will only be pruned of
151 * `git_worktree_is_prunable` succeeds.
152 *
153 * @param wt Worktree to prune
154 * @param flags git_worktree_prune_t flags
155 * @return 0 or an error code
156 */
157GIT_EXTERN(int) git_worktree_prune(git_worktree *wt, unsigned flags);
158
45f2b7a4
PS
159/** @} */
160GIT_END_DECL
161#endif