Radish alpha
h
rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5
Radicle Heartwood Protocol & Stack
Radicle
Git
httpd: Add support for submodules
Merged did:key:z6MkkfM3...sVz5 opened 2 years ago

Add submodule as a kind in the tree_handler

5 files changed +17 -7 7ddb1119 088549a3
modified Cargo.lock
@@ -2566,9 +2566,9 @@ checksum = "db20136bbc9ae63f3fec8e5a6c369f4902fac2244501b5dfc6d668e43475aaa4"

[[package]]
name = "radicle-surf"
-
version = "0.18.0"
+
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9403736ddf2be5e7de42928f94a5f68ef0785916171d009809d19b4202b58d83"
+
checksum = "fade014fab67a7bdb816e4cf821611af5f0bc55c6eb1018561027ba6ba3b6b28"
dependencies = [
 "anyhow",
 "base64 0.13.1",
@@ -2581,6 +2581,7 @@ dependencies = [
 "serde",
 "tar",
 "thiserror",
+
 "url",
]

[[package]]
@@ -3642,6 +3643,7 @@ dependencies = [
 "form_urlencoded",
 "idna",
 "percent-encoding",
+
 "serde",
]

[[package]]
modified radicle-cli/Cargo.toml
@@ -21,7 +21,7 @@ nonempty = { version = "0.9.0" }
# N.b. this is required to use macros, even though it's re-exported
# through radicle
radicle-git-ext = { version = "0.7.0", features = ["serde"] }
-
radicle-surf = { version = "0.18.0" }
+
radicle-surf = { version = "0.19.0" }
serde = { version = "1.0" }
serde_json = { version = "1" }
shlex = { version = "1.1.0" }
modified radicle-httpd/Cargo.toml
@@ -27,7 +27,7 @@ hyper = { version = "1.0.1", default-features = false }
lexopt = { version = "0.3.0" }
lru = { version = "0.12.0" }
nonempty = { version = "0.9.0", features = ["serialize"] }
-
radicle-surf = { version = "0.18.0", default-features = false, features = ["serde"] }
+
radicle-surf = { version = "0.19.0", default-features = false, features = ["serde"] }
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1", features = ["preserve_order"] }
thiserror = { version = "1" }
modified radicle-httpd/src/api/json.rs
@@ -18,7 +18,7 @@ use radicle::node::{Alias, AliasStore};
use radicle::prelude::NodeId;
use radicle::storage::{git, refs, RemoteRepository};
use radicle_surf::blob::Blob;
-
use radicle_surf::tree::Tree;
+
use radicle_surf::tree::{EntryKind, Tree};
use radicle_surf::{Commit, Oid, Stats};

use crate::api::auth::Session;
@@ -82,8 +82,13 @@ pub(crate) fn tree(tree: &Tree, path: &str, stats: &Stats) -> Value {
        .map(|entry| {
            json!({
                "path": prefix.join(entry.name()),
+
                "oid": entry.object_id(),
                "name": entry.name(),
-
                "kind": if entry.is_tree() { "tree" } else { "blob" },
+
                "kind": match entry.entry() {
+
                    EntryKind::Tree(_) => "tree",
+
                    EntryKind::Blob(_) => "blob",
+
                    EntryKind::Submodule { .. } => "submodule"
+
                },
            })
        })
        .collect::<Vec<_>>();
modified radicle-httpd/src/api/v1/projects.rs
@@ -1669,11 +1669,13 @@ mod routes {
                "entries": [
                  {
                    "path": "dir1",
+
                    "oid": "2d1c3cbfcf1d190d7fc77ac8f9e53db0e91a9ad3",
                    "name": "dir1",
                    "kind": "tree"
                  },
                  {
                    "path": "README",
+
                    "oid": "980a0d5f19a64b4b30a87d4206aade58726b60e3",
                    "name": "README",
                    "kind": "blob"
                  }
@@ -1698,8 +1700,8 @@ mod routes {
                "name": "",
                "path": "",
                "stats": {
-
                  "branches": 1,
                  "commits": 3,
+
                  "branches": 1,
                  "contributors": 1
                }
              }
@@ -1715,6 +1717,7 @@ mod routes {
              "entries": [
                {
                  "path": "dir1/README",
+
                  "oid": "1dd5654ca2d2cf9f33b14c92b5ca9e1d21a91ae1",
                  "name": "README",
                  "kind": "blob"
                }