Include version number when saving notes
This commit is contained in:
parent
e2436328b7
commit
65f555fcb3
2 changed files with 19 additions and 8 deletions
|
|
@ -4,7 +4,7 @@ mod v1;
|
|||
use std::path::Path;
|
||||
|
||||
use anyhow::{anyhow, bail};
|
||||
use git2::{Commit, ErrorCode, Oid, Reference, Repository};
|
||||
use git2::{Commit, ErrorCode, FileMode, Oid, Reference, Repository, TreeBuilder};
|
||||
use jiff::Zoned;
|
||||
|
||||
pub use self::v1::{Note, Repo, VERSION};
|
||||
|
|
@ -40,6 +40,12 @@ fn read_version(repository: &Repository, commit: &Commit<'_>) -> anyhow::Result<
|
|||
Ok(version)
|
||||
}
|
||||
|
||||
fn write_version(repository: &Repository, tree: &mut TreeBuilder<'_>) -> anyhow::Result<()> {
|
||||
let oid = repository.blob(VERSION.to_string().as_bytes())?;
|
||||
tree.insert(VERSION_FILE, oid, FileMode::Blob.into())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn load_version(path: &Path) -> anyhow::Result<u32> {
|
||||
let repository = Repository::open_bare(path)?;
|
||||
let Some(head) = read_head(&repository)? else {
|
||||
|
|
@ -71,7 +77,10 @@ pub fn load(path: &Path) -> anyhow::Result<Repo> {
|
|||
pub fn save(path: &Path, repo: Repo) -> anyhow::Result<Oid> {
|
||||
let repository = Repository::open_bare(path)?;
|
||||
|
||||
let tree = repo.save_to_tree(&repository)?;
|
||||
let mut tree = repository.treebuilder(None)?;
|
||||
write_version(&repository, &mut tree)?;
|
||||
repo.save_to_tree(&repository, &mut tree)?;
|
||||
let tree = repository.find_tree(tree.write()?)?;
|
||||
|
||||
let signature = repository.signature()?;
|
||||
let message = Zoned::now().to_string();
|
||||
|
|
|
|||
|
|
@ -79,10 +79,13 @@ impl Repo {
|
|||
Ok(Self { notes })
|
||||
}
|
||||
|
||||
pub fn save_to_tree(mut self, repository: &Repository) -> anyhow::Result<Tree<'_>> {
|
||||
pub fn save_to_tree(
|
||||
mut self,
|
||||
repository: &Repository,
|
||||
tree: &mut TreeBuilder<'_>,
|
||||
) -> anyhow::Result<()> {
|
||||
self.notes.sort_unstable_by_key(|it| it.id);
|
||||
|
||||
let mut root_tree = repository.treebuilder(None)?;
|
||||
let mut year = 0;
|
||||
let mut year_tree = repository.treebuilder(None)?;
|
||||
let mut month = 0;
|
||||
|
|
@ -106,7 +109,7 @@ impl Repo {
|
|||
}
|
||||
|
||||
if year != time.year() {
|
||||
add_tree_to_tree(&mut root_tree, &year_tree, format!("{year:04}"))?;
|
||||
add_tree_to_tree(tree, &year_tree, format!("{year:04}"))?;
|
||||
year_tree.clear()?;
|
||||
year = time.year();
|
||||
}
|
||||
|
|
@ -116,10 +119,9 @@ impl Repo {
|
|||
|
||||
add_tree_to_tree(&mut month_tree, &day_tree, format!("{day:02}"))?;
|
||||
add_tree_to_tree(&mut year_tree, &month_tree, format!("{month:02}"))?;
|
||||
add_tree_to_tree(&mut root_tree, &year_tree, format!("{year:04}"))?;
|
||||
add_tree_to_tree(tree, &year_tree, format!("{year:04}"))?;
|
||||
|
||||
let tree = repository.find_tree(root_tree.write()?)?;
|
||||
Ok(tree)
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn migrate(self) -> Self {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue