Skip to content

Commit 42f8db5

Browse files
authored
Merge pull request #2163 from cruessler/deprecate-in-place-methods
feat: replace peel_to_x_in_place by peel_to_x
2 parents 382dc5d + 44922d0 commit 42f8db5

File tree

17 files changed

+117
-53
lines changed

17 files changed

+117
-53
lines changed

gix-blame/tests/blame.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,10 @@ impl Fixture {
166166

167167
let mut reference = gix_ref::file::Store::find(&store, "HEAD")?;
168168

169-
// Needed for `peel_to_id_in_place`.
169+
// Needed for `peel_to_id`.
170170
use gix_ref::file::ReferenceExt;
171171

172-
let head_id = reference.peel_to_id_in_place(&store, &odb)?;
172+
let head_id = reference.peel_to_id(&store, &odb)?;
173173

174174
let git_dir = worktree_path.join(".git");
175175
let index = gix_index::File::at(git_dir.join("index"), gix_hash::Kind::Sha1, false, Default::default())?;

gix-negotiate/tests/baseline/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn run() -> crate::Result {
3636
.iter()
3737
.filter_map(|name| {
3838
refs.try_find(*name).expect("one tag per commit").map(|mut r| {
39-
r.peel_to_id_in_place(&refs, &store).expect("works");
39+
r.peel_to_id(&refs, &store).expect("works");
4040
r.target.into_id()
4141
})
4242
})

gix-protocol/src/fetch/negotiate.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -373,11 +373,7 @@ fn mark_all_refs_in_repo(
373373
let _span = gix_trace::detail!("mark_all_refs");
374374
for local_ref in store.iter()?.all()? {
375375
let mut local_ref = local_ref?;
376-
let id = local_ref.peel_to_id_in_place_packed(
377-
store,
378-
objects,
379-
store.cached_packed_buffer()?.as_ref().map(|b| &***b),
380-
)?;
376+
let id = local_ref.peel_to_id_packed(store, objects, store.cached_packed_buffer()?.as_ref().map(|b| &***b))?;
381377
let mut is_complete = false;
382378
if let Some(commit) = graph
383379
.get_or_insert_commit(id, |md| {

gix-ref/src/store/file/raw_ext.rs

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,64 @@ pub trait ReferenceExt: Sealed {
2626
///
2727
/// This is useful to learn where this reference is ultimately pointing to after following all symbolic
2828
/// refs and all annotated tags to the first non-tag object.
29+
#[deprecated = "Use `peel_to_id()` instead"]
2930
fn peel_to_id_in_place(
3031
&mut self,
3132
store: &file::Store,
3233
objects: &dyn gix_object::Find,
3334
) -> Result<ObjectId, peel::to_id::Error>;
3435

36+
/// Follow all symbolic targets this reference might point to and peel the underlying object
37+
/// to the end of the tag-chain, returning the first non-tag object the annotated tag points to,
38+
/// using `objects` to access them and `store` to lookup symbolic references.
39+
///
40+
/// This is useful to learn where this reference is ultimately pointing to after following all symbolic
41+
/// refs and all annotated tags to the first non-tag object.
42+
///
43+
/// Note that this method mutates `self` in place if it does not already point to a
44+
/// non-symbolic object.
45+
fn peel_to_id(
46+
&mut self,
47+
store: &file::Store,
48+
objects: &dyn gix_object::Find,
49+
) -> Result<ObjectId, peel::to_id::Error>;
50+
3551
/// Like [`ReferenceExt::peel_to_id_in_place()`], but with support for a known stable `packed` buffer
3652
/// to use for resolving symbolic links.
53+
#[deprecated = "Use `peel_to_id_packed()` instead"]
3754
fn peel_to_id_in_place_packed(
3855
&mut self,
3956
store: &file::Store,
4057
objects: &dyn gix_object::Find,
4158
packed: Option<&packed::Buffer>,
4259
) -> Result<ObjectId, peel::to_id::Error>;
4360

61+
/// Like [`ReferenceExt::peel_to_id_in_place()`], but with support for a known stable `packed` buffer
62+
/// to use for resolving symbolic links.
63+
fn peel_to_id_packed(
64+
&mut self,
65+
store: &file::Store,
66+
objects: &dyn gix_object::Find,
67+
packed: Option<&packed::Buffer>,
68+
) -> Result<ObjectId, peel::to_id::Error>;
69+
4470
/// Like [`ReferenceExt::follow()`], but follows all symbolic references while gracefully handling loops,
4571
/// altering this instance in place.
72+
#[deprecated = "Use `follow_to_object_packed()` instead"]
4673
fn follow_to_object_in_place_packed(
4774
&mut self,
4875
store: &file::Store,
4976
packed: Option<&packed::Buffer>,
5077
) -> Result<ObjectId, peel::to_object::Error>;
5178

79+
/// Like [`ReferenceExt::follow()`], but follows all symbolic references while gracefully handling loops,
80+
/// altering this instance in place.
81+
fn follow_to_object_packed(
82+
&mut self,
83+
store: &file::Store,
84+
packed: Option<&packed::Buffer>,
85+
) -> Result<ObjectId, peel::to_object::Error>;
86+
5287
/// Follow this symbolic reference one level and return the ref it refers to.
5388
///
5489
/// Returns `None` if this is not a symbolic reference, hence the leaf of the chain.
@@ -84,28 +119,45 @@ impl ReferenceExt for Reference {
84119
&mut self,
85120
store: &file::Store,
86121
objects: &dyn gix_object::Find,
122+
) -> Result<ObjectId, peel::to_id::Error> {
123+
self.peel_to_id(store, objects)
124+
}
125+
126+
fn peel_to_id(
127+
&mut self,
128+
store: &file::Store,
129+
objects: &dyn gix_object::Find,
87130
) -> Result<ObjectId, peel::to_id::Error> {
88131
let packed = store.assure_packed_refs_uptodate().map_err(|err| {
89132
peel::to_id::Error::FollowToObject(peel::to_object::Error::Follow(file::find::existing::Error::Find(
90133
file::find::Error::PackedOpen(err),
91134
)))
92135
})?;
93-
self.peel_to_id_in_place_packed(store, objects, packed.as_ref().map(|b| &***b))
136+
self.peel_to_id_packed(store, objects, packed.as_ref().map(|b| &***b))
94137
}
95138

96139
fn peel_to_id_in_place_packed(
97140
&mut self,
98141
store: &file::Store,
99142
objects: &dyn gix_object::Find,
100143
packed: Option<&packed::Buffer>,
144+
) -> Result<ObjectId, peel::to_id::Error> {
145+
self.peel_to_id_packed(store, objects, packed)
146+
}
147+
148+
fn peel_to_id_packed(
149+
&mut self,
150+
store: &file::Store,
151+
objects: &dyn gix_object::Find,
152+
packed: Option<&packed::Buffer>,
101153
) -> Result<ObjectId, peel::to_id::Error> {
102154
match self.peeled {
103155
Some(peeled) => {
104156
self.target = Target::Object(peeled.to_owned());
105157
Ok(peeled)
106158
}
107159
None => {
108-
let mut oid = self.follow_to_object_in_place_packed(store, packed)?;
160+
let mut oid = self.follow_to_object_packed(store, packed)?;
109161
let mut buf = Vec::new();
110162
let peeled_id = loop {
111163
let gix_object::Data { kind, data } =
@@ -138,6 +190,14 @@ impl ReferenceExt for Reference {
138190
&mut self,
139191
store: &file::Store,
140192
packed: Option<&packed::Buffer>,
193+
) -> Result<ObjectId, peel::to_object::Error> {
194+
self.follow_to_object_packed(store, packed)
195+
}
196+
197+
fn follow_to_object_packed(
198+
&mut self,
199+
store: &file::Store,
200+
packed: Option<&packed::Buffer>,
141201
) -> Result<ObjectId, peel::to_object::Error> {
142202
match self.target {
143203
Target::Object(id) => Ok(id),

gix-ref/tests/refs/file/reference.rs

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,11 @@ mod peel {
8181
let store = store_with_packed_refs()?;
8282
let mut head: Reference = store.find_loose("HEAD")?.into();
8383
let expected = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");
84-
assert_eq!(head.peel_to_id_in_place(&store, &EmptyCommit)?, expected);
84+
assert_eq!(head.peel_to_id(&store, &EmptyCommit)?, expected);
8585
assert_eq!(head.target.try_id().map(ToOwned::to_owned), Some(expected));
8686

8787
let mut head = store.find("dt1")?;
88-
assert_eq!(head.peel_to_id_in_place(&store, &gix_object::find::Never)?, expected);
88+
assert_eq!(head.peel_to_id(&store, &gix_object::find::Never)?, expected);
8989
assert_eq!(head.target.into_id(), expected);
9090
Ok(())
9191
}
@@ -113,7 +113,7 @@ mod peel {
113113
"but following doesn't do that, only real peeling does"
114114
);
115115

116-
head.peel_to_id_in_place(&store, &EmptyCommit)?;
116+
head.peel_to_id(&store, &EmptyCommit)?;
117117
assert_eq!(
118118
head.target.try_id().map(ToOwned::to_owned),
119119
Some(final_stop),
@@ -135,23 +135,19 @@ mod peel {
135135
assert_eq!(r.kind(), gix_ref::Kind::Symbolic, "there is something to peel");
136136

137137
let commit = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");
138-
assert_eq!(r.peel_to_id_in_place(&store, &EmptyCommit)?, commit);
138+
assert_eq!(r.peel_to_id(&store, &EmptyCommit)?, commit);
139139
assert_eq!(r.name.as_bstr(), "refs/remotes/origin/multi-link-target3");
140140

141141
let mut r: Reference = store.find_loose("dt1")?.into();
142142
assert_eq!(
143-
r.peel_to_id_in_place(&store, &EmptyCommit)?,
143+
r.peel_to_id(&store, &EmptyCommit)?,
144144
hex_to_id("4c3f4cce493d7beb45012e478021b5f65295e5a3"),
145145
"points to a tag object without actual object lookup"
146146
);
147147

148148
let odb = gix_odb::at(store.git_dir().join("objects"))?;
149149
let mut r: Reference = store.find_loose("dt1")?.into();
150-
assert_eq!(
151-
r.peel_to_id_in_place(&store, &odb)?,
152-
commit,
153-
"points to the commit with lookup"
154-
);
150+
assert_eq!(r.peel_to_id(&store, &odb)?, commit, "points to the commit with lookup");
155151

156152
Ok(())
157153
}
@@ -162,7 +158,7 @@ mod peel {
162158
let store = file::store_at_with_args("make_multi_hop_ref.sh", packed)?;
163159
let odb = gix_odb::at(store.git_dir().join("objects"))?;
164160
let mut r: Reference = store.find("multi-hop")?;
165-
r.peel_to_id_in_place(&store, &odb)?;
161+
r.peel_to_id(&store, &odb)?;
166162

167163
let commit_id = hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03");
168164
assert_eq!(r.peeled, Some(commit_id));
@@ -172,8 +168,7 @@ mod peel {
172168
assert_eq!(obj.kind, gix_object::Kind::Commit, "always peeled to the first non-tag");
173169

174170
let mut r: Reference = store.find("multi-hop")?;
175-
let tag_id =
176-
r.follow_to_object_in_place_packed(&store, store.cached_packed_buffer()?.as_ref().map(|p| &***p))?;
171+
let tag_id = r.follow_to_object_packed(&store, store.cached_packed_buffer()?.as_ref().map(|p| &***p))?;
177172
let obj = odb.find(&tag_id, &mut buf)?;
178173
assert_eq!(obj.kind, gix_object::Kind::Tag, "the first direct object target");
179174
assert_eq!(
@@ -183,7 +178,7 @@ mod peel {
183178
);
184179
let mut r: Reference = store.find("multi-hop2")?;
185180
let other_tag_id =
186-
r.follow_to_object_in_place_packed(&store, store.cached_packed_buffer()?.as_ref().map(|p| &***p))?;
181+
r.follow_to_object_packed(&store, store.cached_packed_buffer()?.as_ref().map(|p| &***p))?;
187182
assert_eq!(other_tag_id, tag_id, "it can follow with multiple hops as well");
188183
}
189184
Ok(())
@@ -197,14 +192,14 @@ mod peel {
197192
assert_eq!(r.name.as_bstr(), "refs/loop-a");
198193

199194
assert!(matches!(
200-
r.peel_to_id_in_place(&store, &gix_object::find::Never).unwrap_err(),
195+
r.peel_to_id(&store, &gix_object::find::Never).unwrap_err(),
201196
gix_ref::peel::to_id::Error::FollowToObject(gix_ref::peel::to_object::Error::Cycle { .. })
202197
));
203198
assert_eq!(r.name.as_bstr(), "refs/loop-a", "the ref is not changed on error");
204199

205200
let mut r: Reference = store.find_loose("loop-a")?.into();
206201
let err = r
207-
.follow_to_object_in_place_packed(&store, store.cached_packed_buffer()?.as_ref().map(|p| &***p))
202+
.follow_to_object_packed(&store, store.cached_packed_buffer()?.as_ref().map(|p| &***p))
208203
.unwrap_err();
209204
assert!(matches!(err, gix_ref::peel::to_object::Error::Cycle { .. }));
210205
Ok(())

gix-ref/tests/refs/file/worktree.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ fn into_peel(
6060
store: &gix_ref::file::Store,
6161
odb: gix_odb::Handle,
6262
) -> impl Fn(gix_ref::Reference) -> gix_hash::ObjectId + '_ {
63-
move |mut r: gix_ref::Reference| r.peel_to_id_in_place(store, &odb).unwrap()
63+
move |mut r: gix_ref::Reference| r.peel_to_id(store, &odb).unwrap()
6464
}
6565

6666
enum Mode {

gix/src/clone/checkout.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ pub mod main_worktree {
9797
})?;
9898

9999
let root_tree_id = match &self.ref_name {
100-
Some(reference_val) => Some(repo.find_reference(reference_val)?.peel_to_id_in_place()?),
100+
Some(reference_val) => Some(repo.find_reference(reference_val)?.peel_to_id()?),
101101
None => repo.head()?.try_peel_to_id_in_place()?,
102102
};
103103

gix/src/commit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ pub mod describe {
122122
.filter_map(Result::ok)
123123
.filter_map(|mut r: crate::Reference<'_>| {
124124
let target_id = r.target().try_id().map(ToOwned::to_owned);
125-
let peeled_id = r.peel_to_id_in_place().ok()?;
125+
let peeled_id = r.peel_to_id().ok()?;
126126
let (prio, tag_time) = match target_id {
127127
Some(target_id) if peeled_id != *target_id => {
128128
let tag = repo.find_object(target_id).ok()?.try_into_tag().ok()?;

gix/src/head/peel.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ impl<'repo> Head<'repo> {
128128
}
129129
Kind::Symbolic(r) => {
130130
let mut nr = r.clone().attach(self.repo);
131-
let peeled = nr.peel_to_id_in_place();
131+
let peeled = nr.peel_to_id();
132132
*r = nr.detach();
133133
peeled?
134134
}

gix/src/reference/iter.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,9 @@ impl<'r> Iterator for Iter<'_, 'r> {
112112
.and_then(|mut r| {
113113
if self.peel {
114114
let repo = &self.repo;
115-
r.peel_to_id_in_place_packed(
116-
&repo.refs,
117-
&repo.objects,
118-
self.peel_with_packed.as_ref().map(|p| &***p),
119-
)
120-
.map_err(|err| Box::new(err) as Box<dyn std::error::Error + Send + Sync + 'static>)
121-
.map(|_| r)
115+
r.peel_to_id_packed(&repo.refs, &repo.objects, self.peel_with_packed.as_ref().map(|p| &***p))
116+
.map_err(|err| Box::new(err) as Box<dyn std::error::Error + Send + Sync + 'static>)
117+
.map(|_| r)
122118
} else {
123119
Ok(r)
124120
}

0 commit comments

Comments
 (0)