Skip to content

Commit

Permalink
implement @^{} syntax (#427)
Browse files Browse the repository at this point in the history
  • Loading branch information
Byron committed Aug 3, 2022
1 parent 90dccc3 commit fbd5aab
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 8 deletions.
14 changes: 10 additions & 4 deletions git-repository/src/revision/spec/parse/delegate.rs
Expand Up @@ -462,11 +462,12 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
let mut replacements = Replacements::default();
let mut errors = Vec::new();
let objs = self.objs[self.idx].as_mut()?;
let repo = self.repo;

match kind {
PeelTo::ValidObject => {
for obj in objs.iter() {
match self.repo.find_object(*obj) {
match repo.find_object(*obj) {
Ok(_) => {}
Err(err) => {
errors.push((*obj, err.into()));
Expand All @@ -475,7 +476,6 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
}
}
PeelTo::ObjectKind(kind) => {
let repo = self.repo;
let peel = |obj| peel(repo, obj, kind);
for obj in objs.iter() {
match peel(obj) {
Expand All @@ -485,7 +485,6 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
}
}
PeelTo::Path(path) => {
let repo = self.repo;
let lookup_path = |obj: &ObjectId| {
let tree_id = peel(repo, obj, git_object::Kind::Tree)?;
let tree = repo.find_object(tree_id)?.into_tree();
Expand All @@ -509,7 +508,14 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
}
}
}
PeelTo::RecursiveTagObject => todo!("recursive tag object"),
PeelTo::RecursiveTagObject => {
for oid in objs.iter() {
match oid.attach(repo).object().and_then(|obj| obj.peel_tags_to_end()) {
Ok(obj) => replacements.push((*oid, obj.id)),
Err(err) => errors.push((*oid, err.into())),
}
}
}
}

handle_errors_and_replacements(&mut self.err, objs, errors, &mut replacements)
Expand Down
Git LFS file not shown
4 changes: 4 additions & 0 deletions git-repository/tests/fixtures/make_rev_spec_parse_repos.sh
Expand Up @@ -382,4 +382,8 @@ git init complex_graph
baseline "@{3}"
baseline "HEAD@{5}"
baseline "main@{12345}"

baseline "@^{}"
baseline "main^{}"
baseline "b-tag^{}"
)
22 changes: 21 additions & 1 deletion git-repository/tests/revision/spec/from_bytes/mod.rs
Expand Up @@ -11,6 +11,26 @@ mod regex;
mod reflog;
mod traverse;

mod peel {
use crate::revision::spec::from_bytes::{parse_spec, repo};
use git_repository::prelude::ObjectIdExt;
use git_repository::revision::Spec;
use git_testtools::hex_to_id;

#[test]
fn peel_to_object() {
let repo = &repo("complex_graph").unwrap();

let expected = Spec::from_id(hex_to_id("55e825ebe8fd2ff78cad3826afb696b96b576a7e").attach(repo));
assert_eq!(parse_spec("@^{}", repo).unwrap(), expected);
assert_eq!(parse_spec("main^{}", repo).unwrap(), expected);
assert_eq!(
parse_spec("b-tag^{}", repo).unwrap(),
Spec::from_id(hex_to_id("5b3f9e24965d0b28780b7ce5daf2b5b7f7e0459f").attach(repo))
);
}
}

mod sibling_branch {
use crate::revision::spec::from_bytes::{parse_spec_no_baseline, repo};
use git_repository::revision::spec::parse::Error;
Expand All @@ -37,7 +57,7 @@ mod index {
use git_testtools::hex_to_id;

#[test]
fn at_stages() {
fn at_stage() {
let repo = repo("complex_graph").unwrap();
assert_eq!(
parse_spec(":file", &repo).unwrap(),
Expand Down
2 changes: 1 addition & 1 deletion git-repository/tests/revision/spec/from_bytes/reflog.rs
Expand Up @@ -64,7 +64,7 @@ fn by_index() {
}

#[test]
fn by_date() {
fn by_date_is_planned_until_git_date_crate_is_implements_parsing() {
let repo = repo("complex_graph").unwrap();
assert!(matches!(
parse_spec_no_baseline("main@{1979-02-26 18:30:00}", &repo).unwrap_err(),
Expand Down

0 comments on commit fbd5aab

Please sign in to comment.