X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fcreate_dep_tar.c;h=09c331c6f7a09be8f3100bb9a177eb1aec5d3035;hp=8247e57ef11d8642706985b7582344a9dd694998;hb=01e2f60e779d108a6687d066cdb30222e2658641;hpb=f61027e32e0dd552b1b2c26d3c68c9eb1b6be61c diff --git a/tools/create_dep_tar.c b/tools/create_dep_tar.c index 8247e57e..09c331c6 100644 --- a/tools/create_dep_tar.c +++ b/tools/create_dep_tar.c @@ -3,23 +3,60 @@ #include #include #include +#include #include "ccan/string/string.h" #include "ccan/talloc/talloc.h" +#include "tools/_infotojson/database.h" #define TAR_CMD "tar cvvf " -static void create_tar(char **deps, const char *dir) +/* get dependents of the module from db */ +static char** +get_dependents(const char *dir, const char *db) { - FILE *p; - char *cmd_args, *cmd, *module, *buffer; + char *query, *module, **dependents; + sqlite3 *handle; + int i; + struct db_query *q; + + module = strrchr(dir, '/'); + module++; + + /* getting dependents from db */ + handle = db_open(db); + query = talloc_asprintf(NULL, "select module from search where depends LIKE \"%%%s%%\";", module); + q = db_query(handle, query); + db_close(handle); + + if (q->num_rows == 0) + return 0; + else { + /* getting query results and returning */ + dependents = talloc_array(NULL, char *, q->num_rows + 1); + for (i = 0; i < q->num_rows; i++) + dependents[i] = talloc_asprintf(dependents, "ccan/%s", q->rows[i][0]); + dependents[q->num_rows] = NULL; + return dependents; + } +} + +/* create tar ball of dependencies */ +static void +create_tar(char **deps, const char *dir, const char *targetdir) +{ + FILE *p; + char *cmd_args, *cmd, *module, *buffer; /* getting module name*/ module = strrchr(dir, '/'); module++; - cmd_args = strjoin(NULL, deps, " "); - cmd = talloc_asprintf(NULL, TAR_CMD "%s/%s_dep.tar %s", dir, module, cmd_args); - + if (deps != NULL) { + cmd_args = strjoin(NULL, deps, " "); + cmd = talloc_asprintf(NULL, TAR_CMD "%s/%s_dependencies.tar %s %s", targetdir, module, cmd_args, dir); + } else + cmd = talloc_asprintf(NULL, TAR_CMD "%s/%s.tar %s", targetdir, module, dir); + p = popen(cmd, "r"); if (!p) err(1, "Executing '%s'", cmd); @@ -32,14 +69,34 @@ static void create_tar(char **deps, const char *dir) int main(int argc, char *argv[]) { - char **deps; + char **deps, **dependents; + int i; - if (argc != 2) - errx(1, "Usage: create_dep_tar \n" + if (argc != 4) + errx(1, "Usage: create_dep_tar \n" "Create tar of all the ccan dependencies"); + /* creating tar of the module */ + create_tar(NULL, argv[1], argv[2]); + printf("creating tar ball of \"%s\"\n", argv[1]); + + /* creating tar of the module dependencies */ deps = get_deps(NULL, argv[1]); - if(deps != NULL) - create_tar(deps, argv[1]); + if (deps != NULL) + create_tar(deps, argv[1], argv[2]); + talloc_free(deps); + + /* creating/updating tar of the module dependents */ + dependents = get_dependents(argv[1], argv[3]); + if (dependents != NULL) + for (i = 0; dependents[i]; i++) { + printf("creating tar ball of \"%s\"\n", dependents[i]); + deps = get_deps(NULL, dependents[i]); + if (deps != NULL) + create_tar(deps, dependents[i], argv[2]); + talloc_free(deps); + } + + talloc_free(dependents); return 0; }