1 #ifndef SEAF_BRANCH_MGR_H
2 #define SEAF_BRANCH_MGR_H
3 
4 #include "commit-mgr.h"
5 #define NO_BRANCH "-"
6 
7 typedef struct _SeafBranch SeafBranch;
8 
9 struct _SeafBranch {
10     int   ref;
11     char *name;
12     char  repo_id[37];
13     char  commit_id[41];
14 };
15 
16 SeafBranch *seaf_branch_new (const char *name,
17                              const char *repo_id,
18                              const char *commit_id);
19 void seaf_branch_free (SeafBranch *branch);
20 void seaf_branch_set_commit (SeafBranch *branch, const char *commit_id);
21 
22 void seaf_branch_ref (SeafBranch *branch);
23 void seaf_branch_unref (SeafBranch *branch);
24 
25 
26 typedef struct _SeafBranchManager SeafBranchManager;
27 typedef struct _SeafBranchManagerPriv SeafBranchManagerPriv;
28 
29 struct _SeafileSession;
30 struct _SeafBranchManager {
31     struct _SeafileSession *seaf;
32 
33     SeafBranchManagerPriv *priv;
34 };
35 
36 SeafBranchManager *seaf_branch_manager_new (struct _SeafileSession *seaf);
37 int seaf_branch_manager_init (SeafBranchManager *mgr);
38 
39 int
40 seaf_branch_manager_add_branch (SeafBranchManager *mgr, SeafBranch *branch);
41 
42 int
43 seaf_branch_manager_del_branch (SeafBranchManager *mgr,
44                                 const char *repo_id,
45                                 const char *name);
46 
47 void
48 seaf_branch_list_free (GList *blist);
49 
50 int
51 seaf_branch_manager_update_branch (SeafBranchManager *mgr,
52                                    SeafBranch *branch);
53 
54 #ifdef SEAFILE_SERVER
55 /**
56  * Atomically test whether the current head commit id on @branch
57  * is the same as @old_commit_id and update branch in db.
58  */
59 int
60 seaf_branch_manager_test_and_update_branch (SeafBranchManager *mgr,
61                                             SeafBranch *branch,
62                                             const char *old_commit_id);
63 #endif
64 
65 SeafBranch *
66 seaf_branch_manager_get_branch (SeafBranchManager *mgr,
67                                 const char *repo_id,
68                                 const char *name);
69 
70 
71 gboolean
72 seaf_branch_manager_branch_exists (SeafBranchManager *mgr,
73                                    const char *repo_id,
74                                    const char *name);
75 
76 GList *
77 seaf_branch_manager_get_branch_list (SeafBranchManager *mgr,
78                                      const char *repo_id);
79 
80 gint64
81 seaf_branch_manager_calculate_branch_size (SeafBranchManager *mgr,
82                                            const char *repo_id,
83                                            const char *commit_id);
84 #endif /* SEAF_BRANCH_MGR_H */
85