int seaf_fsck (GList *repo_id_list) { if (!repo_id_list) repo_id_list = seaf_repo_manager_get_repo_id_list (seaf->repo_mgr); GList *ptr; char *repo_id; SeafRepo *repo; for (ptr = repo_id_list; ptr; ptr = ptr->next) { repo_id = ptr->data; seaf_message ("Running fsck for repo %.8s.\n", repo_id); repo = seaf_repo_manager_get_repo (seaf->repo_mgr, repo_id); if (!repo) { if (recover_corrupted_repo_head (repo_id) < 0) { seaf_warning ("Failed to recover repo %.8s.\n\n", repo_id); } else seaf_message ("Fsck finished for repo %.8s.\n\n", repo_id); continue; } check_and_reset_consistent_state (repo); seaf_message ("Fsck finished for repo %.8s.\n\n", repo_id); seaf_repo_unref (repo); } return 0; }
int seaf_fsck (GList *repo_id_list, gboolean repair, gboolean esync) { if (!repo_id_list) repo_id_list = seaf_repo_manager_get_repo_id_list (seaf->repo_mgr); if (esync) { enable_sync_repos (repo_id_list); } else { repair_repos (repo_id_list, repair); } while (repo_id_list) { g_free (repo_id_list->data); repo_id_list = g_list_delete_link (repo_id_list, repo_id_list); } return 0; }