|
|
@@ -3,23 +3,60 @@
|
|
|
#include <stdlib.h>
|
|
|
#include <stdio.h>
|
|
|
#include <string.h>
|
|
|
+#include <sqlite3.h>
|
|
|
#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 <dir>\n"
|
|
|
+ if (argc != 4)
|
|
|
+ errx(1, "Usage: create_dep_tar <dir> <targetdir> <db>\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;
|
|
|
}
|