@@ -79,18 +79,26 @@ pub enum OperatingMode {
7979}
8080
8181pub fn operating_mode ( ctx : & Context ) -> OperatingMode {
82- let repo = ctx. git2_repo . get ( ) . unwrap ( ) ;
82+ let outside = || OperatingMode :: OutsideWorkspace ( outside_workspace_metadata ( ctx) . unwrap_or_default ( ) ) ;
83+
84+ let Ok ( repo) = ctx. repo . get ( ) else {
85+ // If we can't even open/borrow the repo handle, attempting to compute metadata would just
86+ // try (and fail) to open it again.
87+ return OperatingMode :: OutsideWorkspace ( OutsideWorkspaceMetadata :: default ( ) ) ;
88+ } ;
8389 let Ok ( head_ref) = repo. head ( ) else {
84- return OperatingMode :: OutsideWorkspace ( outside_workspace_metadata ( ctx ) . unwrap_or_default ( ) ) ;
90+ return outside ( ) ;
8591 } ;
86-
87- let Some ( head_ref_name) = head_ref. name ( ) else {
88- return OperatingMode :: OutsideWorkspace ( outside_workspace_metadata ( ctx) . unwrap_or_default ( ) ) ;
92+ let Some ( head_ref_name) = head_ref. referent_name ( ) . map ( |name| name. as_bstr ( ) ) else {
93+ return outside ( ) ;
8994 } ;
9095
91- if OPEN_WORKSPACE_REFS . contains ( & head_ref_name) {
96+ if OPEN_WORKSPACE_REFS
97+ . iter ( )
98+ . any ( |workspace_ref| workspace_ref. as_bytes ( ) == head_ref_name)
99+ {
92100 OperatingMode :: OpenWorkspace
93- } else if head_ref_name == EDIT_BRANCH_REF {
101+ } else if EDIT_BRANCH_REF . as_bytes ( ) == head_ref_name {
94102 let edit_mode_metadata = read_edit_mode_metadata ( ctx) ;
95103
96104 match edit_mode_metadata {
@@ -100,11 +108,11 @@ pub fn operating_mode(ctx: &Context) -> OperatingMode {
100108 "Failed to open in edit mode, falling back to outside workspace {}" ,
101109 error
102110 ) ;
103- OperatingMode :: OutsideWorkspace ( outside_workspace_metadata ( ctx ) . unwrap_or_default ( ) )
111+ outside ( )
104112 }
105113 }
106114 } else {
107- OperatingMode :: OutsideWorkspace ( outside_workspace_metadata ( ctx ) . unwrap_or_default ( ) )
115+ outside ( )
108116 }
109117}
110118
0 commit comments