Skip to content

Commit 2ffda9a

Browse files
committed
deps: upgrade facet crates
Move to facet-git-tree 0.1.0-alpha.1 and Facet 0.50.0-rc.7, adapting consumers to the published crate APIs. Assisted-by: Goose:gpt-5.6-luna
1 parent a6eb4e3 commit 2ffda9a

12 files changed

Lines changed: 378 additions & 229 deletions

File tree

‎Cargo.lock‎

Lines changed: 255 additions & 178 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/git-prolly/Cargo.toml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ edition = "2024"
55
license = "MIT OR Apache-2.0"
66

77
[dependencies]
8-
facet = { version = "=0.50.0-rc.5", features = ["reflect"] }
9-
facet-value = "0.50.0-rc.5"
10-
facet-json = "0.50.0-rc.5"
11-
facet-git-tree = { features = ["value"], git = "https://github.com/git-ents/facet-git-tree.git", version = "0.1.0" }
8+
facet = { version = "=0.50.0-rc.7", features = ["reflect"] }
9+
facet-value = "0.50.0-rc.7"
10+
facet-json = "0.50.0-rc.7"
11+
facet-git-tree = { version = "0.1.0-alpha.1", features = ["value"] }
1212
gix = { version = "0.85.0", default-features = false, features = [
1313
"sha1",
1414
"sha256",

‎crates/git-store/Cargo.toml‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ path = "src/main.rs"
1212
gix-database = { path = "../gix-database" }
1313
git-prolly = { path = "../git-prolly" }
1414
gix-store = { path = "../gix-store" }
15-
facet = { version = "0.50.0-rc.0", features = ["reflect"] }
16-
facet-git-tree = { features = ["value"], git = "https://github.com/git-ents/facet-git-tree.git", version = "0.1.0" }
17-
facet-value = "0.50.0-rc.5"
18-
facet-json = "0.50.0-rc.5"
15+
facet = { version = "0.50.0-rc.7", features = ["reflect"] }
16+
facet-git-tree = { version = "0.1.0-alpha.1", features = ["value"] }
17+
facet-value = "0.50.0-rc.7"
18+
facet-json = "0.50.0-rc.7"
1919
gix = { version = "0.85.0", default-features = false, features = ["sha1", "zlib-rs", "interrupt", "revision"] }
2020
clap = { version = "4", features = ["derive"] }
2121
dialoguer = { version = "0.12", default-features = false }
2222
anyhow = "1"
2323

2424
[dev-dependencies]
25-
facet = { version = "0.50.0-rc.0", features = ["reflect"] }
25+
facet = { version = "0.50.0-rc.7", features = ["reflect"] }
2626
tempfile = "3"
2727
test-support = { path = "../test-support" }

‎crates/gix-database/Cargo.toml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ edition = "2024"
55
readme = "README.adoc"
66

77
[dependencies]
8-
facet-value = "0.50.0-rc.5"
8+
facet-value = "0.50.0-rc.7"
99
git-prolly = { path = "../git-prolly" }
1010
gix = { version = "0.85.0", default-features = false, features = [
1111
"sha1",
@@ -17,6 +17,6 @@ gix-refstore = { path = "../gix-refstore" }
1717
thiserror = "2"
1818

1919
[dev-dependencies]
20-
facet-value = "0.50.0-rc.5"
20+
facet-value = "0.50.0-rc.7"
2121
tempfile = "3"
2222
test-support = { path = "../test-support" }

‎crates/gix-store/Cargo.toml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ edition = "2024"
55
readme = "README.adoc"
66

77
[dependencies]
8-
facet = { version = "0.50.0-rc.0", features = ["reflect"] }
9-
facet-git-tree = { features = ["value"], git = "https://github.com/git-ents/facet-git-tree.git", version = "0.1.0" }
10-
facet-value = "0.50.0-rc.5"
8+
facet = { version = "0.50.0-rc.7", features = ["reflect"] }
9+
facet-git-tree = { version = "0.1.0-alpha.1", features = ["value"] }
10+
facet-value = "0.50.0-rc.7"
1111
gix = { version = "0.85.0", default-features = false, features = ["sha1", "zlib-rs"] }
1212
gix-refstore = { path = "../gix-refstore" }
1313
thiserror = "2"

‎crates/gix-store/src/kind.rs‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::{marker::PhantomData, rc::Rc};
44

55
use facet::Facet;
66
use facet_git_tree::{
7-
Derivation, Hints, ObjectId, Schema, SchemaPinError, check_universe_at,
7+
Derivation, Hints, ObjectId, Schema, SchemaPinError, check_universe,
88
deserialize_value_with_schema, identity_subtrees, migration::derive::derive, schema_of,
99
};
1010
use facet_value::Value;
@@ -19,7 +19,7 @@ use crate::encoding::{Encoding, Typed};
1919
use crate::error::Error;
2020
use crate::identity::{EntityId, canonical_document_id};
2121
use crate::index;
22-
use crate::migrate::TargetSchema;
22+
use crate::migrate::{TargetSchema, read_schema_document};
2323
use crate::store::{Publication, PublishOptions, Store};
2424
use crate::tombstone::{self, DeleteResult, EntityState, Tombstone, TombstoneEntry};
2525

@@ -1175,12 +1175,10 @@ where
11751175
/// schema is in hand and nothing has been published yet.
11761176
fn check_identity_subtrees(&self, doc: &Schema) -> Result<(), Error> {
11771177
for (subtree, node) in identity_subtrees(doc) {
1178-
check_universe_at(node, &doc.defs, subtree).map_err(|source| {
1179-
Error::IdentityUniverse {
1180-
kind: self.kind.clone(),
1181-
subtree: subtree.to_owned(),
1182-
source,
1183-
}
1178+
check_universe(node, &doc.defs).map_err(|source| Error::IdentityUniverse {
1179+
kind: self.kind.clone(),
1180+
subtree: subtree.to_owned(),
1181+
source,
11841182
})?;
11851183
}
11861184
Ok(())
@@ -1196,7 +1194,7 @@ where
11961194
{
11971195
Some(tip) => {
11981196
let tree = self.store.commit_tree(tip)?;
1199-
Ok(Some(Schema::read_pinned(&tree, self.store.objects())?))
1197+
Ok(Some(read_schema_document(&tree, self.store.objects())?))
12001198
}
12011199
None => Ok(None),
12021200
}

‎crates/gix-store/src/migrate.rs‎

Lines changed: 62 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
use facet_git_tree::{Edge, Migration, ObjectId, Schema, apply_chain};
77
use facet_value::Value;
8-
use gix::objs::{Find, Write};
8+
use gix::objs::{Data, Find, Kind, Tree, TreeRef, Write, WriteTo};
99
use gix_refstore::RefStore;
1010

1111
use crate::error::Error;
@@ -80,6 +80,63 @@ where
8080

8181
/// One step of a chain: the document values on this side conform to, and the
8282
/// migration off it.
83+
pub(crate) fn read_schema_document<F: Find + ?Sized>(
84+
tree: &ObjectId,
85+
store: &F,
86+
) -> Result<Schema, Error> {
87+
let filtered = WithoutMigration { tree, store };
88+
Ok(Schema::read_pinned(tree, &filtered)?)
89+
}
90+
91+
struct WithoutMigration<'a, F: ?Sized> {
92+
tree: &'a ObjectId,
93+
store: &'a F,
94+
}
95+
96+
impl<F: Find + ?Sized> Find for WithoutMigration<'_, F> {
97+
fn try_find<'a>(
98+
&self,
99+
id: &gix::hash::oid,
100+
buffer: &'a mut Vec<u8>,
101+
) -> Result<Option<Data<'a>>, gix::objs::find::Error> {
102+
let Some((kind, object_hash, bytes)) = (|| {
103+
let mut source = Vec::new();
104+
self.store.try_find(id, &mut source).map(|object| {
105+
object.map(|object| (object.kind, object.object_hash, object.data.to_vec()))
106+
})
107+
})()?
108+
else {
109+
return Ok(None);
110+
};
111+
let bytes = if id == self.tree.as_ref() && kind == Kind::Tree {
112+
let entries = TreeRef::from_bytes(&bytes, object_hash)
113+
.map_err(|error| Box::new(error) as gix::objs::find::Error)?
114+
.entries
115+
.into_iter()
116+
.filter(|entry| entry.filename != ENTRY)
117+
.map(|entry| gix::objs::tree::Entry {
118+
mode: entry.mode,
119+
filename: entry.filename.to_owned(),
120+
oid: ObjectId::from(entry.oid.to_owned()),
121+
})
122+
.collect();
123+
let mut filtered = Vec::new();
124+
Tree { entries }
125+
.write_to(&mut filtered)
126+
.map_err(|error| Box::new(error) as gix::objs::find::Error)?;
127+
filtered
128+
} else {
129+
bytes
130+
};
131+
*buffer = bytes;
132+
Ok(Some(Data {
133+
kind,
134+
object_hash,
135+
data: buffer,
136+
}))
137+
}
138+
}
139+
83140
struct Step {
84141
from: Schema,
85142
migration: Migration,
@@ -111,7 +168,7 @@ where
111168
kind: self.kind.clone(),
112169
})?;
113170
let tree = self.store.commit_tree(tip)?;
114-
let schema = Schema::read_pinned(&tree, self.store.objects())?;
171+
let schema = read_schema_document(&tree, self.store.objects())?;
115172
Ok(TargetSchema::new(schema, history))
116173
}
117174

@@ -152,8 +209,8 @@ where
152209
kind: self.kind.clone(),
153210
})?;
154211
let target_tree = self.store.commit_tree(tip)?;
155-
let stored_target = self.store.schema(target_tree)?;
156-
if stored_target.as_ref() != target.schema() || target.schema().kind != self.kind.as_str() {
212+
let stored_target = read_schema_document(&target_tree, self.store.objects())?;
213+
if stored_target != *target.schema() || target.schema().kind != self.kind.as_str() {
157214
return Err(Error::TargetSchemaMismatch {
158215
kind: self.kind.clone(),
159216
commit: tip,
@@ -172,7 +229,7 @@ where
172229
let (newer, older) = (pair[0], pair[1]);
173230
let older_tree = self.store.commit_tree(older)?;
174231
steps.push(Step {
175-
from: Schema::read_pinned(&older_tree, self.store.objects())?,
232+
from: read_schema_document(&older_tree, self.store.objects())?,
176233
migration: self.migration_at(newer)?.ok_or(Error::MigrationMissing {
177234
kind: self.kind.clone(),
178235
commit: newer,

‎crates/gix-store/tests/canonical.rs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fn stored_bytes_match_git_exactly() {
7070

7171
assert_eq!(id, oid(GOLDEN_TWO_PARENTS));
7272

73-
let gix::objs::Object::Commit(read_back) = store.objects().get(&id).unwrap() else {
73+
let gix::objs::Object::Commit(read_back) = store.objects().get(&id).unwrap().unwrap() else {
7474
panic!("canonical write did not produce a commit");
7575
};
7676
assert_eq!(read_back.tree, commit.tree());
@@ -143,7 +143,7 @@ fn zero_parents_write_a_root_commit() {
143143
"seal\n",
144144
);
145145
let id = store.write_canonical(commit).unwrap();
146-
let gix::objs::Object::Commit(read_back) = store.objects().get(&id).unwrap() else {
146+
let gix::objs::Object::Commit(read_back) = store.objects().get(&id).unwrap().unwrap() else {
147147
panic!("canonical write did not produce a commit");
148148
};
149149
assert!(read_back.parents.is_empty());
@@ -162,7 +162,7 @@ fn negative_time_offsets_frame_like_git() {
162162
"offset\n",
163163
);
164164
let id = store.write_canonical(commit).unwrap();
165-
let gix::objs::Object::Commit(read_back) = store.objects().get(&id).unwrap() else {
165+
let gix::objs::Object::Commit(read_back) = store.objects().get(&id).unwrap().unwrap() else {
166166
panic!("canonical write did not produce a commit");
167167
};
168168
assert_eq!(read_back.author.time.offset, -18000);

‎crates/gix-store/tests/identity.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ fn identical_canonical_typed_content_deduplicates() {
8181
identity::canonical_document_id(first_id).object_id(),
8282
first_id
8383
);
84-
assert!(first_objects.get(&first_id).is_some());
85-
assert!(second_objects.get(&second_id).is_some());
84+
assert!(first_objects.get(&first_id).unwrap().is_some());
85+
assert!(second_objects.get(&second_id).unwrap().is_some());
8686
}
8787

8888
#[test]

‎crates/gix-store/tests/prepared_publication.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fn explicit_parent_appends_above_legacy_tip_while_creating_absent_alias() {
8282
.unwrap();
8383

8484
let legacy_commit = kind.put(&path("legacy"), &value!({ "n": 1 })).unwrap();
85-
let legacy_tree = match store.objects().get(&legacy_commit).unwrap() {
85+
let legacy_tree = match store.objects().get(&legacy_commit).unwrap().unwrap() {
8686
GitObject::Commit(commit) => commit.tree,
8787
other => panic!("expected legacy commit, got {other:?}"),
8888
};
@@ -103,7 +103,7 @@ fn explicit_parent_appends_above_legacy_tip_while_creating_absent_alias() {
103103
)
104104
.unwrap();
105105

106-
let commit = match store.objects().get(&publication.commit()).unwrap() {
106+
let commit = match store.objects().get(&publication.commit()).unwrap().unwrap() {
107107
GitObject::Commit(commit) => commit,
108108
other => panic!("expected publication commit, got {other:?}"),
109109
};

0 commit comments

Comments
 (0)