From 145631bde653828cc35cad16ec2ec308cf204b23 Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Wed, 3 Aug 2022 08:35:23 +0800 Subject: [PATCH] officially make sibling branches 'planned' (#427) --- .../src/revision/spec/parse/delegate.rs | 5 ++++- .../src/revision/spec/parse/types.rs | 2 ++ .../tests/revision/spec/from_bytes/mod.rs | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/git-repository/src/revision/spec/parse/delegate.rs b/git-repository/src/revision/spec/parse/delegate.rs index 5c848908e5..5fd6264b3f 100644 --- a/git-repository/src/revision/spec/parse/delegate.rs +++ b/git-repository/src/revision/spec/parse/delegate.rs @@ -333,7 +333,10 @@ impl<'repo> delegate::Revision for Delegate<'repo> { fn sibling_branch(&mut self, _kind: SiblingBranch) -> Option<()> { self.unset_disambiguate_call(); - todo!("once remote handling and ref-specs are fleshed out much more") + self.err.push(Error::Planned { + dependency: "remote handling and ref-specs are fleshed out more", + }); + None } } diff --git a/git-repository/src/revision/spec/parse/types.rs b/git-repository/src/revision/spec/parse/types.rs index eeae0d77c7..f3b1a99bb4 100644 --- a/git-repository/src/revision/spec/parse/types.rs +++ b/git-repository/src/revision/spec/parse/types.rs @@ -61,6 +61,8 @@ pub struct Options { #[derive(Debug, thiserror::Error)] #[allow(missing_docs)] pub enum Error { + #[error("This feature will be implemented once {dependency}")] + Planned { dependency: &'static str }, #[error("Reference {reference:?} does not have a reference log, cannot {action}")] MissingRefLog { reference: BString, action: &'static str }, #[error("HEAD has {available} prior checkouts and checkout number {desired} is out of range")] diff --git a/git-repository/tests/revision/spec/from_bytes/mod.rs b/git-repository/tests/revision/spec/from_bytes/mod.rs index e2eeba401e..046b67b7d6 100644 --- a/git-repository/tests/revision/spec/from_bytes/mod.rs +++ b/git-repository/tests/revision/spec/from_bytes/mod.rs @@ -11,6 +11,25 @@ mod regex; mod reflog; mod traverse; +mod sibling_branch { + use crate::revision::spec::from_bytes::{parse_spec_no_baseline, repo}; + use git_repository::revision::spec::parse::Error; + + #[test] + fn is_planned_and_delayed_until_remotes_are_sorted() { + let repo = repo("complex_graph").unwrap(); + assert!(matches!( + parse_spec_no_baseline("main@{push}", &repo).unwrap_err(), + Error::Planned { .. } + )); + + assert!(matches!( + parse_spec_no_baseline("main@{upstream}", &repo).unwrap_err(), + Error::Planned { .. } + )); + } +} + mod index { use crate::revision::spec::from_bytes::{parse_spec, repo}; use git_repository::prelude::ObjectIdExt;