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 (#557)
Add get repos by id prefix test del ret_corrupted parameter
This commit is contained in:
parent
e7f96976e9
commit
cf479cefc2
common
include
python
server
tests/test_repo_manipulation
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user