diff --git a/src/laminar.cpp b/src/laminar.cpp index 825cfda..ca1d858 100644 --- a/src/laminar.cpp +++ b/src/laminar.cpp @@ -203,18 +203,21 @@ std::list Laminar::listKnownJobs() { return res; } -void Laminar::populateArtifacts(Json &j, std::string job, uint num) const { +void Laminar::populateArtifacts(Json &j, std::string job, uint num, kj::Path subdir) const { kj::Path runArchive{job,std::to_string(num)}; + runArchive = runArchive.append(subdir); KJ_IF_MAYBE(dir, fsHome->tryOpenSubdir("archive"/runArchive)) { for(kj::StringPtr file : (*dir)->listNames()) { kj::FsNode::Metadata meta = (*dir)->lstat(kj::Path{file}); - if(meta.type != kj::FsNode::Type::FILE) - continue; - j.StartObject(); - j.set("url", archiveUrl + (runArchive/file).toString().cStr()); - j.set("filename", file.cStr()); - j.set("size", meta.size); - j.EndObject(); + if(meta.type == kj::FsNode::Type::FILE) { + j.StartObject(); + j.set("url", archiveUrl + (runArchive/file).toString().cStr()); + j.set("filename", (subdir/file).toString().cStr()); + j.set("size", meta.size); + j.EndObject(); + } else if(meta.type == kj::FsNode::Type::DIRECTORY) { + populateArtifacts(j, job, num, subdir/file); + } } } } diff --git a/src/laminar.h b/src/laminar.h index 4c8e00f..96bbd3c 100644 --- a/src/laminar.h +++ b/src/laminar.h @@ -104,7 +104,7 @@ private: bool tryStartRun(std::shared_ptr run, int queueIndex); void handleRunFinished(Run*); // expects that Json has started an array - void populateArtifacts(Json& out, std::string job, uint num) const; + void populateArtifacts(Json& out, std::string job, uint num, kj::Path subdir = kj::Path::parse(".")) const; Run* activeRun(const std::string name, uint num) { auto it = activeJobs.byNameNumber().find(boost::make_tuple(name, num));