Skip to content

Commit 6c06406

Browse files
committed
support for @: == @^{tree} in rev-parsing
1 parent a6d79e3 commit 6c06406

File tree

5 files changed

+32
-21
lines changed

5 files changed

+32
-21
lines changed

git-repository/src/revision/spec/parse/delegate/navigate.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
120120
PeelTo::Path(path) => {
121121
let lookup_path = |obj: &ObjectId| {
122122
let tree_id = peel(repo, obj, git_object::Kind::Tree)?;
123+
if path.is_empty() {
124+
return Ok(tree_id);
125+
}
123126
let tree = repo.find_object(tree_id)?.into_tree();
124127
let entry = tree
125128
.lookup_path(git_path::from_bstr(path).components().map(|c| {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:59a25603e3f0bf76e32f3a947b4e275afdfc1e2a0b7ab0e159cc5cc0119f9556
3-
size 28084
2+
oid sha256:d96a9986f29cdc7d4a3aacae4718871d2b6079e8634ea817b8c63b75665eb32f
3+
size 28172

git-repository/tests/fixtures/make_rev_spec_parse_repos.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,4 +386,7 @@ git init complex_graph
386386
baseline "@^{}"
387387
baseline "main^{}"
388388
baseline "b-tag^{}"
389+
390+
baseline "@^{tree}"
391+
baseline "@:"
389392
)

git-repository/tests/revision/spec/from_bytes/mod.rs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,7 @@ mod regex;
1010
mod reflog;
1111
mod traverse;
1212

13-
mod peel {
14-
use git_repository::{prelude::ObjectIdExt, revision::Spec};
15-
use git_testtools::hex_to_id;
16-
17-
use crate::revision::spec::from_bytes::{parse_spec, repo};
18-
19-
#[test]
20-
fn peel_to_object() {
21-
let repo = &repo("complex_graph").unwrap();
22-
23-
let expected = Spec::from_id(hex_to_id("55e825ebe8fd2ff78cad3826afb696b96b576a7e").attach(repo));
24-
assert_eq!(parse_spec("@^{}", repo).unwrap(), expected);
25-
assert_eq!(parse_spec("main^{}", repo).unwrap(), expected);
26-
assert_eq!(
27-
parse_spec("b-tag^{}", repo).unwrap(),
28-
Spec::from_id(hex_to_id("5b3f9e24965d0b28780b7ce5daf2b5b7f7e0459f").attach(repo))
29-
);
30-
}
31-
}
13+
mod peel;
3214

3315
mod sibling_branch {
3416
use git_repository::revision::spec::parse::Error;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use git_repository::{prelude::ObjectIdExt, revision::Spec};
2+
use git_testtools::hex_to_id;
3+
4+
use crate::revision::spec::from_bytes::{parse_spec, repo};
5+
6+
#[test]
7+
fn peel_to_object() {
8+
let repo = &repo("complex_graph").unwrap();
9+
10+
let expected = Spec::from_id(hex_to_id("55e825ebe8fd2ff78cad3826afb696b96b576a7e").attach(repo));
11+
assert_eq!(parse_spec("@^{}", repo).unwrap(), expected);
12+
assert_eq!(parse_spec("main^{}", repo).unwrap(), expected);
13+
assert_eq!(
14+
parse_spec("b-tag^{}", repo).unwrap(),
15+
Spec::from_id(hex_to_id("5b3f9e24965d0b28780b7ce5daf2b5b7f7e0459f").attach(repo))
16+
);
17+
}
18+
19+
#[test]
20+
fn trailing_colon_is_equivalent_to_peel_to_tree() {
21+
let repo = &repo("complex_graph").unwrap();
22+
assert_eq!(parse_spec("@^{tree}", repo).unwrap(), parse_spec("@:", repo).unwrap());
23+
}

0 commit comments

Comments
 (0)