aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsinanmohd <sinan@sinanmohd.com>2024-08-29 17:11:35 +0530
committersinanmohd <sinan@sinanmohd.com>2024-08-29 17:12:24 +0530
commit2f28cd127018979b389ca23e41665a2bf1608b1c (patch)
treef1e64b363a61ec9625fd65a788a2680c0a392211 /src
parent3b4bcede398591bc2fdb9836e5e21a7f1913191d (diff)
jobs/job_read_cache: acquire transitive dependencies
Diffstat (limited to 'src')
-rw-r--r--src/jobs.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/jobs.c b/src/jobs.c
index 8410522..ee9c77f 100644
--- a/src/jobs.c
+++ b/src/jobs.c
@@ -399,7 +399,7 @@ static int job_read_cache(struct job *job)
{
size_t argindex, n;
FILE *nix_build_stream;
- char *args[4];
+ char *args[4], *trimmed;
int ret, nlines;
struct job *j;
@@ -409,6 +409,7 @@ static int job_read_cache(struct job *job)
args[argindex++] = "--dry-run";
args[argindex++] = job->drv_path;
args[argindex++] = NULL;
+ struct job *dep_job = NULL;
ret = vpopen(&nix_build_stream, "nix-build", args, VPOPEN_STDERR);
if (ret < 0)
@@ -425,10 +426,18 @@ static int job_read_cache(struct job *job)
continue;
}
- j = job_search(job, trim(line));
+ trimmed = trim(line);
+ j = job_search(job, trimmed);
if (j == NULL) {
- /* nix-eval-jobs doesn't count src */
- continue;
+ ret = job_new(&dep_job, NULL, trimmed, NULL, job);
+ if (ret < 0)
+ goto out_free_line;
+
+ ret = job_deps_list_insert(job, dep_job);
+ if (ret < 0)
+ goto out_free_line;
+
+ j = dep_job;
}
if (in_fetched_block)
@@ -460,6 +469,8 @@ static int job_read_cache(struct job *job)
out_free_line:
free(line);
fclose(nix_build_stream);
+ if (ret < 0)
+ job_free(dep_job);
return ret;
}