X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=lib%2Fscript_hash.c;h=ebca5508d4c65f80fc335c1d20b51ee8fa89173e;hb=30aa9bfe1e9a0e682f7c942b8e68054551f14857;hp=c559e877dfbcaa3d72e3a6d0bedc9b983551764a;hpb=dfd3c5a3be3e1857b7f85bb01aa7b09b4f721380;p=zpackage diff --git a/lib/script_hash.c b/lib/script_hash.c index c559e87..ebca550 100644 --- a/lib/script_hash.c +++ b/lib/script_hash.c @@ -1,3 +1,5 @@ +#define _POSIX_C_SOURCE 200809L + #include #include #include @@ -5,17 +7,43 @@ #include "sqlite3.h" #include "zpm.h" +int zpm_script_set(struct zpm *zpm, char *pkgstr, char *phase, char *hash) { + char package[64]; + char version[32]; + int release; + char *insert = "insert into scripts (package,version,release,stage,hash) values (%Q,%Q,%d,%Q,%Q) on conflict (package,version,release,stage) do update set hash = excluded.hash "; + char *delete = "delete from scripts where package = ? and version = ? and release = ? and stage = ?"; + + if (!zpm || !zpm->db || !phase) { + return 0; + } + + if (zpm_parse_package(pkgstr, package, version, &release)) { + if (hash) { + zpm_db_run(zpm, insert, package, version, release, phase, hash); + } else { + zpm_db_run(zpm, delete, package, version, release, phase); + + } + } + + return !zpm->error; +} + int zpm_script_hash(struct zpm *zpm, char *pkgstr, char *phase, char *hash) { char *pkgid = 0; - char *template = "select hash from scripts_pkgid where pkgid = %Q and phase = %Q"; + char *template = "select hash from scripts_pkgid where pkgid = %Q and stage = %Q"; sqlite3_stmt *st; - pkgid = zpm_findpkg(zpm, pkgstr); + pkgid = zpm_findpkg(zpm, pkgstr, NULL); st = zpm_dbquery(zpm, template, pkgid, phase); + free(pkgid); if (!st) { + zpm->error = 1; + zpm->errmsg = strdup(sqlite3_errmsg(zpm->db)); return 0; } @@ -26,6 +54,7 @@ int zpm_script_hash(struct zpm *zpm, char *pkgstr, char *phase, char *hash) { hash[ZPM_HASH_STRLEN] = 0; break; default: zpm->error = 1; /* fall through */ + zpm->errmsg = strdup(sqlite3_errmsg(zpm->db)); case SQLITE_DONE: sqlite3_finalize(st); return 0; break; /* not found */