aboutsummaryrefslogtreecommitdiff
path: root/apps/servers/octopus/supergit/src/raw/tree_walk.rs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/servers/octopus/supergit/src/raw/tree_walk.rs')
-rw-r--r--apps/servers/octopus/supergit/src/raw/tree_walk.rs168
1 files changed, 0 insertions, 168 deletions
diff --git a/apps/servers/octopus/supergit/src/raw/tree_walk.rs b/apps/servers/octopus/supergit/src/raw/tree_walk.rs
deleted file mode 100644
index f6bb3a964906..000000000000
--- a/apps/servers/octopus/supergit/src/raw/tree_walk.rs
+++ /dev/null
@@ -1,168 +0,0 @@
-//! Walk the file tree for a particular commit
-
-use git2::{self, ObjectType, TreeWalkMode};
-use std::collections::BTreeMap;
-
-/// A cache of a repository tree
-#[derive(Default, Debug, Clone)]
-pub(crate) struct Tree {
- inner: BTreeMap<String, TreeNode>,
-}
-
-impl Tree {
- /// Insert a node into a subtree with it's full path
- fn insert_to_subtree(&mut self, mut path: Vec<String>, name: String, node: TreeNode) {
- // If we are given a path, resolve it first
- let curr = if path.len() > 0 {
- let rest = path.split_off(1);
- let mut curr = self.inner.get_mut(&path[0]).unwrap();
-
- for dir in rest {
- match curr {
- TreeNode::Dir(ref mut d) => {
- curr = d.children.inner.get_mut(&dir).unwrap();
- }
- _ => panic!("Not a tree!"),
- }
- }
-
- match curr {
- TreeNode::Dir(ref mut d) => &mut d.children,
- TreeNode::File(_) => panic!("Not a tree!"),
- }
- } else {
- // If no path was given, we assume the root is meant
- self
- };
-
- curr.inner.insert(name, node);
- }
-
- /// Walk through the tree and only return filenode objects
- pub(crate) fn flatten(&self) -> Vec<FileNode> {
- self.inner.values().fold(vec![], |mut vec, node| {
- match node {
- TreeNode::File(f) => vec.push(f.clone()),
- TreeNode::Dir(d) => vec.append(&mut d.children.flatten()),
- }
-
- vec
- })
- }
-
- /// Get all the commits that touch a file
- pub(crate) fn grab_path_history(&self, path: String) -> String {
- let mut path: Vec<String> = path
- .split("/")
- .filter_map(|seg| match seg {
- "" => None,
- val => Some(val.into()),
- })
- .collect();
-
- let leaf = if path.len() > 0 {
- let rest = path.split_off(1);
- let mut curr = self.inner.get(&path[0]).unwrap();
-
- for dir in rest {
- match curr {
- TreeNode::Dir(d) => curr = d.children.inner.get(&dir).unwrap(),
- TreeNode::File(_) => break, // we reached the leaf
- }
- }
-
- curr
- } else {
- panic!("No valid path!");
- };
-
- match leaf {
- TreeNode::File(f) => f.id.clone(),
- _ => panic!("Not a leaf!"),
- }
- }
-}
-
-#[derive(Clone, Debug)]
-pub(crate) enum TreeNode {
- File(FileNode),
- Dir(DirNode),
-}
-
-impl TreeNode {
- fn name(&self) -> String {
- match self {
- Self::File(f) => f.name.clone(),
- Self::Dir(d) => d.name.clone(),
- }
- }
-}
-
-#[derive(Clone, Debug)]
-pub(crate) struct FileNode {
- pub id: String,
- pub path: Vec<String>,
- pub name: String,
-}
-
-#[derive(Clone, Debug)]
-pub(crate) struct DirNode {
- pub path: Vec<String>,
- pub name: String,
- pub children: Tree,
-}
-
-impl DirNode {
- fn append(&mut self, node: TreeNode) {
- self.children.inner.insert(node.name(), node);
- }
-}
-
-/// Take a series of path-segments and render a tree at that location
-pub(crate) fn parse_tree(tree: git2::Tree) -> Tree {
- let mut root = Tree::default();
-
- tree.walk(TreeWalkMode::PreOrder, |path, entry| {
- let path: Vec<String> = path
- .split("/")
- .filter_map(|seg| match seg {
- "" => None,
- val => Some(val.into()),
- })
- .collect();
- let name = entry.name().unwrap().to_string();
-
- match entry.kind() {
- // For every tree in the tree we create a new TreeNode with the path we know about
- Some(ObjectType::Tree) => {
- root.insert_to_subtree(
- path.clone(),
- name.clone(),
- TreeNode::Dir(DirNode {
- path,
- name,
- children: Tree::default(),
- }),
- );
- }
- // If we encounter a blob, this is a file that we can simply insert into the tree
- Some(ObjectType::Blob) => {
- root.insert_to_subtree(
- path.clone(),
- name.clone(),
- TreeNode::File(FileNode {
- id: format!("{}", entry.id()),
- path,
- name,
- }),
- );
- }
- _ => {}
- }
-
- 0
- })
- .unwrap();
-
- root
-}