7 #include "ccan/grab_file/grab_file.h"
8 #include "ccan/str_talloc/str_talloc.h"
9 #include "ccan/talloc/talloc.h"
10 #include "tools/_infotojson/database.h"
12 #define TAR_CMD "tar cvvf "
14 /* get dependents of the module from db */
16 get_dependents(const char *dir, const char *db)
18 char *query, *module, **dependents;
23 module = strrchr(dir, '/');
26 /* getting dependents from db */
28 query = talloc_asprintf(NULL, "select module from search where depends LIKE \"%%%s%%\";", module);
29 q = db_query(handle, query);
35 /* getting query results and returning */
36 dependents = talloc_array(NULL, char *, q->num_rows + 1);
37 for (i = 0; i < q->num_rows; i++)
38 dependents[i] = talloc_asprintf(dependents, "ccan/%s", q->rows[i][0]);
39 dependents[q->num_rows] = NULL;
44 /* create tar ball of dependencies */
46 create_tar(char **deps, const char *dir, const char *targetdir)
49 char *cmd_args, *cmd, *module, *buffer;
51 /* getting module name*/
52 module = strrchr(dir, '/');
56 cmd_args = strjoin(NULL, deps, " ");
57 cmd = talloc_asprintf(NULL, TAR_CMD "%s/%s_with_deps.tar %s %s", targetdir, module, cmd_args, dir);
59 cmd = talloc_asprintf(NULL, TAR_CMD "%s/%s.tar %s", targetdir, module, dir);
63 err(1, "Executing '%s'", cmd);
65 buffer = grab_fd(NULL, fileno(p), NULL);
67 err(1, "Reading from '%s'", cmd);
71 int main(int argc, char *argv[])
73 char **deps, **dependents;
77 errx(1, "Usage: create_dep_tar <dir> <targetdir> <db>\n"
78 "Create tar of all the ccan dependencies");
80 /* creating tar of the module */
81 create_tar(NULL, argv[1], argv[2]);
82 printf("creating tar ball of \"%s\"\n", argv[1]);
84 /* creating tar of the module dependencies */
85 deps = get_deps(talloc_autofree_context(), argv[1], true);
87 create_tar(deps, argv[1], argv[2]);
90 /* creating/updating tar of the module dependents */
91 dependents = get_dependents(argv[1], argv[3]);
92 if (dependents != NULL)
93 for (i = 0; dependents[i]; i++) {
94 printf("creating tar ball of \"%s\"\n", dependents[i]);
95 deps = get_deps(NULL, dependents[i], true);
97 create_tar(deps, dependents[i], argv[2]);
101 talloc_free(dependents);