2016-08-10 06:53:33 +00:00
|
|
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
|
|
|
|
#ifndef SEAF_REPO_MGR_H
|
|
|
|
#define SEAF_REPO_MGR_H
|
|
|
|
|
|
|
|
#include "seafile-object.h"
|
|
|
|
#include "commit-mgr.h"
|
|
|
|
#include "branch-mgr.h"
|
|
|
|
|
2019-03-11 06:35:41 +00:00
|
|
|
typedef enum RepoStatus {
|
|
|
|
REPO_STATUS_NORMAL,
|
|
|
|
REPO_STATUS_READ_ONLY,
|
|
|
|
N_REPO_STATUS,
|
|
|
|
} RepoStatus;
|
|
|
|
|
2016-08-10 06:53:33 +00:00
|
|
|
struct _SeafRepoManager;
|
|
|
|
typedef struct _SeafRepo SeafRepo;
|
|
|
|
|
|
|
|
typedef struct SeafVirtRepo {
|
|
|
|
char repo_id[37];
|
|
|
|
char origin_repo_id[37];
|
|
|
|
char *path;
|
|
|
|
char base_commit[41];
|
|
|
|
} SeafVirtRepo;
|
|
|
|
|
|
|
|
struct _SeafRepo {
|
|
|
|
struct _SeafRepoManager *manager;
|
|
|
|
|
|
|
|
gchar id[37];
|
|
|
|
gchar *name;
|
|
|
|
gchar *desc;
|
2017-06-23 06:23:59 +00:00
|
|
|
gchar *last_modifier;
|
2016-08-10 06:53:33 +00:00
|
|
|
gboolean encrypted;
|
|
|
|
int enc_version;
|
|
|
|
gchar magic[65]; /* hash(repo_id + passwd), key stretched. */
|
|
|
|
gchar random_key[97];
|
2019-03-19 09:42:36 +00:00
|
|
|
gchar salt[65];
|
2016-08-10 06:53:33 +00:00
|
|
|
gboolean no_local_history;
|
|
|
|
gint64 last_modify;
|
|
|
|
gint64 size;
|
|
|
|
gint64 file_count;
|
|
|
|
|
2019-03-11 06:35:41 +00:00
|
|
|
int status;
|
|
|
|
|
2016-08-10 06:53:33 +00:00
|
|
|
SeafBranch *head;
|
|
|
|
gchar root_id[41];
|
|
|
|
|
|
|
|
gboolean is_corrupted;
|
|
|
|
gboolean repaired;
|
|
|
|
int ref_cnt;
|
|
|
|
|
|
|
|
SeafVirtRepo *virtual_info;
|
|
|
|
|
|
|
|
int version;
|
|
|
|
/* Used to access fs and block sotre.
|
|
|
|
* This id is different from repo_id when this repo is virtual.
|
|
|
|
* Virtual repos share fs and block store with its origin repo.
|
|
|
|
* However, commit store for each repo is always independent.
|
|
|
|
* So always use repo_id to access commit store.
|
|
|
|
*/
|
|
|
|
gchar store_id[37];
|
|
|
|
};
|
|
|
|
|
|
|
|
gboolean is_repo_id_valid (const char *id);
|
|
|
|
|
|
|
|
SeafRepo*
|
|
|
|
seaf_repo_new (const char *id, const char *name, const char *desc);
|
|
|
|
|
|
|
|
void
|
|
|
|
seaf_repo_free (SeafRepo *repo);
|
|
|
|
|
|
|
|
void
|
|
|
|
seaf_repo_ref (SeafRepo *repo);
|
|
|
|
|
|
|
|
void
|
|
|
|
seaf_repo_unref (SeafRepo *repo);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_set_head (SeafRepo *repo, SeafBranch *branch);
|
|
|
|
|
|
|
|
/* Update repo name, desc, magic etc from commit.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
seaf_repo_from_commit (SeafRepo *repo, SeafCommit *commit);
|
|
|
|
|
|
|
|
void
|
|
|
|
seaf_fill_repo_obj_from_commit (GList **repos);
|
|
|
|
|
|
|
|
/* Update repo-related fields to commit.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
seaf_repo_to_commit (SeafRepo *repo, SeafCommit *commit);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Returns a list of all commits belongs to the repo.
|
|
|
|
* The commits in the repos are all unique.
|
|
|
|
*/
|
|
|
|
GList *
|
|
|
|
seaf_repo_get_commits (SeafRepo *repo);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_diff (SeafRepo *repo, const char *arg1, const char *arg2, int fold_dir_results, char **error);
|
|
|
|
|
|
|
|
typedef struct _SeafRepoManager SeafRepoManager;
|
|
|
|
typedef struct _SeafRepoManagerPriv SeafRepoManagerPriv;
|
|
|
|
|
|
|
|
struct _SeafRepoManager {
|
|
|
|
struct _SeafileSession *seaf;
|
|
|
|
|
|
|
|
SeafRepoManagerPriv *priv;
|
|
|
|
};
|
|
|
|
|
|
|
|
SeafRepoManager*
|
|
|
|
seaf_repo_manager_new (struct _SeafileSession *seaf);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_init (SeafRepoManager *mgr);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_start (SeafRepoManager *mgr);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Repo Management functions.
|
|
|
|
*/
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_add_repo (SeafRepoManager *mgr, SeafRepo *repo);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_del_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_del_virtual_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
SeafRepo*
|
|
|
|
seaf_repo_manager_get_repo (SeafRepoManager *manager, const gchar *id);
|
|
|
|
|
|
|
|
/* Return repo object even if it's corrupted. */
|
|
|
|
SeafRepo*
|
|
|
|
seaf_repo_manager_get_repo_ex (SeafRepoManager *manager, const gchar *id);
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
seaf_repo_manager_repo_exists (SeafRepoManager *manager, const gchar *id);
|
|
|
|
|
|
|
|
GList*
|
2019-12-31 06:38:24 +00:00
|
|
|
seaf_repo_manager_get_repo_list (SeafRepoManager *mgr, int start, int limit,
|
|
|
|
const gchar *order_by);
|
2016-08-10 06:53:33 +00:00
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_repo_manager_count_repos (SeafRepoManager *mgr, GError **error);
|
|
|
|
|
|
|
|
GList*
|
|
|
|
seaf_repo_manager_get_trash_repo_list (SeafRepoManager *mgr,
|
|
|
|
int start,
|
|
|
|
int limit,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_trash_repos_by_owner (SeafRepoManager *mgr,
|
|
|
|
const char *owner,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_del_repo_from_trash (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/* Remove all entries in the repo trash. */
|
|
|
|
int
|
|
|
|
seaf_repo_manager_empty_repo_trash (SeafRepoManager *mgr, GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_empty_repo_trash_by_owner (SeafRepoManager *mgr,
|
|
|
|
const char *owner,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_restore_repo_from_trash (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_repo_id_list (SeafRepoManager *mgr);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_branch_repo_unmap (SeafRepoManager *manager, SeafBranch *branch);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Repo properties functions.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define MAX_REPO_TOKEN 64
|
|
|
|
#define DEFAULT_REPO_TOKEN "default"
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_get_email_by_token (SeafRepoManager *manager,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *token);
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_generate_repo_token (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *email,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_add_token_peer_info (SeafRepoManager *mgr,
|
|
|
|
const char *token,
|
|
|
|
const char *peer_id,
|
|
|
|
const char *peer_ip,
|
|
|
|
const char *peer_name,
|
|
|
|
gint64 sync_time,
|
|
|
|
const char *client_ver);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_update_token_peer_info (SeafRepoManager *mgr,
|
|
|
|
const char *token,
|
|
|
|
const char *peer_ip,
|
|
|
|
gint64 sync_time,
|
|
|
|
const char *client_ver);
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
seaf_repo_manager_token_peer_info_exists (SeafRepoManager *mgr,
|
|
|
|
const char *token);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_delete_token (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *token,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_list_repo_tokens (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
GError **error);
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_list_repo_tokens_by_email (SeafRepoManager *mgr,
|
|
|
|
const char *email,
|
|
|
|
GError **error);
|
|
|
|
int
|
|
|
|
seaf_repo_manager_delete_repo_tokens_by_peer_id (SeafRepoManager *mgr,
|
|
|
|
const char *email,
|
|
|
|
const char *peer_id,
|
|
|
|
GList **tokens,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_delete_repo_tokens_by_email (SeafRepoManager *mgr,
|
|
|
|
const char *email,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_repo_manager_get_repo_size (SeafRepoManager *mgr, const char *repo_id);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_set_repo_history_limit (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
int days);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* > 0: keep a period of history;
|
|
|
|
* = 0: don't keep history;
|
|
|
|
* < 0: keep full history.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
seaf_repo_manager_get_repo_history_limit (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_set_repo_valid_since (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
gint64 timestamp);
|
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_repo_manager_get_repo_valid_since (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Return the timestamp to stop traversing history.
|
|
|
|
* Returns > 0 if traverse a period of history;
|
|
|
|
* Returns = 0 if only traverse the head commit;
|
|
|
|
* Returns < 0 if traverse full history.
|
|
|
|
*/
|
|
|
|
gint64
|
|
|
|
seaf_repo_manager_get_repo_truncate_time (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Repo Operations.
|
|
|
|
*/
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_revert_on_server (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *commit_id,
|
|
|
|
const char *user_name,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add a new file in a repo.
|
|
|
|
* The content of the file is stored in a temporary file.
|
|
|
|
* @repo_id: id of the repo
|
|
|
|
* @temp_file_path: path of the temporary file
|
|
|
|
* @parent_dir: the directory to add this file
|
|
|
|
* @file_name: the name of the new file
|
|
|
|
* @user: author of this operation
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
seaf_repo_manager_post_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *temp_file_path,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *file_name,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_post_multi_files (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *filenames_json,
|
|
|
|
const char *paths_json,
|
|
|
|
const char *user,
|
|
|
|
int replace_existed,
|
|
|
|
char **new_ids,
|
2018-02-06 06:37:27 +00:00
|
|
|
char **task_id,
|
2016-08-10 06:53:33 +00:00
|
|
|
GError **error);
|
|
|
|
|
2017-11-18 03:33:19 +00:00
|
|
|
/* int */
|
|
|
|
/* seaf_repo_manager_post_file_blocks (SeafRepoManager *mgr, */
|
|
|
|
/* const char *repo_id, */
|
|
|
|
/* const char *parent_dir, */
|
|
|
|
/* const char *file_name, */
|
|
|
|
/* const char *blockids_json, */
|
|
|
|
/* const char *paths_json, */
|
|
|
|
/* const char *user, */
|
|
|
|
/* gint64 file_size, */
|
|
|
|
/* int replace_existed, */
|
|
|
|
/* char **new_id, */
|
|
|
|
/* GError **error); */
|
|
|
|
|
2016-08-10 06:53:33 +00:00
|
|
|
int
|
|
|
|
seaf_repo_manager_post_blocks (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *blockids_json,
|
|
|
|
const char *paths_json,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_commit_file_blocks (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *file_name,
|
|
|
|
const char *blockids_json,
|
|
|
|
const char *user,
|
|
|
|
gint64 file_size,
|
|
|
|
int replace_existed,
|
|
|
|
char **new_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_post_empty_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *new_file_name,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_post_dir (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *new_dir_name,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
2017-02-14 07:11:45 +00:00
|
|
|
int
|
|
|
|
seaf_repo_manager_mkdir_with_parents (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *new_dir_path,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
2016-08-10 06:53:33 +00:00
|
|
|
/**
|
|
|
|
* Update an existing file in a repo
|
|
|
|
* @params: same as seaf_repo_manager_post_file
|
|
|
|
* @head_id: the commit id for the original file version.
|
|
|
|
* It's optional. If it's NULL, the current repo head will be used.
|
|
|
|
* @new_file_id: The return location of the new file id
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
seaf_repo_manager_put_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *temp_file_path,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *file_name,
|
|
|
|
const char *user,
|
|
|
|
const char *head_id,
|
|
|
|
char **new_file_id,
|
|
|
|
GError **error);
|
|
|
|
|
2017-11-18 03:33:19 +00:00
|
|
|
/* int */
|
|
|
|
/* seaf_repo_manager_put_file_blocks (SeafRepoManager *mgr, */
|
|
|
|
/* const char *repo_id, */
|
|
|
|
/* const char *parent_dir, */
|
|
|
|
/* const char *file_name, */
|
|
|
|
/* const char *blockids_json, */
|
|
|
|
/* const char *paths_json, */
|
|
|
|
/* const char *user, */
|
|
|
|
/* const char *head_id, */
|
|
|
|
/* gint64 file_size, */
|
|
|
|
/* char **new_file_id, */
|
|
|
|
/* GError **error); */
|
2016-08-10 06:53:33 +00:00
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_del_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *file_name,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
SeafileCopyResult *
|
|
|
|
seaf_repo_manager_copy_file (SeafRepoManager *mgr,
|
|
|
|
const char *src_repo_id,
|
|
|
|
const char *src_dir,
|
|
|
|
const char *src_filename,
|
|
|
|
const char *dst_repo_id,
|
|
|
|
const char *dst_dir,
|
|
|
|
const char *dst_filename,
|
|
|
|
const char *user,
|
|
|
|
int need_progress,
|
|
|
|
int synchronous,
|
|
|
|
GError **error);
|
|
|
|
|
2017-06-29 06:15:18 +00:00
|
|
|
SeafileCopyResult *
|
|
|
|
seaf_repo_manager_copy_multiple_files (SeafRepoManager *mgr,
|
|
|
|
const char *src_repo_id,
|
|
|
|
const char *src_dir,
|
|
|
|
const char *src_filenames,
|
|
|
|
const char *dst_repo_id,
|
|
|
|
const char *dst_dir,
|
|
|
|
const char *dst_filenames,
|
|
|
|
const char *user,
|
|
|
|
int need_progress,
|
|
|
|
int synchronous,
|
|
|
|
GError **error);
|
|
|
|
|
2016-08-10 06:53:33 +00:00
|
|
|
SeafileCopyResult *
|
|
|
|
seaf_repo_manager_move_file (SeafRepoManager *mgr,
|
|
|
|
const char *src_repo_id,
|
|
|
|
const char *src_dir,
|
|
|
|
const char *src_filename,
|
|
|
|
const char *dst_repo_id,
|
|
|
|
const char *dst_dir,
|
|
|
|
const char *dst_filename,
|
|
|
|
int replace,
|
|
|
|
const char *user,
|
|
|
|
int need_progress,
|
|
|
|
int synchronous,
|
|
|
|
GError **error);
|
|
|
|
|
2017-06-29 06:15:18 +00:00
|
|
|
SeafileCopyResult *
|
|
|
|
seaf_repo_manager_move_multiple_files (SeafRepoManager *mgr,
|
|
|
|
const char *src_repo_id,
|
|
|
|
const char *src_dir,
|
|
|
|
const char *src_filenames,
|
|
|
|
const char *dst_repo_id,
|
|
|
|
const char *dst_dir,
|
|
|
|
const char *dst_filenames,
|
|
|
|
int replace,
|
|
|
|
const char *user,
|
|
|
|
int need_progress,
|
|
|
|
int synchronous,
|
|
|
|
GError **error);
|
|
|
|
|
2016-08-10 06:53:33 +00:00
|
|
|
int
|
|
|
|
seaf_repo_manager_rename_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
const char *oldname,
|
|
|
|
const char *newname,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_is_valid_filename (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *filename,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_create_new_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_name,
|
|
|
|
const char *repo_desc,
|
|
|
|
const char *owner_email,
|
|
|
|
const char *passwd,
|
2019-03-19 09:42:36 +00:00
|
|
|
int enc_version,
|
2016-08-10 06:53:33 +00:00
|
|
|
GError **error);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_create_enc_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *repo_name,
|
|
|
|
const char *repo_desc,
|
|
|
|
const char *owner_email,
|
|
|
|
const char *magic,
|
|
|
|
const char *random_key,
|
2019-03-19 09:42:36 +00:00
|
|
|
const char *salt,
|
2016-08-10 06:53:33 +00:00
|
|
|
int enc_version,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/* Give a repo and a path in this repo, returns a list of commits, where every
|
|
|
|
* commit contains a unique version of the file. The commits are sorted in
|
|
|
|
* ascending order of commit time. */
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_list_file_revisions (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *start_commit_id,
|
|
|
|
const char *path,
|
|
|
|
int limit,
|
|
|
|
gboolean got_latest,
|
2017-12-08 03:58:24 +00:00
|
|
|
gboolean got_second,
|
2016-08-10 06:53:33 +00:00
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_calc_files_last_modified (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *parent_dir,
|
|
|
|
int limit,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_revert_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *commit_id,
|
|
|
|
const char *path,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_revert_dir (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *old_commit_id,
|
|
|
|
const char *dir_path,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Return deleted files/dirs.
|
|
|
|
*/
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_deleted_entries (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
int show_days,
|
|
|
|
const char *path,
|
|
|
|
const char *scan_stat,
|
|
|
|
int limit,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Set the dir_id of @dir_path to @new_dir_id.
|
|
|
|
* @new_commit_id: The new head commit id after the update.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
seaf_repo_manager_update_dir (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *dir_path,
|
|
|
|
const char *new_dir_id,
|
|
|
|
const char *user,
|
|
|
|
const char *head_id,
|
|
|
|
char *new_commit_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Permission related functions.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Owner functions. */
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_set_repo_owner (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *email);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_get_repo_owner (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_orphan_repo_list (SeafRepoManager *mgr);
|
|
|
|
|
|
|
|
/* TODO: add start and limit. */
|
|
|
|
/* Get repos owned by this user.
|
|
|
|
*/
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
|
|
|
|
const char *email,
|
2017-04-06 06:58:59 +00:00
|
|
|
int ret_corrupted,
|
|
|
|
int start,
|
2020-11-28 06:40:27 +00:00
|
|
|
int limit,
|
|
|
|
gboolean *db_err);
|
2019-11-18 05:21:28 +00:00
|
|
|
GList *
|
|
|
|
seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name);
|
2016-08-10 06:53:33 +00:00
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_repo_ids_by_owner (SeafRepoManager *mgr,
|
|
|
|
const char *email);
|
|
|
|
|
|
|
|
/* Group repos. */
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_add_group_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
int group_id,
|
|
|
|
const char *owner,
|
|
|
|
const char *permission,
|
|
|
|
GError **error);
|
|
|
|
int
|
|
|
|
seaf_repo_manager_del_group_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
int group_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_groups_by_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
typedef struct GroupPerm {
|
|
|
|
int group_id;
|
|
|
|
char permission[16];
|
|
|
|
} GroupPerm;
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_group_perm_by_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_set_group_repo_perm (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
int group_id,
|
|
|
|
const char *permission,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_get_group_repo_owner (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_group_repoids (SeafRepoManager *mgr,
|
|
|
|
int group_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_repos_by_group (SeafRepoManager *mgr,
|
|
|
|
int group_id,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_group_repos_by_owner (SeafRepoManager *mgr,
|
|
|
|
const char *owner,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_remove_group_repos (SeafRepoManager *mgr,
|
|
|
|
int group_id,
|
|
|
|
const char *owner,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/* Inner public repos */
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_set_inner_pub_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *permission);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_unset_inner_pub_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
seaf_repo_manager_is_inner_pub_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
GList *
|
2020-11-28 06:40:27 +00:00
|
|
|
seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr, gboolean *db_err);
|
2016-08-10 06:53:33 +00:00
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_repo_manager_count_inner_pub_repos (SeafRepoManager *mgr);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_list_inner_pub_repos_by_owner (SeafRepoManager *mgr,
|
|
|
|
const char *user);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_get_inner_pub_repo_perm (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Comprehensive repo permission checker.
|
|
|
|
* It checks if @user have permission to access @repo_id.
|
|
|
|
*/
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_check_permission (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_list_dir_with_perm (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *dir_path,
|
|
|
|
const char *dir_id,
|
|
|
|
const char *user,
|
|
|
|
int offset,
|
|
|
|
int limit,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
/* Web access permission. */
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_set_access_property (SeafRepoManager *mgr, const char *repo_id,
|
|
|
|
const char *ap);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_query_access_property (SeafRepoManager *mgr, const char *repo_id);
|
|
|
|
|
|
|
|
/* Decrypted repo token cache. */
|
|
|
|
|
|
|
|
void
|
|
|
|
seaf_repo_manager_add_decrypted_token (SeafRepoManager *mgr,
|
|
|
|
const char *encrypted_token,
|
|
|
|
const char *session_key,
|
|
|
|
const char *decrypted_token);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_get_decrypted_token (SeafRepoManager *mgr,
|
|
|
|
const char *encrypted_token,
|
|
|
|
const char *session_key);
|
|
|
|
|
|
|
|
/* Virtual repo related. */
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_create_virtual_repo (SeafRepoManager *mgr,
|
|
|
|
const char *origin_repo_id,
|
|
|
|
const char *path,
|
|
|
|
const char *repo_name,
|
|
|
|
const char *repo_desc,
|
|
|
|
const char *owner,
|
|
|
|
const char *passwd,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
SeafVirtRepo *
|
|
|
|
seaf_repo_manager_get_virtual_repo_info (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_virtual_info_by_origin (SeafRepoManager *mgr,
|
|
|
|
const char *origin_repo);
|
|
|
|
|
|
|
|
void
|
|
|
|
seaf_virtual_repo_info_free (SeafVirtRepo *vinfo);
|
|
|
|
|
|
|
|
gboolean
|
|
|
|
seaf_repo_manager_is_virtual_repo (SeafRepoManager *mgr, const char *repo_id);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_get_virtual_repo_id (SeafRepoManager *mgr,
|
|
|
|
const char *origin_repo,
|
|
|
|
const char *path,
|
|
|
|
const char *owner);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_virtual_repos_by_owner (SeafRepoManager *mgr,
|
|
|
|
const char *owner,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_virtual_repo_ids_by_origin (SeafRepoManager *mgr,
|
|
|
|
const char *origin_repo);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* if @repo_id is a virtual repo, try to merge with origin;
|
|
|
|
* if not, try to merge with its virtual repos.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
seaf_repo_manager_merge_virtual_repo (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *exclude_repo);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Check each virtual repo of @origin_repo_id, if the path corresponds to it
|
|
|
|
* doesn't exist, delete the virtual repo.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
seaf_repo_manager_cleanup_virtual_repos (SeafRepoManager *mgr,
|
|
|
|
const char *origin_repo_id);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_init_merge_scheduler ();
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_shared_users_for_subdir (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *path,
|
|
|
|
const char *from_user,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_repo_manager_get_shared_groups_for_subdir (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *path,
|
|
|
|
const char *from_user,
|
|
|
|
GError **error);
|
2016-11-07 10:26:29 +00:00
|
|
|
int
|
|
|
|
seaf_repo_manager_edit_repo (const char *repo_id,
|
|
|
|
const char *name,
|
|
|
|
const char *description,
|
|
|
|
const char *user,
|
|
|
|
GError **error);
|
2016-12-30 08:57:33 +00:00
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_get_total_file_number (GError **error);
|
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_get_total_storage (GError **error);
|
2017-06-23 06:23:59 +00:00
|
|
|
|
2019-02-19 09:18:31 +00:00
|
|
|
int
|
|
|
|
seaf_repo_manager_add_upload_tmp_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *file_path,
|
|
|
|
const char *tmp_file,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_del_upload_tmp_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *file_path,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_get_upload_tmp_file (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *file_path,
|
|
|
|
GError **error);
|
|
|
|
|
|
|
|
gint64
|
|
|
|
seaf_repo_manager_get_upload_tmp_file_offset (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *file_path,
|
|
|
|
GError **error);
|
|
|
|
|
2017-06-23 06:23:59 +00:00
|
|
|
void
|
|
|
|
seaf_repo_manager_update_repo_info (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *head_commit_id);
|
|
|
|
|
|
|
|
int
|
|
|
|
set_repo_commit_to_db (const char *repo_id, const char *repo_name, gint64 update_time,
|
|
|
|
int version, gboolean is_encrypted, const char *last_modifier);
|
2017-08-03 05:52:28 +00:00
|
|
|
char *
|
|
|
|
seaf_get_trash_repo_owner (const char *repo_id);
|
2017-08-23 07:28:19 +00:00
|
|
|
|
2017-10-30 09:44:33 +00:00
|
|
|
GObject *
|
|
|
|
seaf_get_group_shared_repo_by_path (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *path,
|
|
|
|
int group_id,
|
|
|
|
gboolean is_org,
|
|
|
|
GError **error);
|
2017-12-29 03:46:25 +00:00
|
|
|
|
|
|
|
GList *
|
|
|
|
seaf_get_group_repos_by_user (SeafRepoManager *mgr,
|
|
|
|
const char *user,
|
|
|
|
int org_id,
|
|
|
|
GError **error);
|
2018-01-06 07:28:11 +00:00
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_set_subdir_group_perm_by_path (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *username,
|
|
|
|
int group_id,
|
|
|
|
const char *permission,
|
|
|
|
const char *path);
|
2018-02-06 06:37:27 +00:00
|
|
|
|
|
|
|
int
|
|
|
|
post_files_and_gen_commit (GList *filenames,
|
|
|
|
SeafRepo *repo,
|
|
|
|
const char *user,
|
|
|
|
char **ret_json,
|
|
|
|
int replace_existed,
|
|
|
|
const char *canon_path,
|
|
|
|
GList *id_list,
|
|
|
|
GList *size_list,
|
|
|
|
GError **error);
|
2018-08-07 10:19:46 +00:00
|
|
|
|
|
|
|
char *
|
|
|
|
seaf_repo_manager_convert_repo_path (SeafRepoManager *mgr,
|
|
|
|
const char *repo_id,
|
|
|
|
const char *path,
|
|
|
|
const char *user,
|
|
|
|
gboolean is_org,
|
|
|
|
GError **error);
|
2019-03-11 06:35:41 +00:00
|
|
|
int
|
|
|
|
seaf_repo_manager_set_repo_status(SeafRepoManager *mgr,
|
|
|
|
const char *repo_id, RepoStatus status);
|
|
|
|
|
|
|
|
int
|
|
|
|
seaf_repo_manager_get_repo_status(SeafRepoManager *mgr,
|
|
|
|
const char *repo_id);
|
2016-08-10 06:53:33 +00:00
|
|
|
#endif
|