X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=src%2Fadd.c;h=1be34e81805c0393971fff05f5d4230a0c728d59;hb=86d735d52280359df4896d5c542ddfbe33d8df7b;hp=86b289d9748d836aff391c7ef4f32f6f3d20bb4c;hpb=5dd3c3e64a9574112dda77a5afc167f5daa53fd8;p=zpackage diff --git a/src/add.c b/src/add.c index 86b289d..1be34e8 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,6 +381,11 @@ int main(int ac, char **av) { struct opts opt = { 0 }; int i; int option; + char *pkgstr = 0, *pkgid = 0; + + char package[128]; + char version[64]; + int release; char hash[ZPM_HASH_STRLEN+1]; @@ -392,8 +397,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 +411,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 +420,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 +431,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 +452,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;