1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-05-13 18:45:13 +00:00

Add get repo by id prefix RPC ()

Add get repos by id prefix test

del ret_corrupted parameter
This commit is contained in:
feiniks 2022-05-30 14:07:58 +08:00 committed by GitHub
parent e7f96976e9
commit cf479cefc2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 134 additions and 0 deletions

View File

@ -5012,6 +5012,31 @@ ccnet_rpc_list_all_departments (GError **error)
return ret;
}
GList*
seafile_get_repos_by_id_prefix (const char *id_prefix, int start,
int limit, GError **error)
{
GList *ret = NULL;
GList *repos, *ptr;
if (!id_prefix) {
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Argument should not be null");
return NULL;
}
repos = seaf_repo_manager_get_repos_by_id_prefix (seaf->repo_mgr, id_prefix,
start, limit);
ret = convert_repo_list (repos);
for(ptr = repos; ptr; ptr = ptr->next) {
seaf_repo_unref ((SeafRepo *)ptr->data);
}
g_list_free (repos);
return ret;
}
GList *
ccnet_rpc_get_all_groups (int start, int limit,
const char *source, GError **error)

View File

@ -1128,6 +1128,10 @@ seafile_set_repo_status(const char *repo_id, int status, GError **error);
int
seafile_get_repo_status(const char *repo_id, GError **error);
GList*
seafile_get_repos_by_id_prefix (const char *id_prefix, int start,
int limit, GError **error);
int
seafile_publish_event(const char *channel, const char *content, GError **error);

View File

@ -16,6 +16,11 @@ class SeafServerThreadedRpcClient(NamedPipeClient):
pass
create_enc_repo = seafile_create_enc_repo
@searpc_func("objlist", ["string", "int", "int"])
def seafile_get_repos_by_id_prefix(id_prefix, start, limit):
pass
get_repos_by_id_prefix = seafile_get_repos_by_id_prefix
@searpc_func("object", ["string"])
def seafile_get_repo(repo_id):
pass

View File

@ -92,6 +92,12 @@ class SeafileAPI(object):
def create_enc_repo(self, repo_id, name, desc, username, magic, random_key, salt, enc_version):
return seafserv_threaded_rpc.create_enc_repo(repo_id, name, desc, username, magic, random_key, salt, enc_version)
def get_repos_by_id_prefix(self, id_prefix, start=-1, limit=-1):
"""
Return: a list of Repo objects
"""
return seafserv_threaded_rpc.get_repos_by_id_prefix(id_prefix,
start, limit)
def get_repo(self, repo_id):
"""
Return: a Repo object (lib/repo.vala)

View File

@ -2321,6 +2321,83 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
return ret;
}
GList *
seaf_repo_manager_get_repos_by_id_prefix (SeafRepoManager *mgr,
const char *id_prefix,
int start,
int limit)
{
GList *repo_list = NULL, *ptr;
char *sql;
SeafRepo *repo = NULL;
int len = strlen(id_prefix);
if (len >= 37)
return NULL;
int db_type = seaf_db_type(mgr->seaf->db);
char *db_patt = g_strdup_printf ("%s%%", id_prefix);
if (start == -1 && limit == -1) {
if (db_type != SEAF_DB_TYPE_PGSQL)
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"WHERE i.repo_id LIKE ? AND "
"i.repo_id NOT IN (SELECT v.repo_id FROM VirtualRepo v) "
"ORDER BY i.update_time DESC, i.repo_id";
else
sql = "SELECT i.repo_id, s.\"size\", b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"WHERE i.repo_id LIKE ? AND "
"i.repo_id NOT IN (SELECT v.repo_id FROM VirtualRepo v) "
"ORDER BY i.update_time DESC, i.repo_id";
if (seaf_db_statement_foreach_row (mgr->seaf->db, sql,
collect_repos_fill_size_commit, &repo_list,
1, "string", db_patt) < 0) {
g_free(db_patt);
return NULL;
}
} else {
if (db_type != SEAF_DB_TYPE_PGSQL)
sql = "SELECT i.repo_id, s.size, b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"WHERE i.repo_id LIKE ? AND "
"i.repo_id NOT IN (SELECT v.repo_id FROM VirtualRepo v) "
"ORDER BY i.update_time DESC, i.repo_id "
"LIMIT ? OFFSET ?";
else
sql = "SELECT i.repo_id, s.\"size\", b.commit_id, i.name, i.update_time, "
"i.version, i.is_encrypted, i.last_modifier, i.status FROM "
"RepoInfo i LEFT JOIN RepoSize s ON i.repo_id = s.repo_id "
"LEFT JOIN Branch b ON i.repo_id = b.repo_id "
"WHERE i.repo_id LIKE ? AND "
"i.repo_id NOT IN (SELECT v.repo_id FROM VirtualRepo v) "
"ORDER BY i.update_time DESC, i.repo_id "
"LIMIT ? OFFSET ?";
if (seaf_db_statement_foreach_row (mgr->seaf->db, sql,
collect_repos_fill_size_commit,
&repo_list,
3, "string", db_patt,
"int", limit,
"int", start) < 0) {
g_free(db_patt);
return NULL;
}
}
g_free(db_patt);
return repo_list;
}
GList *
seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name)
{

View File

@ -605,6 +605,13 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
int start,
int limit,
gboolean *db_err);
GList *
seaf_repo_manager_get_repos_by_id_prefix (SeafRepoManager *mgr,
const char *id_prefix,
int start,
int limit);
GList *
seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name);

View File

@ -75,6 +75,11 @@ static void start_rpc_service (const char *seafile_dir,
/* threaded services */
/* repo manipulation */
searpc_server_register_function ("seafserv-threaded-rpcserver",
seafile_get_repos_by_id_prefix,
"seafile_get_repos_by_id_prefix",
searpc_signature_objlist__string_int_int());
searpc_server_register_function ("seafserv-threaded-rpcserver",
seafile_get_repo,
"seafile_get_repo",

View File

@ -73,6 +73,11 @@ def test_repo_manipulation():
t_enc_repo_id = api.create_enc_repo (t_enc_repo_id, 'test_encrypted_repo', '', USER, t_magic, t_random_key, None, t_enc_version)
assert t_enc_repo_id == '826d1b7b-f110-46f2-8d5e-7b5ac3e11f4d'
#test get_repos_by_id_prefix
t_id_prefix = '826d1b7b'
t_repo_list = api.get_repos_by_id_prefix(t_id_prefix, -1, -1)
assert t_repo_list[0].id == '826d1b7b-f110-46f2-8d5e-7b5ac3e11f4d'
#test get_repo_list
#test order by None
order_by = None