Display in which revision this revision is an input

This commit is contained in:
clerie 2025-02-01 20:43:17 +01:00
parent aa2ac96288
commit 185e0964b7
4 changed files with 33 additions and 0 deletions

View File

@ -136,5 +136,6 @@ async fn route_revision(
Ok(render_template(&RevisionTemplate {
revision_uri: revision_uri.clone(),
inputs: state.storage.inputs_for_revision(&revision_uri).await?,
input_of: state.storage.input_of_for_revision(&revision_uri).await?,
})?)
}

View File

@ -86,6 +86,25 @@ impl Storage {
.await
.context("Failed to fetch data from database")
}
pub async fn input_of_for_revision(&self, revision_uri: &str) -> Result<Vec<InputModel>> {
sqlx::query_as("
SELECT
flake_revision_uri,
input_name,
revision_uri,
uri,
nar_hash,
last_modified
FROM flake_revisions_inputs
WHERE revision_uri = ?
ORDER BY input_name
")
.bind(&revision_uri)
.fetch_all(&self.db)
.await
.context("Failed to fetch data from database")
}
}
#[derive(FromRow)]
@ -132,6 +151,10 @@ pub struct InputModel {
}
impl InputModel {
pub fn flake_revision_link(&self) -> String {
format!("/r/{}", urlencode(&self.flake_revision_uri))
}
pub fn revision_link(&self) -> String {
match &self.revision_uri {
Some(revision_uri) => format!("/r/{}", urlencode(&revision_uri)),

View File

@ -32,4 +32,5 @@ pub struct FlakeTemplate {
pub struct RevisionTemplate {
pub revision_uri: String,
pub inputs: Vec<InputModel>,
pub input_of: Vec<InputModel>,
}

View File

@ -29,5 +29,13 @@
</li>
{% endfor %}
</ul>
<h2>Input of</h2>
<ul>
{% for input in input_of %}
<li><a href="{{ input.flake_revision_link() }}">{{ input.flake_revision_uri }}</a></li>
{% endfor %}
</ul>
{% endblock %}