wayver's git archive


a simple self-hosted git server
git clone https://git.wayver.dev/bile

src/git/tree.rs@main

raw
Date Commit Message Author Files + -
2026-02-19 17:51 large refactoring wayverd 53 2153 1683
...

1use std::path::Path;
2
3use anyhow::Context as _;
4use git2::{Blob, Object, Tree};
5
6use crate::{error::Result, git::Repository};
7
8impl Repository {
9    #[tracing::instrument(skip_all)]
10    pub(crate) fn tree_blob(&self, tree: &Tree<'_>, path: &Path) -> Result<Option<Blob<'_>>> {
11        let Some(obj) = self.tree_object(tree, path)? else {
12            return Ok(None);
13        };
14
15        let blob = obj.peel_to_blob()?;
16
17        Ok(Some(blob))
18    }
19
20    #[tracing::instrument(skip_all)]
21    pub(crate) fn tree_object(&self, tree: &Tree<'_>, path: &Path) -> Result<Option<Object<'_>>> {
22        let entry = match tree
23            .get_path(path)
24            .context("failed to get object from tree")
25        {
26            Ok(entry) => entry,
27            Err(err) => {
28                tracing::error!(err=?err, "failed to get object from tree");
29                return Ok(None);
30            }
31        };
32
33        let obj = entry.to_object(&self.inner)?;
34
35        Ok(Some(obj))
36    }
37}
38