X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=src%2Fadd.c;h=7e63b53aea142ccc1cc87810e582d889626ae0b4;hb=e7927f56ff53a93f2e8073d65845eb0e2a6e8258;hp=86b289d9748d836aff391c7ef4f32f6f3d20bb4c;hpb=5dd3c3e64a9574112dda77a5afc167f5daa53fd8;p=zpackage diff --git a/src/add.c b/src/add.c index 86b289d..7e63b53 100644 --- a/src/add.c +++ b/src/add.c @@ -21,7 +21,7 @@ struct opts { int complete, addcontent, isconfig, opt_l, recursive, verbose; int followsymlinks; int xargs, noclear; - int striparg; + int striparg, init; mode_t clmode; char *cltype, *clhash, *clmtime, *prefix, *strip, *cltarget; @@ -381,8 +381,11 @@ int main(int ac, char **av) { struct opts opt = { 0 }; int i; int option; + char *pkgstr = 0, *pkgid = 0; - char hash[ZPM_HASH_STRLEN+1]; + char package[128]; + char version[64]; + int release; char *dbfile = getenv("ZPMDB"); @@ -392,8 +395,10 @@ int main(int ac, char **av) { opt.addcontent = 1; - while ((option = getopt(ac, av, "CF:H:M:NP:S:T:cf:g:hlm:ru:vxz")) != -1) { + while ((option = getopt(ac, av, "iCF:H:M:NP:S:T:cf:g:hlm:ru:vxzp:")) != -1) { switch (option) { + case 'f': dbfile = optarg; break; + case 'i': opt.init = 1; break; case 'C': opt.complete = 1; break; case 'F': opt.cltype = optarg; break; case 'H': opt.clhash = optarg; break; @@ -404,7 +409,6 @@ int main(int ac, char **av) { case 's': opt.striparg = 1; break; case 'T': opt.cltarget = optarg; break; case 'c': opt.isconfig = 1; break; - case 'f': dbfile = optarg; break; case 'g': opt.clgroup = optarg; break; case 'h': opt.followsymlinks = 1; break; case 'l': opt.opt_l = 1; break; @@ -414,6 +418,7 @@ int main(int ac, char **av) { case 'v': opt.verbose++; break; case 'x': opt.xargs = 1; dieval = 255; break; case 'z': opt.noclear = 1; break; + case 'p': pkgstr = optarg; break; default: exit(EXIT_FAILURE); break; @@ -424,10 +429,20 @@ int main(int ac, char **av) { exit(EXIT_FAILURE); } - if (!zpm_open(&zpm, dbfile)) { - die("can't open zpm db %s", dbfile); + if (opt.init) { + if (!zpm_init(&zpm, dbfile)) { + die("can't open zpm db %s", dbfile); + } + if (opt.verbose) { + fprintf(stderr, "inited %s\n", dbfile); + } + } else { + if (!zpm_open(&zpm, dbfile)) { + die("can't open zpm db %s", dbfile); + } } + #if 0 i = sqlite3_config(SQLITE_CONFIG_MMAP_SIZE,98222080); if (i != SQLITE_OK) { @@ -435,19 +450,28 @@ int main(int ac, char **av) { } #endif - /* package is first arg */ - char *pkgstr; - char *pkgid; - pkgstr = av[optind++]; + if (!pkgstr) { + pkgstr = dbfile; + } pkgid = zpm_findpkg(&zpm, pkgstr, NULL); if (!pkgid) { - die("package %s not found\n", pkgstr); + int rv; + if (opt.init) { + rv = zpm_parse_package(pkgstr, package, version, &release); + if (rv != 3) { + die("incomplete package string '%s'\n", pkgstr); + } else { + rv = zpm_create_package(&zpm, package, version, release); + pkgid = zpm_findpkg(&zpm, pkgstr, NULL); + if (!rv) { + die("unable to create package %s\n", pkgstr); + } + } + } else { + die("package %s not found\n", pkgstr); + } } - char package[128]; - char version[64]; - int release; - zpm_parse_package(pkgid, package, version, &release); opt.package = package; opt.version = version; @@ -479,8 +503,7 @@ int main(int ac, char **av) { if (opt.complete) { zpm_db_run(&zpm, "update packages set build_time = %d where package = %Q and version = %Q and release = %d", time(NULL), package, version, release); - zpm_package_hash(&zpm, pkgid, hash); - zpm_package_sethash(&zpm, pkgid, hash); + zpm_package_sethash(&zpm, pkgid, 0); } else if (!opt.noclear) { zpm_db_run(&zpm, "update packages set build_time = null, hash = null where package = %Q and version = %Q and release = %d", package, version, release); } @@ -488,5 +511,5 @@ int main(int ac, char **av) { //zpm_commit(&zpm); zpm_close(&zpm); - return 0; + return zpm.error; }