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 { Ok(render_template(&RevisionTemplate {
revision_uri: revision_uri.clone(), revision_uri: revision_uri.clone(),
inputs: state.storage.inputs_for_revision(&revision_uri).await?, 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 .await
.context("Failed to fetch data from database") .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)] #[derive(FromRow)]
@ -132,6 +151,10 @@ pub struct InputModel {
} }
impl InputModel { impl InputModel {
pub fn flake_revision_link(&self) -> String {
format!("/r/{}", urlencode(&self.flake_revision_uri))
}
pub fn revision_link(&self) -> String { pub fn revision_link(&self) -> String {
match &self.revision_uri { match &self.revision_uri {
Some(revision_uri) => format!("/r/{}", urlencode(&revision_uri)), Some(revision_uri) => format!("/r/{}", urlencode(&revision_uri)),

View File

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

View File

@ -29,5 +29,13 @@
</li> </li>
{% endfor %} {% endfor %}
</ul> </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 %} {% endblock %}