int si_recover(si *i) { sr *r = i->r; int exist = ss_vfsexists(r->vfs, i->scheme->path); if (exist == 0) goto deploy; if (i->scheme->path_fail_on_exists) { sr_error(r->e, "directory '%s' already exists", i->scheme->path); return -1; } int rc = si_recoverdrop(i, r); switch (rc) { case -1: return -1; case 1: goto deploy; } rc = si_schemerecover(i->scheme, r); if (ssunlikely(rc == -1)) return -1; r->scheme = &i->scheme->scheme; r->fmt = i->scheme->fmt; r->fmt_storage = i->scheme->fmt_storage; sdsnapshot snapshot; sd_snapshot_init(&snapshot); rc = si_recoversnapshot(i, r, &snapshot); if (ssunlikely(rc == -1)) { sd_snapshot_free(&snapshot, r); return -1; } rc = si_recoverindex(i, r, &snapshot); sd_snapshot_free(&snapshot, r); if (sslikely(rc <= 0)) return rc; deploy: return si_deploy(i, r, !exist); }
int si_recover(si *i, sr *r) { int exist = sr_fileexists(i->conf->path); if (exist == 0) return si_deploy(i, r); if (i->conf->path_fail_on_exists) { sr_error(r->e, "directory '%s' exists.", i->conf->path); return -1; } return si_recoverindex(i, r); }