diff -Nru seafile-daemon-7.0.3/app/seaf-cli seafile-daemon-7.0.4/app/seaf-cli --- seafile-daemon-7.0.3/app/seaf-cli 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/app/seaf-cli 2019-11-20 08:47:16.000000000 +0000 @@ -106,8 +106,10 @@ if 'HOME' in os.environ: DEFAULT_CONF_DIR = "%s/.ccnet" % os.environ['HOME'] + DEFAULT_USER_CONF_DIR = "%s/.seafile.conf" % os.environ['HOME'] else: DEFAULT_CONF_DIR = None + DEFAULT_USER_CONF_DIR = None seafile_datadir = None seafile_worktree = None @@ -176,6 +178,29 @@ get_device_id(conf_dir) return conf_dir +def _user_config_valid(conf): + if exists(conf): + return True + return False + +def _parse_user_config(conf): + try: + from configparser import ConfigParser + from configparser import NoOptionError + except ImportError: + from ConfigParser import ConfigParser + from ConfigParser import NoOptionError + + cfg = ConfigParser() + cfg.read(conf) + if len(cfg.sections()) < 1 or cfg.sections()[0] != 'account': + return None, None + try: + server = cfg.get('account', 'server') + user = cfg.get('account', 'user') + return server,user + except NoOptionError: + return None, None def run_argv(argv, cwd=None, env=None, suppress_stdout=False, suppress_stderr=False): '''Run a program and wait it to finish, and return its exit code. The @@ -377,7 +402,18 @@ conf_dir = _conf_dir(args) - url = args.server + server_from_config, user_from_config = None, None + user_config_dir = args.C + if not user_config_dir: + user_config_dir = DEFAULT_USER_CONF_DIR + else: + user_config_dir = abspath(user_config_dir) + if _user_config_valid(user_config_dir): + server_from_config, user_from_config = _parse_user_config(user_config_dir) + + url = args.server + if not url and server_from_config: + url = server_from_config if not url: print("Seafile server url need to be presented") sys.exit(1) @@ -385,6 +421,8 @@ seafile_rpc = get_rpc_client(conf_dir) username = args.username + if not username and user_from_config: + username = user_from_config; if not username: username = input("Enter username: ") password = args.password @@ -431,7 +469,18 @@ print("Library id is required") sys.exit(1) + server_from_config, user_from_config = None, None + user_config_dir = args.C + if not user_config_dir: + user_config_dir = DEFAULT_USER_CONF_DIR + else: + user_config_dir = abspath(user_config_dir) + if _user_config_valid(user_config_dir): + server_from_config, user_from_config = _parse_user_config(user_config_dir) + url = args.server + if not url and server_from_config: + url = server_from_config if not url: print("Seafile server url need to be presented") sys.exit(1) @@ -444,6 +493,8 @@ seafile_rpc = get_rpc_client(conf_dir) username = args.username + if not username and user_from_config: + username = user_from_config if not username: username = input("Enter username: ") password = args.password @@ -462,9 +513,6 @@ random_key = tmp.get('random_key', None) clone_token = tmp['token'] - relay_id = tmp['relay_id'] - relay_addr = tmp['relay_addr'] - relay_port = str(tmp['relay_port']) email = tmp['email'] repo_name = tmp['repo_name'] version = tmp.get('repo_version', 0) @@ -494,13 +542,10 @@ seafile_rpc.download(repo, version, - relay_id, repo_name, download_dir, clone_token, repo_passwd, magic, - relay_addr, - relay_port, email, random_key, enc_version, more_info) @@ -515,7 +560,18 @@ print("Library name is required") sys.exit(1) - url = args.server + server_from_config, user_from_config = None, None + user_config_dir = args.C + if not user_config_dir: + user_config_dir = DEFAULT_USER_CONF_DIR + else: + user_config_dir = abspath(user_config_dir) + if _user_config_valid(user_config_dir): + server_from_config, user_from_config = _parse_user_config(user_config_dir) + + url = args.server + if not url and server_from_config: + url = server_from_config if not url: print("Seafile server url need to be presented") sys.exit(1) @@ -523,6 +579,8 @@ seafile_rpc = get_rpc_client(conf_dir) username = args.username + if not username and user_from_config: + username = user_from_config; if not username: username = input("Enter username: ") args.username = username @@ -559,7 +617,18 @@ print("Library id is required") sys.exit(1) + server_from_config, user_from_config = None, None + user_config_dir = args.C + if not user_config_dir: + user_config_dir = DEFAULT_USER_CONF_DIR + else: + user_config_dir = abspath(user_config_dir) + if _user_config_valid(user_config_dir): + server_from_config, user_from_config = _parse_user_config(user_config_dir) + url = args.server + if not url and server_from_config: + url = server_from_config if not url: print("Seafile server url is required") sys.exit(1) @@ -577,6 +646,8 @@ seafile_rpc = get_rpc_client(conf_dir) username = args.username + if not username and user_from_config: + username = user_from_config; if not username: username = input("Enter username: ") password = args.password @@ -593,9 +664,6 @@ random_key = tmp.get('random_key', None) clone_token = tmp['token'] - relay_id = tmp['relay_id'] - relay_addr = tmp['relay_addr'] - relay_port = str(tmp['relay_port']) email = tmp['email'] repo_name = tmp['repo_name'] version = tmp.get('repo_version', 0) @@ -624,13 +692,10 @@ seafile_rpc.clone(repo, version, - relay_id, repo_name, folder, clone_token, repo_passwd, magic, - relay_addr, - relay_port, email, random_key, enc_version, more_info) @@ -766,8 +831,19 @@ '''Create a library''' conf_dir = _conf_dir(args) + server_from_config, user_from_config = None, None + user_config_dir = args.C + if not user_config_dir: + user_config_dir = DEFAULT_USER_CONF_DIR + else: + user_config_dir = abspath(user_config_dir) + if _user_config_valid(user_config_dir): + server_from_config, user_from_config = _parse_user_config(user_config_dir) + # check username and password username = args.username + if not username and user_from_config: + username = user_from_config; if not username: username = input("Enter username: ") password = args.password @@ -776,7 +852,9 @@ tfa = args.tfa # check url - url = args.server + url = args.server + if not url and server_from_config: + url = server_from_config if not url: print("Seafile server url need to be presented") sys.exit(1) @@ -825,6 +903,7 @@ parser_download = subparsers.add_parser('list-remote', help='List remote libraries') parser_download.set_defaults(func=seaf_list_remote) parser_download.add_argument('-c', '--confdir', help='the config directory', type=str, required=confdir_required) + parser_download.add_argument('-C', help='the user config directory', type=str) parser_download.add_argument('-s', '--server', help='URL for seafile server', type=str) parser_download.add_argument('-u', '--username', help='username', type=str) parser_download.add_argument('-p', '--password', help='password', type=str) @@ -840,6 +919,7 @@ help='Download a library from seafile server') parser_download.set_defaults(func=seaf_download) parser_download.add_argument('-c', '--confdir', help='the config directory', type=str, required=confdir_required) + parser_download.add_argument('-C', help='the user config directory', type=str) parser_download.add_argument('-l', '--library', help='library id', type=str) parser_download.add_argument('-s', '--server', help='URL for seafile server', type=str) parser_download.add_argument('-d', '--dir', help='the directory to put the library', type=str) @@ -853,6 +933,7 @@ help='Download a library defined by name from seafile server') parser_download.set_defaults(func=seaf_download_by_name) parser_download.add_argument('-c', '--confdir', help='the config directory', type=str, required=confdir_required) + parser_download.add_argument('-C', help='the user config directory', type=str) parser_download.add_argument('-L', '--libraryname', help='library name', type=str) parser_download.add_argument('-s', '--server', help='URL for seafile server', type=str) parser_download.add_argument('-d', '--dir', help='the directory to put the library', type=str) @@ -867,6 +948,7 @@ help='Sync a library with an existing foler') parser_sync.set_defaults(func=seaf_sync) parser_sync.add_argument('-c', '--confdir', help='the config directory', type=str, required=confdir_required) + parser_sync.add_argument('-C', help='the user config directory', type=str) parser_sync.add_argument('-l', '--library', help='library id', type=str) parser_sync.add_argument('-s', '--server', help='URL for seafile server', type=str) parser_sync.add_argument('-u', '--username', help='username', type=str) @@ -894,6 +976,7 @@ parser_create.add_argument('-p', '--password', help='password', type=str) parser_create.add_argument('-a', '--tfa', help='two-factor authentication', type=str) parser_create.add_argument('-c', '--confdir', help='the config directory', type=str, required=confdir_required) + parser_create.add_argument('-C', help='the user config directory', type=str) # config parser_config = subparsers.add_parser('config', diff -Nru seafile-daemon-7.0.3/common/rpc-service.c seafile-daemon-7.0.4/common/rpc-service.c --- seafile-daemon-7.0.3/common/rpc-service.c 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/common/rpc-service.c 2019-11-20 08:47:16.000000000 +0000 @@ -95,16 +95,6 @@ #include "sync-mgr.h" -GObject * -seafile_get_session_info (GError **error) -{ - SeafileSessionInfo *info; - - info = seafile_session_info_new (); - g_object_set (info, "datadir", seaf->seaf_dir, NULL); - return (GObject *) info; -} - int seafile_set_config (const char *key, const char *value, GError **error) { @@ -160,28 +150,6 @@ return seafile_session_config_set_int (seaf, KEY_DOWNLOAD_LIMIT, limit); } -int -seafile_repo_last_modify(const char *repo_id, GError **error) -{ - SeafRepo *repo; - int ctime = 0; - - if (!repo_id) { - g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Argument should not be null"); - return -1; - } - - repo = seaf_repo_manager_get_repo (seaf->repo_mgr, repo_id); - if (!repo) { - g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_REPO, "No such repository"); - return -1; - } - - ctime = repo->last_modify; - - return ctime; -} - char * seafile_gen_default_worktree (const char *worktree_parent, const char *repo_name, @@ -210,14 +178,11 @@ char * seafile_clone (const char *repo_id, int repo_version, - const char *relay_id, const char *repo_name, const char *worktree, const char *token, const char *passwd, const char *magic, - const char *peer_addr, - const char *peer_port, const char *email, const char *random_key, int enc_version, @@ -229,18 +194,13 @@ return NULL; } - if (!relay_id || strlen(relay_id) != 40) { - g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Invalid peer id"); - return NULL; - } - if (!worktree) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Worktre must be specified"); return NULL; } - if (!token || !peer_addr || !peer_port || !email ) { + if (!token || !email ) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Argument can't be NULL"); return NULL; @@ -248,13 +208,11 @@ return seaf_clone_manager_add_task (seaf->clone_mgr, repo_id, repo_version, - relay_id, repo_name, token, passwd, magic, enc_version, random_key, worktree, - peer_addr, peer_port, email, more_info, error); } @@ -262,14 +220,11 @@ char * seafile_download (const char *repo_id, int repo_version, - const char *relay_id, const char *repo_name, const char *wt_parent, const char *token, const char *passwd, const char *magic, - const char *peer_addr, - const char *peer_port, const char *email, const char *random_key, int enc_version, @@ -281,18 +236,13 @@ return NULL; } - if (!relay_id || strlen(relay_id) != 40) { - g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Invalid peer id"); - return NULL; - } - if (!wt_parent) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Worktre must be specified"); return NULL; } - if (!token || !peer_addr || !peer_port || !email ) { + if (!token || !email ) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Argument can't be NULL"); return NULL; @@ -300,12 +250,10 @@ return seaf_clone_manager_add_download_task (seaf->clone_mgr, repo_id, repo_version, - relay_id, repo_name, token, passwd, magic, enc_version, random_key, wt_parent, - peer_addr, peer_port, email, more_info, error); } @@ -316,12 +264,6 @@ return seaf_clone_manager_cancel_task (seaf->clone_mgr, repo_id); } -int -seafile_remove_clone_task (const char *repo_id, GError **error) -{ - return seaf_clone_manager_remove_task (seaf->clone_mgr, repo_id); -} - GList * seafile_get_clone_tasks (GError **error) { @@ -515,18 +457,17 @@ } int -seafile_update_repos_server_host (const char *old_host, - const char *new_host, +seafile_update_repos_server_host (const char *old_server_url, const char *new_server_url, GError **error) { - if (!old_host || !new_host || !new_server_url) { + if (!old_server_url || !new_server_url) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Argument should not be null"); return -1; } return seaf_repo_manager_update_repos_server_host( - seaf->repo_mgr, old_host, new_host, new_server_url); + seaf->repo_mgr, old_server_url, new_server_url); } int @@ -776,7 +717,7 @@ } static void -cancel_clone_tasks_by_account (const char *account_server, const char *account_email) +cancel_clone_tasks_by_account (const char *account_server_url, const char *account_email) { GList *ptr, *tasks; CloneTask *task; @@ -785,7 +726,7 @@ for (ptr = tasks; ptr != NULL; ptr = ptr->next) { task = ptr->data; - if (g_strcmp0(account_server, task->peer_addr) == 0 + if (g_strcmp0(account_server_url, task->server_url) == 0 && g_strcmp0(account_email, task->email) == 0) { seaf_clone_manager_cancel_task (seaf->clone_mgr, task->repo_id); } @@ -795,12 +736,13 @@ } int -seafile_unsync_repos_by_account (const char *server_addr, const char *email, GError **error) +seafile_unsync_repos_by_account (const char *server_url, const char *email, GError **error) { - if (!server_addr || !email) { + if (!server_url || !email) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Argument should not be null"); return -1; } + char *canon_server_url = canonical_server_url (server_url); GList *ptr, *repos = seaf_repo_manager_get_repo_list(seaf->repo_mgr, -1, -1); if (!repos) { @@ -809,35 +751,29 @@ for (ptr = repos; ptr; ptr = ptr->next) { SeafRepo *repo = (SeafRepo*)ptr->data; - char *addr = NULL; - seaf_repo_manager_get_repo_relay_info(seaf->repo_mgr, - repo->id, - &addr, /* addr */ - NULL); /* port */ - - if (g_strcmp0(addr, server_addr) == 0 && g_strcmp0(repo->email, email) == 0) { + if (g_strcmp0(repo->server_url, canon_server_url) == 0 && g_strcmp0(repo->email, email) == 0) { if (do_unsync_repo(repo) < 0) { return -1; } } - - g_free (addr); } g_list_free (repos); + g_free (canon_server_url); - cancel_clone_tasks_by_account (server_addr, email); + cancel_clone_tasks_by_account (server_url, email); return 0; } int -seafile_remove_repo_tokens_by_account (const char *server_addr, const char *email, GError **error) +seafile_remove_repo_tokens_by_account (const char *server_url, const char *email, GError **error) { - if (!server_addr || !email) { + if (!server_url || !email) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_BAD_ARGS, "Argument should not be null"); return -1; } + char *canon_server_url = canonical_server_url (server_url); GList *ptr, *repos = seaf_repo_manager_get_repo_list(seaf->repo_mgr, -1, -1); if (!repos) { @@ -846,24 +782,17 @@ for (ptr = repos; ptr; ptr = ptr->next) { SeafRepo *repo = (SeafRepo*)ptr->data; - char *addr = NULL; - seaf_repo_manager_get_repo_relay_info(seaf->repo_mgr, - repo->id, - &addr, /* addr */ - NULL); /* port */ - - if (g_strcmp0(addr, server_addr) == 0 && g_strcmp0(repo->email, email) == 0) { + if (g_strcmp0(repo->server_url, canon_server_url) == 0 && g_strcmp0(repo->email, email) == 0) { if (seaf_repo_manager_remove_repo_token(seaf->repo_mgr, repo) < 0) { return -1; } } - - g_free (addr); } g_list_free (repos); + g_free (canon_server_url); - cancel_clone_tasks_by_account (server_addr, email); + cancel_clone_tasks_by_account (server_url, email); return 0; } diff -Nru seafile-daemon-7.0.3/configure.ac seafile-daemon-7.0.4/configure.ac --- seafile-daemon-7.0.3/configure.ac 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/configure.ac 2019-11-20 08:47:16.000000000 +0000 @@ -2,7 +2,7 @@ AC_PREREQ(2.61) -AC_INIT([seafile], [7.0.3], [info@seafile.com]) +AC_INIT([seafile], [7.0.4], [info@seafile.com]) AC_CONFIG_HEADER([config.h]) AC_CONFIG_MACRO_DIR([m4]) @@ -152,6 +152,7 @@ LIBEVENT_REQUIRED=2.0 +LIBEVENT_PTHREADS_REQUIRED=2.0 GLIB_REQUIRED=2.16.0 SEARPC_REQUIRED=1.0 JANSSON_REQUIRED=2.2.1 @@ -187,6 +188,13 @@ AC_SUBST(CURL_CFLAGS) AC_SUBST(CURL_LIBS) +if test "$bwin32" != true; then +# do not check libevent_pthreads in win32 +PKG_CHECK_MODULES(LIBEVENT_PTHREADS, [libevent_pthreads >= $LIBEVENT_PTHREADS_REQUIRED]) +AC_SUBST(LIBEVENT_PTHREADS_CFLAGS) +AC_SUBST(LIBEVENT_PTHREADS_LIBS) +fi + AM_PATH_PYTHON([2.6]) if test "$bwin32" = true; then diff -Nru seafile-daemon-7.0.3/daemon/clone-mgr.c seafile-daemon-7.0.4/daemon/clone-mgr.c --- seafile-daemon-7.0.3/daemon/clone-mgr.c 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/daemon/clone-mgr.c 2019-11-20 08:47:16.000000000 +0000 @@ -278,23 +278,17 @@ static CloneTask * clone_task_new (const char *repo_id, - const char *peer_id, const char *repo_name, const char *token, const char *worktree, const char *passwd, - const char *peer_addr, - const char *peer_port, const char *email) { CloneTask *task = g_new0 (CloneTask, 1); memcpy (task->repo_id, repo_id, 37); - memcpy (task->peer_id, peer_id, 41); task->token = g_strdup (token); task->worktree = g_strdup(worktree); - task->peer_addr = g_strdup(peer_addr); - task->peer_port = g_strdup(peer_port); task->email = g_strdup(email); if (repo_name) task->repo_name = g_strdup(repo_name); @@ -453,24 +447,20 @@ restart_task (sqlite3_stmt *stmt, void *data) { SeafCloneManager *mgr = data; - const char *repo_id, *repo_name, *token, *peer_id, *worktree, *passwd; - const char *peer_addr, *peer_port, *email; + const char *repo_id, *repo_name, *token, *worktree, *passwd; + const char *email; CloneTask *task; SeafRepo *repo; repo_id = (const char *)sqlite3_column_text (stmt, 0); repo_name = (const char *)sqlite3_column_text (stmt, 1); token = (const char *)sqlite3_column_text (stmt, 2); - peer_id = (const char *)sqlite3_column_text (stmt, 3); worktree = (const char *)sqlite3_column_text (stmt, 4); passwd = (const char *)sqlite3_column_text (stmt, 5); - peer_addr = (const char *)sqlite3_column_text (stmt, 6); - peer_port = (const char *)sqlite3_column_text (stmt, 7); email = (const char *)sqlite3_column_text (stmt, 8); - task = clone_task_new (repo_id, peer_id, repo_name, - token, worktree, passwd, - peer_addr, peer_port, email); + task = clone_task_new (repo_id, repo_name, token, + worktree, passwd, email); task->manager = mgr; /* Default to 1. */ task->enc_version = 1; @@ -586,18 +576,17 @@ if (task->passwd) sql = sqlite3_mprintf ("REPLACE INTO CloneTasks VALUES " - "('%q', '%q', '%q', '%q', '%q', '%q', '%q', '%q', '%q')", + "('%q', '%q', '%q', NULL, '%q', '%q', NULL, NULL, '%q')", task->repo_id, task->repo_name, - task->token, task->peer_id, + task->token, task->worktree, task->passwd, - task->peer_addr, task->peer_port, task->email); + task->email); else sql = sqlite3_mprintf ("REPLACE INTO CloneTasks VALUES " - "('%q', '%q', '%q', '%q', '%q', NULL, '%q', '%q', '%q')", + "('%q', '%q', '%q', NULL, '%q', NULL, NULL, NULL, '%q')", task->repo_id, task->repo_name, - task->token, task->peer_id, - task->worktree, task->peer_addr, - task->peer_port, task->email); + task->token, + task->worktree, task->email); if (sqlite_query_exec (mgr->db, sql) < 0) { sqlite3_free (sql); @@ -988,30 +977,15 @@ } static char * -canonical_server_url (const char *url_in) -{ - char *url = g_strdup(url_in); - int len = strlen(url); - - if (url[len - 1] == '/') - url[len - 1] = 0; - - return url; -} - -static char * add_task_common (SeafCloneManager *mgr, const char *repo_id, int repo_version, - const char *peer_id, const char *repo_name, const char *token, const char *passwd, int enc_version, const char *random_key, const char *worktree, - const char *peer_addr, - const char *peer_port, const char *email, const char *more_info, gboolean sync_wt_name, @@ -1019,9 +993,9 @@ { CloneTask *task; - task = clone_task_new (repo_id, peer_id, repo_name, - token, worktree, passwd, - peer_addr, peer_port, email); + task = clone_task_new (repo_id, repo_name, + token, worktree, + passwd, email); task->manager = mgr; task->enc_version = enc_version; task->random_key = g_strdup (random_key); @@ -1117,7 +1091,6 @@ seaf_clone_manager_add_task (SeafCloneManager *mgr, const char *repo_id, int repo_version, - const char *peer_id, const char *repo_name, const char *token, const char *passwd, @@ -1125,8 +1098,6 @@ int enc_version, const char *random_key, const char *worktree_in, - const char *peer_addr, - const char *peer_port, const char *email, const char *more_info, GError **error) @@ -1231,10 +1202,9 @@ seaf_repo_manager_remove_repo_ondisk (seaf->repo_mgr, repo_id, FALSE); ret = add_task_common (mgr, repo_id, repo_version, - peer_id, repo_name, token, passwd, + repo_name, token, passwd, enc_version, random_key, - worktree, peer_addr, peer_port, - email, more_info, + worktree, email, more_info, sync_wt_name, error); @@ -1270,7 +1240,6 @@ seaf_clone_manager_add_download_task (SeafCloneManager *mgr, const char *repo_id, int repo_version, - const char *peer_id, const char *repo_name, const char *token, const char *passwd, @@ -1278,8 +1247,6 @@ int enc_version, const char *random_key, const char *wt_parent, - const char *peer_addr, - const char *peer_port, const char *email, const char *more_info, GError **error) @@ -1387,10 +1354,10 @@ seaf_repo_manager_remove_repo_ondisk (seaf->repo_mgr, repo_id, FALSE); ret = add_task_common (mgr, repo_id, repo_version, - peer_id, repo_name, token, passwd, + repo_name, token, passwd, enc_version, random_key, - worktree, peer_addr, peer_port, - email, more_info, TRUE, error); + worktree, email, more_info, + TRUE, error); out: g_free (worktree); @@ -1447,34 +1414,6 @@ return 0; } - -int -seaf_clone_manager_remove_task (SeafCloneManager *mgr, - const char *repo_id) -{ - CloneTask *task; - - if (!seaf->started) { - seaf_message ("System not started, skip removing clone task.\n"); - return -1; - } - - task = g_hash_table_lookup (mgr->tasks, repo_id); - if (!task) - return -1; - - if (task->state != CLONE_STATE_DONE && - task->state != CLONE_STATE_CANCELED) { - seaf_warning ("[Clone mgr] cannot remove running task.\n"); - return -1; - } - - /* On-disk task should have been removed. */ - - g_hash_table_remove (mgr->tasks, repo_id); - - return 0; -} CloneTask * seaf_clone_manager_get_task (SeafCloneManager *mgr, diff -Nru seafile-daemon-7.0.3/daemon/clone-mgr.h seafile-daemon-7.0.4/daemon/clone-mgr.h --- seafile-daemon-7.0.3/daemon/clone-mgr.h 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/daemon/clone-mgr.h 2019-11-20 08:47:16.000000000 +0000 @@ -89,7 +89,6 @@ seaf_clone_manager_add_task (SeafCloneManager *mgr, const char *repo_id, int repo_version, - const char *peer_id, const char *repo_name, const char *token, const char *passwd, @@ -97,8 +96,6 @@ int enc_version, const char *random_key, const char *worktree, - const char *peer_addr, - const char *peer_port, const char *email, const char *more_info, GError **error); @@ -112,7 +109,6 @@ seaf_clone_manager_add_download_task (SeafCloneManager *mgr, const char *repo_id, int repo_version, - const char *peer_id, const char *repo_name, const char *token, const char *passwd, @@ -120,8 +116,6 @@ int enc_version, const char *random_key, const char *wt_parent, - const char *peer_addr, - const char *peer_port, const char *email, const char *more_info, GError **error); @@ -130,10 +124,6 @@ seaf_clone_manager_cancel_task (SeafCloneManager *mgr, const char *repo_id); -int -seaf_clone_manager_remove_task (SeafCloneManager *mgr, - const char *repo_id); - CloneTask * seaf_clone_manager_get_task (SeafCloneManager *mgr, const char *repo_id); diff -Nru seafile-daemon-7.0.3/daemon/Makefile.am seafile-daemon-7.0.4/daemon/Makefile.am --- seafile-daemon-7.0.3/daemon/Makefile.am 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/daemon/Makefile.am 2019-11-20 08:47:16.000000000 +0000 @@ -2,6 +2,7 @@ AM_CFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" \ -DPACKAGE_DATA_DIR=\""$(pkgdatadir)"\" \ -DSEAFILE_CLIENT \ + -D__USE_MINGW_ANSI_STDIO=1 \ -I$(top_srcdir)/include \ -I$(top_srcdir)/lib \ -I$(top_builddir)/lib \ @@ -77,7 +78,7 @@ seaf_daemon_LDADD = $(top_builddir)/lib/libseafile_common.la \ @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @GNUTLS_LIBS@ @NETTLE_LIBS@ \ - @LIB_RT@ @LIB_UUID@ -lsqlite3 @LIBEVENT_LIBS@ \ + @LIB_RT@ @LIB_UUID@ -lsqlite3 @LIBEVENT_LIBS@ @LIBEVENT_PTHREADS_LIBS@\ $(top_builddir)/common/cdc/libcdc.la \ $(top_builddir)/common/index/libindex.la @LIB_WS32@ @LIB_CRYPT32@ \ @SEARPC_LIBS@ @JANSSON_LIBS@ @LIB_MAC@ @ZLIB_LIBS@ @CURL_LIBS@ @BPWRAPPER_LIBS@ diff -Nru seafile-daemon-7.0.3/daemon/repo-mgr.c seafile-daemon-7.0.4/daemon/repo-mgr.c --- seafile-daemon-7.0.3/daemon/repo-mgr.c 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/daemon/repo-mgr.c 2019-11-20 08:47:16.000000000 +0000 @@ -6682,18 +6682,6 @@ pthread_mutex_unlock (&manager->priv->db_lock); } -static char * -canonical_server_url (const char *url_in) -{ - char *url = g_strdup(url_in); - int len = strlen(url); - - if (url[len - 1] == '/') - url[len - 1] = 0; - - return url; -} - int seaf_repo_manager_set_repo_property (SeafRepoManager *manager, const char *repo_id, @@ -7005,38 +6993,35 @@ int seaf_repo_manager_update_repos_server_host (SeafRepoManager *mgr, - const char *old_host, - const char *new_host, + const char *old_server_url, const char *new_server_url) { GList *ptr, *repos = seaf_repo_manager_get_repo_list (seaf->repo_mgr, 0, -1); SeafRepo *r; - char *canon_server_url = canonical_server_url(new_server_url); + char *canon_old_server_url = canonical_server_url(old_server_url); + char *canon_new_server_url = canonical_server_url(new_server_url); for (ptr = repos; ptr; ptr = ptr->next) { r = ptr->data; - - char *relay_addr = NULL; - char *relay_port = NULL; - seaf_repo_manager_get_repo_relay_info (seaf->repo_mgr, r->id, - &relay_addr, &relay_port); - if (g_strcmp0(relay_addr, old_host) == 0) { - seaf_repo_manager_set_repo_relay_info (seaf->repo_mgr, r->id, - new_host, relay_port); - + + char *server_url = seaf_repo_manager_get_repo_property (seaf->repo_mgr, + r->id, + REPO_PROP_SERVER_URL); + + if (g_strcmp0(server_url, canon_old_server_url) == 0) { /* Update server property before server_url is changed. */ - update_server_properties (mgr, r->id, canon_server_url); + update_server_properties (mgr, r->id, canon_new_server_url); seaf_repo_manager_set_repo_property ( - seaf->repo_mgr, r->id, REPO_PROP_SERVER_URL, canon_server_url); + seaf->repo_mgr, r->id, REPO_PROP_SERVER_URL, canon_new_server_url); } + g_free (server_url); - g_free (relay_addr); - g_free (relay_port); } g_list_free (repos); - g_free (canon_server_url); + g_free (canon_old_server_url); + g_free (canon_new_server_url); return 0; } diff -Nru seafile-daemon-7.0.3/daemon/repo-mgr.h seafile-daemon-7.0.4/daemon/repo-mgr.h --- seafile-daemon-7.0.3/daemon/repo-mgr.h 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/daemon/repo-mgr.h 2019-11-20 08:47:16.000000000 +0000 @@ -281,8 +281,7 @@ int seaf_repo_manager_update_repos_server_host (SeafRepoManager *mgr, - const char *old_host, - const char *new_host, + const char *old_server_url, const char *new_server_url); #define SERVER_PROP_IS_PRO "is_pro" diff -Nru seafile-daemon-7.0.3/daemon/seaf-daemon.c seafile-daemon-7.0.4/daemon/seaf-daemon.c --- seafile-daemon-7.0.3/daemon/seaf-daemon.c 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/daemon/seaf-daemon.c 2019-11-20 08:47:16.000000000 +0000 @@ -17,6 +17,7 @@ #include #include #include +#include #ifdef HAVE_BREAKPAD_SUPPORT #include @@ -83,11 +84,6 @@ seafile_sync_error_id_to_str, "seafile_sync_error_id_to_str", searpc_signature_string__int()); - - searpc_server_register_function ("seafile-rpcserver", - seafile_get_session_info, - "seafile_get_session_info", - searpc_signature_object__void()); searpc_server_register_function ("seafile-rpcserver", seafile_get_config, @@ -161,7 +157,7 @@ searpc_server_register_function ("seafile-rpcserver", seafile_update_repos_server_host, "seafile_update_repos_server_host", - searpc_signature_int__string_string_string()); + searpc_signature_int__string_string()); searpc_server_register_function ("seafile-rpcserver", seafile_disable_auto_sync, @@ -191,21 +187,17 @@ searpc_server_register_function ("seafile-rpcserver", seafile_clone, "seafile_clone", - searpc_signature_string__string_int_string_string_string_string_string_string_string_string_string_string_int_string()); + searpc_signature_string__string_int_string_string_string_string_string_string_string_int_string()); searpc_server_register_function ("seafile-rpcserver", seafile_download, "seafile_download", - searpc_signature_string__string_int_string_string_string_string_string_string_string_string_string_string_int_string()); + searpc_signature_string__string_int_string_string_string_string_string_string_string_int_string()); searpc_server_register_function ("seafile-rpcserver", seafile_cancel_clone_task, "seafile_cancel_clone_task", searpc_signature_int__string()); searpc_server_register_function ("seafile-rpcserver", - seafile_remove_clone_task, - "seafile_remove_clone_task", - searpc_signature_int__string()); - searpc_server_register_function ("seafile-rpcserver", seafile_get_clone_tasks, "seafile_get_clone_tasks", searpc_signature_objlist__void()); @@ -475,6 +467,11 @@ g_thread_init(NULL); #endif +#ifndef WIN32 + /* init multithreading support for libevent.because struct event_base is not thread safe. */ + evthread_use_pthreads(); +#endif + if (!debug_str) debug_str = g_getenv("SEAFILE_DEBUG"); seafile_debug_set_flags_string (debug_str); diff -Nru seafile-daemon-7.0.3/daemon/vc-utils.c seafile-daemon-7.0.4/daemon/vc-utils.c --- seafile-daemon-7.0.3/daemon/vc-utils.c 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/daemon/vc-utils.c 2019-11-20 08:47:16.000000000 +0000 @@ -627,9 +627,10 @@ mask == 6 || /* both added */ mask == 3) /* others removed */ { - if (do_check_file_locked (ce->name, worktree, FALSE)) + if (do_check_file_locked (ce->name, worktree, FALSE)) { ret = TRUE; break; + } } } else if (ce->ce_flags & CE_UPDATE || ce->ce_flags & CE_WT_REMOVE) { diff -Nru seafile-daemon-7.0.3/debian/changelog seafile-daemon-7.0.4/debian/changelog --- seafile-daemon-7.0.3/debian/changelog 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/debian/changelog 2019-11-20 08:47:16.000000000 +0000 @@ -1,9 +1,14 @@ -seafile-daemon (7.0.3-2~1346201910300636~ubuntu14.04.1) trusty; urgency=low +seafile-daemon (7.0.4-2~1354201911200847~ubuntu14.04.1) trusty; urgency=low * Auto build. - -- Seafile Ltd Wed, 30 Oct 2019 06:36:51 +0000 + -- Seafile Ltd Wed, 20 Nov 2019 08:47:16 +0000 +seafile-daemon (7.0.4) unstable; urgency=low + + * new upstream release + + -- Jonathan Xu Tue, 19 Nov 2019 12:02:10 +0800 seafile-daemon (7.0.3) unstable; urgency=low * new upstream release diff -Nru seafile-daemon-7.0.3/debian/git-build-recipe.manifest seafile-daemon-7.0.4/debian/git-build-recipe.manifest --- seafile-daemon-7.0.3/debian/git-build-recipe.manifest 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/debian/git-build-recipe.manifest 2019-11-20 08:47:16.000000000 +0000 @@ -1,2 +1,2 @@ -# git-build-recipe format 0.4 deb-version {debupstream}-2~1346201910300636 -lp:seafile git-commit:4cdbc5b7b3d58e53159b026c91ff1f2b2e8c382b +# git-build-recipe format 0.4 deb-version {debupstream}-2~1354201911200847 +lp:seafile git-commit:2412bc04b11ce71c498420b9c23065c3a13efba6 diff -Nru seafile-daemon-7.0.3/include/seafile-rpc.h seafile-daemon-7.0.4/include/seafile-rpc.h --- seafile-daemon-7.0.3/include/seafile-rpc.h 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/include/seafile-rpc.h 2019-11-20 08:47:16.000000000 +0000 @@ -6,14 +6,6 @@ #include "seafile-object.h" /** - * seafile_get_session_info: - * - * Returns: a SeafileSessionInfo object. - */ -GObject * -seafile_get_session_info (GError **error); - -/** * seafile_get_repo_list: * * Returns repository list. @@ -58,10 +50,10 @@ int seafile_destroy_repo (const gchar *repo_id, GError **error); int -seafile_unsync_repos_by_account (const char *server_addr, const char *email, GError **error); +seafile_unsync_repos_by_account (const char *server_url, const char *email, GError **error); int -seafile_remove_repo_tokens_by_account (const char *server_addr, const char *email, GError **error); +seafile_remove_repo_tokens_by_account (const char *server_url, const char *email, GError **error); int seafile_set_repo_token (const char *repo_id, const char *token, GError **error); @@ -73,9 +65,6 @@ seafile_get_upload_rate(GError **error); int -seafile_repo_last_modify(const char *repo_id, GError **error); - -int seafile_set_repo_property (const char *repo_id, const char *key, const char *value, @@ -87,8 +76,7 @@ GError **error); int -seafile_update_repos_server_host (const char *old_host, - const char *new_host, +seafile_update_repos_server_host (const char *old_server_url, const char *new_server_url, GError **error); @@ -137,14 +125,11 @@ char * seafile_clone (const char *repo_id, int repo_version, - const char *peer_id, const char *repo_name, const char *worktree, const char *token, const char *passwd, const char *magic, - const char *peer_addr, - const char *peer_port, const char *email, const char *random_key, int enc_version, @@ -154,14 +139,11 @@ char * seafile_download (const char *repo_id, int repo_version, - const char *peer_id, const char *repo_name, const char *wt_parent, const char *token, const char *passwd, const char *magic, - const char *peer_addr, - const char *peer_port, const char *email, const char *random_key, int enc_version, @@ -171,9 +153,6 @@ int seafile_cancel_clone_task (const char *repo_id, GError **error); -int -seafile_remove_clone_task (const char *repo_id, GError **error); - /** * seafile_get_clone_tasks: * diff -Nru seafile-daemon-7.0.3/lib/rpc_table.py seafile-daemon-7.0.4/lib/rpc_table.py --- seafile-daemon-7.0.3/lib/rpc_table.py 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/lib/rpc_table.py 2019-11-20 08:47:16.000000000 +0000 @@ -60,7 +60,7 @@ [ "string", ["string", "string", "string", "string", "string", "string", "string"] ], [ "string", ["string", "string", "string", "string", "string", "string", "string", "int64"] ], [ "string", ["string", "string", "string", "string", "string", "string", "string", "string", "string"] ], - [ "string", ["string", "int", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "int", "string"] ], + [ "string", ["string", "int", "string", "string", "string", "string", "string", "string", "string", "int", "string"] ], [ "string", ["string", "int", "string", "int", "int"] ], [ "string", ["string", "int", "string", "string", "string"] ], [ "objlist", [] ], @@ -83,7 +83,6 @@ [ "objlist", ["string", "int", "string", "int", "int"] ], [ "objlist", ["string", "int", "string", "string", "int"] ], [ "objlist", ["string", "string", "string", "string", "int", "int"] ], - [ "object", [] ], [ "object", ["int"] ], [ "object", ["string"] ], [ "object", ["string", "string"] ], diff -Nru seafile-daemon-7.0.3/lib/searpc-marshal.h seafile-daemon-7.0.4/lib/searpc-marshal.h --- seafile-daemon-7.0.3/lib/searpc-marshal.h 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/lib/searpc-marshal.h 2019-11-20 08:47:16.000000000 +0000 @@ -931,7 +931,7 @@ static char * -marshal_string__string_int_string_string_string_string_string_string_string_string_string_string_int_string (void *func, json_t *param_array, gsize *ret_len) +marshal_string__string_int_string_string_string_string_string_string_string_int_string (void *func, json_t *param_array, gsize *ret_len) { GError *error = NULL; const char* param1 = json_array_get_string_or_null_element (param_array, 1); @@ -943,13 +943,10 @@ const char* param7 = json_array_get_string_or_null_element (param_array, 7); const char* param8 = json_array_get_string_or_null_element (param_array, 8); const char* param9 = json_array_get_string_or_null_element (param_array, 9); - const char* param10 = json_array_get_string_or_null_element (param_array, 10); + int param10 = json_array_get_int_element (param_array, 10); const char* param11 = json_array_get_string_or_null_element (param_array, 11); - const char* param12 = json_array_get_string_or_null_element (param_array, 12); - int param13 = json_array_get_int_element (param_array, 13); - const char* param14 = json_array_get_string_or_null_element (param_array, 14); - char* ret = ((char* (*)(const char*, int, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, const char*, int, const char*, GError **))func) (param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, &error); + char* ret = ((char* (*)(const char*, int, const char*, const char*, const char*, const char*, const char*, const char*, const char*, int, const char*, GError **))func) (param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, &error); json_t *object = json_object (); searpc_set_string_to_ret_object (object, ret); @@ -1318,19 +1315,6 @@ static char * -marshal_object__void (void *func, json_t *param_array, gsize *ret_len) -{ - GError *error = NULL; - - GObject* ret = ((GObject* (*)(GError **))func) (&error); - - json_t *object = json_object (); - searpc_set_object_to_ret_object (object, ret); - return searpc_marshal_set_ret_common (object, ret_len, error); -} - - -static char * marshal_object__int (void *func, json_t *param_array, gsize *ret_len) { GError *error = NULL; @@ -1762,7 +1746,7 @@ { - searpc_server_register_marshal (searpc_signature_string__string_int_string_string_string_string_string_string_string_string_string_string_int_string(), marshal_string__string_int_string_string_string_string_string_string_string_string_string_string_int_string); + searpc_server_register_marshal (searpc_signature_string__string_int_string_string_string_string_string_string_string_int_string(), marshal_string__string_int_string_string_string_string_string_string_string_int_string); } @@ -1876,11 +1860,6 @@ } - { - searpc_server_register_marshal (searpc_signature_object__void(), marshal_object__void); - } - - { searpc_server_register_marshal (searpc_signature_object__int(), marshal_object__int); } diff -Nru seafile-daemon-7.0.3/lib/searpc-signature.h seafile-daemon-7.0.4/lib/searpc-signature.h --- seafile-daemon-7.0.3/lib/searpc-signature.h 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/lib/searpc-signature.h 2019-11-20 08:47:16.000000000 +0000 @@ -392,9 +392,9 @@ inline static gchar * -searpc_signature_string__string_int_string_string_string_string_string_string_string_string_string_string_int_string() +searpc_signature_string__string_int_string_string_string_string_string_string_string_int_string() { - return searpc_compute_signature ("string", 14, "string", "int", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "int", "string"); + return searpc_compute_signature ("string", 11, "string", "int", "string", "string", "string", "string", "string", "string", "string", "int", "string"); } @@ -552,13 +552,6 @@ } -inline static gchar * -searpc_signature_object__void() -{ - return searpc_compute_signature ("object", 0); -} - - inline static gchar * searpc_signature_object__int() { diff -Nru seafile-daemon-7.0.3/lib/task.vala seafile-daemon-7.0.4/lib/task.vala --- seafile-daemon-7.0.3/lib/task.vala 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/lib/task.vala 2019-11-20 08:47:16.000000000 +0000 @@ -2,21 +2,10 @@ public class Task : Object { - public char _tx_id[37]; - public string tx_id { - get { return (string)_tx_id; } - set { Posix.memcpy(_tx_id, value, 36); _tx_id[36] = '\0'; } - } - public string ttype { get; set; } public string repo_id { get; set; } - public string dest_id { get; set; } - public string from_branch { get; set; } - - public string to_branch { get; set; } - public string state { get; set; } public string rt_state { get; set; } @@ -28,19 +17,6 @@ public int fs_objects_done { get; set; } public int rate { get; set; } - - public int64 _rsize; // the size remain - public int64 rsize{ - get { return _rsize; } - set { _rsize = value; } - } - - public int64 _dsize; // the size has done - public int64 dsize { - get { return _dsize; } - set { _dsize = value; } - } - } public class CloneTask : Object { diff -Nru seafile-daemon-7.0.3/lib/utils.c seafile-daemon-7.0.4/lib/utils.c --- seafile-daemon-7.0.3/lib/utils.c 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/lib/utils.c 2019-11-20 08:47:16.000000000 +0000 @@ -2466,3 +2466,15 @@ ext = &path[len-4]; return (strcasecmp (ext, ".eml") == 0); } + +char * +canonical_server_url (const char *url_in) +{ + char *url = g_strdup(url_in); + int len = strlen(url); + + if (url[len - 1] == '/') + url[len - 1] = 0; + + return url; +} diff -Nru seafile-daemon-7.0.3/lib/utils.h seafile-daemon-7.0.4/lib/utils.h --- seafile-daemon-7.0.3/lib/utils.h 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/lib/utils.h 2019-11-20 08:47:16.000000000 +0000 @@ -396,4 +396,6 @@ gboolean is_eml_file (const char *path); +char * +canonical_server_url (const char *url_in); #endif diff -Nru seafile-daemon-7.0.3/msi/Includes.wxi seafile-daemon-7.0.4/msi/Includes.wxi --- seafile-daemon-7.0.3/msi/Includes.wxi 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/msi/Includes.wxi 2019-11-20 08:47:16.000000000 +0000 @@ -1,6 +1,6 @@ - + @@ -135,7 +135,8 @@ - + + diff -Nru seafile-daemon-7.0.3/.pc/.quilt_patches seafile-daemon-7.0.4/.pc/.quilt_patches --- seafile-daemon-7.0.3/.pc/.quilt_patches 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/.pc/.quilt_patches 2019-11-20 08:47:16.000000000 +0000 @@ -1 +1 @@ -/home/buildd/build-RECIPEBRANCHBUILD-2431476/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches +/home/buildd/build-RECIPEBRANCHBUILD-2446056/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches diff -Nru seafile-daemon-7.0.3/.pc/.quilt_series seafile-daemon-7.0.4/.pc/.quilt_series --- seafile-daemon-7.0.3/.pc/.quilt_series 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/.pc/.quilt_series 2019-11-20 08:47:16.000000000 +0000 @@ -1 +1 @@ -/home/buildd/build-RECIPEBRANCHBUILD-2431476/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches/series +/home/buildd/build-RECIPEBRANCHBUILD-2446056/chroot-autobuild/home/buildd/work/tree/recipe/debian/patches/series diff -Nru seafile-daemon-7.0.3/python/seafile/rpcclient.py seafile-daemon-7.0.4/python/seafile/rpcclient.py --- seafile-daemon-7.0.3/python/seafile/rpcclient.py 2019-10-30 06:36:51.000000000 +0000 +++ seafile-daemon-7.0.4/python/seafile/rpcclient.py 2019-11-20 08:47:16.000000000 +0000 @@ -18,11 +18,6 @@ pass sync_error_id_to_str = seafile_sync_error_id_to_str - @searpc_func("object", []) - def seafile_get_session_info(): - pass - get_session_info = seafile_get_session_info - @searpc_func("int", ["string"]) def seafile_calc_dir_size(path): pass @@ -114,13 +109,13 @@ def gen_default_worktree(worktree_parent, repo_name): pass - @searpc_func("string", ["string", "int", "string", "string", "string", "string", "string", "string", "string", "string", "string", "int", "string"]) - def seafile_clone(repo_id, repo_version, peer_id, repo_name, worktree, token, password, magic, peer_addr, peer_port, email, random_key, enc_version, more_info): + @searpc_func("string", ["string", "int", "string", "string", "string", "string", "string", "string", "int", "string"]) + def seafile_clone(repo_id, repo_version, repo_name, worktree, token, password, magic, email, random_key, enc_version, more_info): pass clone = seafile_clone - @searpc_func("string", ["string", "int", "string", "string", "string", "string", "string", "string", "string", "string", "string", "int", "string"]) - def seafile_download(repo_id, repo_version, peer_id, repo_name, wt_parent, token, password, magic, peer_addr, peer_port, email, random_key, enc_version, more_info): + @searpc_func("string", ["string", "int", "string", "string", "string", "string", "string", "string", "int", "string"]) + def seafile_download(repo_id, repo_version, repo_name, wt_parent, token, password, magic, email, random_key, enc_version, more_info): pass download = seafile_download @@ -129,11 +124,6 @@ pass cancel_clone_task = seafile_cancel_clone_task - @searpc_func("int", ["string"]) - def seafile_remove_clone_task(repo_id): - pass - remove_clone_task = seafile_remove_clone_task - @searpc_func("objlist", []) def seafile_get_clone_tasks(): pass