receive-pack: quarantine objects until pre-receive accepts
[gitweb.git] / worktree.h
index b4b3dda79280707d2d65bf790be15c7a1e662b5e..90e1311fa73fa6bdde5249d68818eacb6dc8edd0 100644 (file)
@@ -3,11 +3,14 @@
 
 struct worktree {
        char *path;
-       char *git_dir;
+       char *id;
        char *head_ref;
+       char *lock_reason;      /* internal use */
        unsigned char head_sha1[20];
        int is_detached;
        int is_bare;
+       int is_current;
+       int lock_reason_valid;
 };
 
 /* Functions for acting on the information about worktrees. */
@@ -22,6 +25,31 @@ struct worktree {
  */
 extern struct worktree **get_worktrees(void);
 
+/*
+ * Return git dir of the worktree. Note that the path may be relative.
+ * If wt is NULL, git dir of current worktree is returned.
+ */
+extern const char *get_worktree_git_dir(const struct worktree *wt);
+
+/*
+ * Search a worktree that can be unambiguously identified by
+ * "arg". "prefix" must not be NULL.
+ */
+extern struct worktree *find_worktree(struct worktree **list,
+                                     const char *prefix,
+                                     const char *arg);
+
+/*
+ * Return true if the given worktree is the main one.
+ */
+extern int is_main_worktree(const struct worktree *wt);
+
+/*
+ * Return the reason string if the given worktree is locked or NULL
+ * otherwise.
+ */
+extern const char *is_worktree_locked(struct worktree *wt);
+
 /*
  * Free up the memory for worktree(s)
  */
@@ -29,10 +57,21 @@ extern void free_worktrees(struct worktree **);
 
 /*
  * Check if a per-worktree symref points to a ref in the main worktree
- * or any linked worktree, and return the path to the exising worktree
- * if it is.  Returns NULL if there is no existing ref.  The caller is
- * responsible for freeing the returned path.
+ * or any linked worktree, and return the worktree that holds the ref,
+ * or NULL otherwise. The result may be destroyed by the next call.
+ */
+extern const struct worktree *find_shared_symref(const char *symref,
+                                                const char *target);
+
+int is_worktree_being_rebased(const struct worktree *wt, const char *target);
+int is_worktree_being_bisected(const struct worktree *wt, const char *target);
+
+/*
+ * Similar to git_path() but can produce paths for a specified
+ * worktree instead of current one
  */
-extern char *find_shared_symref(const char *symref, const char *target);
+extern const char *worktree_git_path(const struct worktree *wt,
+                                    const char *fmt, ...)
+       __attribute__((format (printf, 2, 3)));
 
 #endif