From 44b39a5b67098ccc49b9ffa7d266c6d251f2a1e2 Mon Sep 17 00:00:00 2001 From: Jordan Doyle Date: Sun, 04 May 2025 01:02:26 +0700 Subject: [PATCH] Show file tree on directory view --- templates/repo/tree.html | 76 ++++++++++++++++++++++++++++++++++++++++++++++------------------------------ src/database/schema/tree.rs | 2 +- src/methods/repo/tree.rs | 8 ++++++++ 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/templates/repo/tree.html b/templates/repo/tree.html index 4f69b3c..1dd3571 100644 --- a/templates/repo/tree.html +++ a/templates/repo/tree.html @@ -1,4 +1,5 @@ {% import "macros/breadcrumbs.html" as breadcrumbs %} +{% import "macros/sidebar_toggle.html" as sidebar_toggle %} {% extends "repo/base.html" %} {% block tree_nav_class %}active{% endblock %} @@ -8,40 +9,47 @@ {% endblock %} {% block content %} -
- - - - - - - +{% call sidebar_toggle::sidebar_toggle("Open file browser") %} +
+ -
- {% for (name, name_split, item) in items -%} - - - {% set local_name = name.get()[*name_split..] -%} - {% set local_name = local_name.strip_prefix('/').unwrap_or(local_name) -%} - {% match item.get().kind -%} - {%- when ArchivedTreeItemKind::Tree -%} - - {%- when ArchivedTreeItemKind::File -%} - - {%- when ArchivedTreeItemKind::Submodule with (submodule) -%} - - {%- endmatch %} - - {% endfor -%} - -
ModeName
-
{{ item.get().mode.to_native()|file_perms }}
-
-
{{ local_name }}
-
-
{{ local_name }}
-
-
🔗 {{ local_name }} @ {{ submodule.oid|hex }}
-
+
+ + + + + + + + + + {% for (name, name_split, item) in items -%} + + + {% set local_name = name.get()[*name_split..] -%} + {% set local_name = local_name.strip_prefix('/').unwrap_or(local_name) -%} + {% match item.get().kind -%} + {%- when ArchivedTreeItemKind::Tree -%} + + {%- when ArchivedTreeItemKind::File -%} + + {%- when ArchivedTreeItemKind::Submodule with (submodule) -%} + + {%- endmatch %} + + {% endfor -%} + +
ModeName
+
{{ item.get().mode.to_native()|file_perms }}
+
+
{{ local_name }}
+
+
{{ local_name }}
+
+
🔗 {{ local_name }} @ {{ submodule.oid|hex }}
+
+
{% endblock %} diff --git a/src/database/schema/tree.rs b/src/database/schema/tree.rs index 726c3d8..c25f6cd 100644 --- a/src/database/schema/tree.rs +++ a/src/database/schema/tree.rs @@ -42,7 +42,7 @@ .cf_handle(TREE_FAMILY) .context("tree column family missing")?; - let Some(data) = database.get_pinned_cf(cf, tree_oid.as_slice())? else { + let Some(data) = database.get_cf(cf, tree_oid.as_slice())? else { return Ok(None); }; diff --git a/src/methods/repo/tree.rs b/src/methods/repo/tree.rs index ac69c7b..ed1e44f 100644 --- a/src/methods/repo/tree.rs +++ a/src/methods/repo/tree.rs @@ -94,6 +94,7 @@ pub query: UriQuery, pub repo_path: PathBuf, pub branch: Option>, + pub full_tree: YokedSortedTree, } #[derive(Template)] @@ -212,12 +213,19 @@ } } LookupResult::Children(items) => { + let db = db_orig.clone(); + let full_tree = tokio::task::spawn_blocking(move || SortedTree::get(tree_id, &db)) + .await + .context("failed to join on tokio task")?? + .context("missing file tree")?; + ResponseEither::Left(ResponseEither::Left(into_response(TreeView { repo, items, branch: query.branch.clone(), query, repo_path: child_path.unwrap_or_default(), + full_tree, }))) } }) -- rgit 0.1.5