int main(int argc, char **argv) { Pool *pool; Repo *repo; int with_attr = 0; #ifdef SUSE int add_auto = 0; #endif int c; pool = pool_create(); repo = repo_create(pool, "<mergesolv>"); while ((c = getopt(argc, argv, "ahX")) >= 0) { switch (c) { case 'h': usage(); break; case 'a': with_attr = 1; break; case 'X': #ifdef SUSE add_auto = 1; #endif break; default: usage(); exit(1); } } if (with_attr) pool_setloadcallback(pool, loadcallback, 0); for (; optind < argc; optind++) { FILE *fp; if ((fp = fopen(argv[optind], "r")) == NULL) { perror(argv[optind]); exit(1); } if (repo_add_solv(repo, fp, 0)) { fprintf(stderr, "repo %s: %s\n", argv[optind], pool_errstr(pool)); exit(1); } fclose(fp); } #ifdef SUSE if (add_auto) repo_add_autopattern(repo, 0); #endif tool_write(repo, stdout); pool_free(pool); return 0; }
int main(int argc, char **argv) { Pool *pool; Repo *repo; const char *basefile = 0; int with_attr = 0; int c; pool = pool_create(); repo = repo_create(pool, "<mergesolv>"); while ((c = getopt(argc, argv, "ahb:")) >= 0) { switch (c) { case 'h': usage(); break; case 'a': with_attr = 1; break; case 'b': basefile = optarg; break; default: exit(1); } } if (with_attr) pool_setloadcallback(pool, loadcallback, 0); for (; optind < argc; optind++) { FILE *fp; if ((fp = fopen(argv[optind], "r")) == NULL) { perror(argv[optind]); exit(1); } if (repo_add_solv(repo, fp, 0)) { fprintf(stderr, "repo %s: %s\n", argv[optind], pool_errstr(pool)); exit(1); } fclose(fp); } tool_write(repo, basefile, 0); pool_free(pool); return 0; }
PyObject *Repo_read(RepoObject *self, PyObject *args) { const char *filename; if (!PyArg_ParseTuple(args, "s", &filename)) { return NULL; } // XXX catch if file cannot be opened FILE *fp = fopen(filename, "rb"); repo_add_solv(self->_repo, fp, 0); fclose(fp); Py_RETURN_NONE; }
static int loadcallback (Pool *pool, Repodata *data, void *vdata) { FILE *fp; const char *location = repodata_lookup_str(data, SOLVID_META, REPOSITORY_LOCATION); int r; if (!location) return 0; fprintf(stderr, "Loading SOLV file %s\n", location); fp = fopen (location, "r"); if (!fp) { perror(location); return 0; } r = repo_add_solv(data->repo, fp, REPO_USE_LOADING|REPO_LOCALPOOL); fclose(fp); return r ? 0 : 1; }
int main(int argc, char **argv) { Pool *pool = pool_create(); Repo *repo, *ref = 0; Repodata *data; int c, percent = 0; int extrapool = 0; int nopacks = 0; const char *root = 0; const char *basefile = 0; const char *refname = 0; #ifdef ENABLE_SUSEREPO char *proddir = 0; #endif char *outfile = 0; /* * parse arguments */ while ((c = getopt(argc, argv, "Phnxb:r:p:o:")) >= 0) switch (c) { case 'h': usage(0); break; case 'r': root = optarg; break; case 'b': basefile = optarg; break; case 'n': nopacks = 1; break; case 'P': percent = 1; break; case 'p': #ifdef ENABLE_SUSEREPO proddir = optarg; #endif break; case 'x': extrapool = 1; break; case 'o': outfile = optarg; break; default: usage(1); } if (outfile && !freopen(outfile, "w", stdout)) { perror(outfile); exit(1); } /* * optional arg is old version of rpmdb solv file * should make this a real option instead */ if (optind < argc) refname = argv[optind]; if (refname && !nopacks) { FILE *fp; if ((fp = fopen(refname, "r")) == NULL) { perror(refname); } else { Pool *refpool = extrapool ? pool_create() : 0; ref = repo_create(refpool ? refpool : pool, "ref"); if (repo_add_solv(ref, fp, 0) != 0) { fprintf(stderr, "%s: %s\n", refname, pool_errstr(ref->pool)); if (ref->pool != pool) pool_free(ref->pool); else repo_free(ref, 1); ref = 0; } else repo_disable_paging(ref); fclose(fp); } } /* * create 'installed' repository * add products * add rpmdb * write .solv */ if (root && *root) pool_set_rootdir(pool, root); repo = repo_create(pool, "installed"); data = repo_add_repodata(repo, 0); if (!nopacks) { if (repo_add_rpmdb(repo, ref, REPO_USE_ROOTDIR | REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE | (percent ? RPMDB_REPORT_PROGRESS : 0))) { fprintf(stderr, "rpmdb2solv: %s\n", pool_errstr(pool)); exit(1); } } #ifdef ENABLE_SUSEREPO if (proddir && *proddir) { if (root && *root) { int rootlen = strlen(root); if (!strncmp(root, proddir, rootlen)) { proddir += rootlen; if (*proddir != '/' && proddir[-1] == '/') proddir--; } } if (repo_add_products(repo, proddir, REPO_USE_ROOTDIR | REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE)) { fprintf(stderr, "rpmdb2solv: %s\n", pool_errstr(pool)); exit(1); } } #endif repodata_internalize(data); if (ref) { if (ref->pool != pool) pool_free(ref->pool); else repo_free(ref, 1); ref = 0; } tool_write(repo, basefile, 0); pool_free(pool); exit(0); }
int main(int argc, char **argv) { const char *contentfile = 0; const char *attrname = 0; const char *descrdir = 0; const char *basefile = 0; const char *query = 0; const char *mergefile = 0; Id defvendor = 0; int flags = 0; #ifdef SUSE int add_auto = 0; #endif int c; Pool *pool; Repo *repo; while ((c = getopt(argc, argv, "hn:c:d:b:q:M:X")) >= 0) { switch (c) { case 'h': usage(0); break; case 'n': attrname = optarg; break; case 'c': contentfile = optarg; break; case 'd': descrdir = optarg; break; case 'b': basefile = optarg; break; case 'q': query = optarg; break; case 'M': mergefile = optarg; break; case 'X': #ifdef SUSE add_auto = 1; #endif break; default: usage(1); break; } } pool = pool_create(); repo = repo_create(pool, "<susetags>"); repo_add_repodata(repo, 0); if (contentfile) { FILE *fp = fopen(contentfile, "r"); if (!fp) { perror(contentfile); exit(1); } if (repo_add_content(repo, fp, REPO_REUSE_REPODATA)) { fprintf(stderr, "susetags2solv: %s: %s\n", contentfile, pool_errstr(pool)); exit(1); } defvendor = repo_lookup_id(repo, SOLVID_META, SUSETAGS_DEFAULTVENDOR); fclose(fp); } if (attrname) { /* ensure '.attr' suffix */ const char *dot = strrchr(attrname, '.'); if (!dot || strcmp(dot, ".attr")) { int len = strlen (attrname); char *newname = (char *)malloc(len + 6); /* alloc for <attrname>+'.attr'+'\0' */ strcpy (newname, attrname); strcpy (newname+len, ".attr"); attrname = newname; } } /* * descrdir path given, open files and read from there */ if (descrdir) { char *fnp; int ndirs, i; struct dirent **files; ndirs = scandir(descrdir, &files, 0, alphasort); if (ndirs < 0) { perror(descrdir); exit(1); } /* bring packages to front */ for (i = 0; i < ndirs; i++) { char *fn = files[i]->d_name; if (!strcmp(fn, "packages") || !strcmp(fn, "packages.gz")) break; } if (i == ndirs) { fprintf(stderr, "found no packages file\n"); exit(1); } if (i) { struct dirent *de = files[i]; memmove(files + 1, files, i * sizeof(de)); files[0] = de; } fnp = solv_malloc(strlen(descrdir) + 128); for (i = 0; i < ndirs; i++) { char *fn = files[i]->d_name; if (!strcmp(fn, "packages") || !strcmp(fn, "packages.gz")) { FILE *fp; sprintf(fnp, "%s/%s", descrdir, fn); fp = solv_xfopen(fnp, 0); if (!fp) { perror(fn); exit(1); } if (repo_add_susetags(repo, fp, defvendor, 0, flags | REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE)) { fprintf(stderr, "susetags2solv: %s: %s\n", fnp, pool_errstr(pool)); exit(1); } fclose(fp); } else if (!strcmp(fn, "packages.DU") || !strcmp(fn, "packages.DU.gz")) { FILE *fp; sprintf(fnp, "%s/%s", descrdir, fn); fp = solv_xfopen(fnp, 0); if (!fp) { perror(fn); exit(1); } if (repo_add_susetags(repo, fp, defvendor, 0, flags | SUSETAGS_EXTEND | REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE)) { fprintf(stderr, "susetags2solv: %s: %s\n", fnp, pool_errstr(pool)); exit(1); } fclose(fp); } else if (!strcmp(fn, "packages.FL") || !strcmp(fn, "packages.FL.gz")) { #if 0 sprintf(fnp, "%s/%s", descrdir, fn); FILE *fp = solv_xfopen(fnp, 0); if (!fp) { perror(fn); exit(1); } if (repo_add_susetags(repo, fp, defvendor, 0, flags | SUSETAGS_EXTEND | REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE)) { fprintf(stderr, "susetags2solv: %s: %s\n", fnp, pool_errstr(pool)); exit(1); } fclose(fp); #else /* ignore for now. reactivate when filters work */ continue; #endif } else if (!strncmp(fn, "packages.", 9)) { char lang[6]; char *p; FILE *fp; sprintf(fnp, "%s/%s", descrdir, fn); p = strrchr(fnp, '.'); if (p && !strcmp(p, ".gz")) { *p = 0; p = strrchr(fnp, '.'); } if (!p || !p[1] || strlen(p + 1) > 5) continue; strcpy(lang, p + 1); sprintf(fnp, "%s/%s", descrdir, fn); fp = solv_xfopen(fnp, 0); if (!fp) { perror(fn); exit(1); } if (repo_add_susetags(repo, fp, defvendor, lang, flags | SUSETAGS_EXTEND | REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE)) { fprintf(stderr, "susetags2solv: %s: %s\n", fnp, pool_errstr(pool)); exit(1); } fclose(fp); } } for (i = 0; i < ndirs; i++) free(files[i]); free(files); free(fnp); repo_internalize(repo); } else { /* read data from stdin */ if (repo_add_susetags(repo, stdin, defvendor, 0, REPO_REUSE_REPODATA | REPO_NO_INTERNALIZE)) { fprintf(stderr, "susetags2solv: %s\n", pool_errstr(pool)); exit(1); } } repo_internalize(repo); if (mergefile) { FILE *fp = fopen(mergefile, "r"); if (!fp) { perror(mergefile); exit(1); } if (repo_add_solv(repo, fp, 0)) { fprintf(stderr, "susetags2solv: %s\n", pool_errstr(pool)); exit(1); } fclose(fp); } #ifdef SUSE if (add_auto) repo_add_autopattern(repo, 0); #endif if (query) doquery(pool, repo, query); else tool_write(repo, basefile, attrname); pool_free(pool); exit(0); }