static char * add_task_common (SeafCloneManager *mgr, SeafRepo *repo, const char *repo_id, const char *peer_id, const char *repo_name, const char *token, const char *passwd, const char *worktree, const char *peer_addr, const char *peer_port, const char *email, GError **error) { CloneTask *task; task = clone_task_new (repo_id, peer_id, repo_name, token, worktree, passwd, peer_addr, peer_port, email); task->manager = mgr; if (save_task_to_db (mgr, task) < 0) { seaf_warning ("[Clone mgr] failed to save task.\n"); clone_task_free (task); return NULL; } if (repo != NULL && repo->head == NULL) { /* Repo was downloaded but not checked out. * This can happen when the last checkout failed, the user * can then clone the repo again. */ start_checkout (repo, task); } else if (!ccnet_peer_is_ready(seaf->ccnetrpc_client, task->peer_id)) { /* the relay is not connected yet */ start_connect_task_relay (task, error); } else { start_index_or_transfer (mgr, task, error); } /* The old task for this repo will be freed. */ g_hash_table_insert (mgr->tasks, g_strdup(task->repo_id), task); return g_strdup(repo_id); }
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, GError **error) { CloneTask *task; task = clone_task_new (repo_id, peer_id, repo_name, token, worktree, passwd, peer_addr, peer_port, email); task->manager = mgr; task->enc_version = enc_version; task->random_key = g_strdup (random_key); task->repo_version = repo_version; task->sync_wt_name = sync_wt_name; if (more_info) { json_error_t jerror; json_t *object = NULL; object = json_loads (more_info, 0, &jerror); if (!object) { seaf_warning ("Failed to load more sync info from json: %s.\n", jerror.text); clone_task_free (task); return NULL; } json_t *integer = json_object_get (object, "is_readonly"); task->is_readonly = json_integer_value (integer); json_t *string = json_object_get (object, "server_url"); if (string) task->server_url = canonical_server_url (json_string_value (string)); json_decref (object); } if (save_task_to_db (mgr, task) < 0) { seaf_warning ("[Clone mgr] failed to save task.\n"); clone_task_free (task); return NULL; } if (task->repo_version > 0) { if (task->server_url) { check_http_protocol (task); } else { clone_task_free (task); return NULL; } } /* The old task for this repo will be freed. */ g_hash_table_insert (mgr->tasks, g_strdup(task->repo_id), task); return g_strdup(repo_id); }