From: Colin Walters Date: Fri, 22 Oct 2021 13:38:09 +0000 (-0400) Subject: repo: Add `require_rev` method X-Git-Tag: archive/raspbian/2022.4-1+rpi1^2~9^2^2~20^2~36 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=440d872f68dcfbf39f3adb6cb6b68bb410306d06;p=ostree.git repo: Add `require_rev` method The `resolve_rev` C method should really have been `resolve_rev_optional` from the start - it is more obviously wrong in Rust because the input parameter `allows_noent` controls whether the returned `Option` can ever be `None`. I debated adding this to the C bindings, and may still do so, but eh it's faster to write + ship in Rust, and the future of ostree is Rust anyways. --- diff --git a/rust-bindings/rust/src/repo.rs b/rust-bindings/rust/src/repo.rs index 432b3ee4..827dcb4f 100644 --- a/rust-bindings/rust/src/repo.rs +++ b/rust-bindings/rust/src/repo.rs @@ -175,6 +175,13 @@ impl Repo { } } + /// Resolve a refspec to a commit SHA256. + /// Returns an error if the refspec does not exist. + pub fn require_rev(&self, refspec: &str) -> Result { + // SAFETY: Since we said `false` for "allow_noent", this function must return a value + Ok(self.resolve_rev(refspec, false)?.unwrap()) + } + /// Write a content object from provided input. pub fn write_content, Q: IsA>( &self, diff --git a/rust-bindings/rust/tests/repo/mod.rs b/rust-bindings/rust/tests/repo/mod.rs index 6f3100aa..f56e390e 100644 --- a/rust-bindings/rust/tests/repo/mod.rs +++ b/rust-bindings/rust/tests/repo/mod.rs @@ -10,9 +10,13 @@ mod checkout_at; fn should_commit_content_to_repo_and_list_refs_again() { let test_repo = TestRepo::new(); + assert!(test_repo.repo.require_rev("nosuchrev").is_err()); + let mtree = create_mtree(&test_repo.repo); let checksum = commit(&test_repo.repo, &mtree, "test"); + assert_eq!(test_repo.repo.require_rev("test").unwrap(), checksum); + let repo = ostree::Repo::new_for_path(test_repo.dir.path()); repo.open(NONE_CANCELLABLE).expect("OSTree test_repo"); let refs = repo