static char * make_worktree_for_download (SeafCloneManager *mgr, const char *wt_tmp, GError **error) { char *worktree; if (g_access (wt_tmp, F_OK) == 0) { worktree = try_worktree (wt_tmp); } else { worktree = g_strdup(wt_tmp); } if (!check_worktree_path (mgr, worktree, error)) { g_free (worktree); return NULL; } if (g_mkdir (worktree, 0777) < 0) { seaf_warning ("[clone mgr] Failed to create dir %s.\n", worktree); g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "Failed to create worktree"); g_free (worktree); return NULL; } return worktree; }
char * seaf_clone_manager_add_task (SeafCloneManager *mgr, const char *repo_id, const char *peer_id, const char *repo_name, const char *token, const char *passwd, const char *worktree_in, const char *peer_addr, const char *peer_port, const char *email, GError **error) { SeafRepo *repo; char *worktree; char *ret; g_assert (strlen(repo_id) == 36); repo = seaf_repo_manager_get_repo (seaf->repo_mgr, repo_id); if (repo != NULL && repo->head != NULL) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "Repo already exists"); return NULL; } if (is_duplicate_task (mgr, repo_id)) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "Task is already in progress"); return NULL; } if (!check_worktree_path (mgr, worktree_in, error)) return NULL; /* Return error if worktree_in conflicts with another repo or * is not a directory. */ worktree = make_worktree (mgr, worktree_in, FALSE, error); if (!worktree) { return NULL; } ret = add_task_common (mgr, repo, repo_id, peer_id, repo_name, token, passwd, worktree, peer_addr, peer_port, email, error); g_free (worktree); return ret; }
static char * make_worktree_for_download (SeafCloneManager *mgr, const char *wt_tmp, GError **error) { char *worktree; if (g_access (wt_tmp, F_OK) == 0) { worktree = try_worktree (wt_tmp); } else { worktree = g_strdup(wt_tmp); } if (!check_worktree_path (mgr, worktree, error)) { g_free (worktree); return NULL; } return worktree; }
char * seaf_clone_manager_add_task (SeafCloneManager *mgr, const char *repo_id, const char *peer_id, const char *repo_name, const char *token, const char *passwd, const char *magic, const char *worktree_in, const char *peer_addr, const char *peer_port, const char *email, GError **error) { SeafRepo *repo; char *worktree; char *ret; if (!seaf->started) { seaf_message ("System not started, skip adding clone task.\n"); return NULL; } g_assert (strlen(repo_id) == 36); repo = seaf_repo_manager_get_repo (seaf->repo_mgr, repo_id); if (repo != NULL && repo->head != NULL) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "Repo already exists"); return NULL; } if (is_duplicate_task (mgr, repo_id)) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "Task is already in progress"); return NULL; } /* If magic is not given, check password before checkout. */ if (passwd && magic && seaf_repo_verify_passwd(repo_id, passwd, magic) < 0) { g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL, "Incorrect password"); return NULL; } if (!check_worktree_path (mgr, worktree_in, error)) return NULL; /* Return error if worktree_in conflicts with another repo or * is not a directory. */ worktree = make_worktree (mgr, worktree_in, FALSE, error); if (!worktree) { return NULL; } ret = add_task_common (mgr, repo, repo_id, peer_id, repo_name, token, passwd, worktree, peer_addr, peer_port, email, error); g_free (worktree); return ret; }