File tree Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Expand file tree Collapse file tree 2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change 1+ use std:: borrow:: Cow ;
12use std:: path:: { Path , PathBuf } ;
23
34use gix_path:: realpath:: MAX_SYMLINKS ;
@@ -108,4 +109,20 @@ impl crate::Repository {
108109 None => crate :: repository:: Kind :: Bare ,
109110 }
110111 }
112+
113+ /// Returns `Some(true)` if the reference database [is untouched](gix_ref::file::Store::is_pristine()).
114+ /// This typically indicates that the repository is new and empty.
115+ /// Return `None` if a defect in the database makes the answer uncertain.
116+ #[ doc( alias = "is_empty" , alias = "git2" ) ]
117+ pub fn is_pristine ( & self ) -> Option < bool > {
118+ let name = self
119+ . config
120+ . resolved
121+ . string ( crate :: config:: tree:: Init :: DEFAULT_BRANCH )
122+ . unwrap_or ( Cow :: Borrowed ( "master" . into ( ) ) ) ;
123+ let default_branch_ref_name: gix_ref:: FullName = format ! ( "refs/heads/{name}" )
124+ . try_into ( )
125+ . unwrap_or_else ( |_| gix_ref:: FullName :: try_from ( "refs/heads/master" ) . expect ( "known to be valid" ) ) ;
126+ self . refs . is_pristine ( default_branch_ref_name. as_ref ( ) )
127+ }
111128}
Original file line number Diff line number Diff line change @@ -56,6 +56,16 @@ mod index {
5656 repo. index_or_load_from_head_or_empty( ) ?. entries( ) . is_empty( ) ,
5757 "an empty index is created on the fly"
5858 ) ;
59+ assert_eq ! (
60+ repo. is_pristine( ) ,
61+ Some ( false ) ,
62+ "not pristine as it things the initial ref was changed to 'main'"
63+ ) ;
64+ assert_eq ! (
65+ repo. refs. is_pristine( "refs/heads/main" . try_into( ) ?) ,
66+ Some ( true ) ,
67+ "This is a quirk of default values in gix and the way we override the initial branch for test fixtures"
68+ ) ;
5969 Ok ( ( ) )
6070 }
6171}
You can’t perform that action at this time.
0 commit comments