File tree Expand file tree Collapse file tree 2 files changed +14
-24
lines changed Expand file tree Collapse file tree 2 files changed +14
-24
lines changed Original file line number Diff line number Diff line change @@ -272,7 +272,13 @@ impl ThreadSafeRepository {
272
272
section
273
273
. path
274
274
. as_deref ( )
275
- . and_then ( |p| gix_path:: normalize ( p. into ( ) , current_dir) )
275
+ . and_then ( |p| {
276
+ if p. exists ( ) {
277
+ gix_path:: realpath_opts ( p, current_dir, gix_path:: realpath:: MAX_SYMLINKS ) . ok ( )
278
+ } else {
279
+ gix_path:: normalize ( p. into ( ) , current_dir) . map ( Cow :: into_owned)
280
+ }
281
+ } )
276
282
. is_some_and ( |config_path| config_path. starts_with ( git_dir) )
277
283
}
278
284
let worktree_path = config
@@ -305,9 +311,14 @@ impl ThreadSafeRepository {
305
311
// the reason we use realpath instead of gix_path::normalize here is because there
306
312
// could be any intermediate symlinks (for example due to a symlinked .git
307
313
// directory)
308
- worktree_dir = gix_path:: realpath ( & wt_path) . ok ( ) ;
314
+ let is_relative = wt_path. is_relative ( ) ;
315
+ worktree_dir = if wt_path. exists ( ) {
316
+ gix_path:: realpath ( & wt_path) . ok ( )
317
+ } else {
318
+ Some ( wt_path. into_owned ( ) )
319
+ } ;
309
320
// restore the relative path if possible after resolving the absolute path
310
- if wt_path . is_relative ( ) {
321
+ if is_relative {
311
322
if let Some ( rel_path) = worktree_dir. as_deref ( ) . and_then ( |p| p. strip_prefix ( current_dir) . ok ( ) ) {
312
323
worktree_dir = Some ( rel_path. to_path_buf ( ) ) ;
313
324
}
Original file line number Diff line number Diff line change @@ -310,27 +310,6 @@ mod index_worktree {
310
310
) ;
311
311
}
312
312
313
- #[ test]
314
- fn submodule_in_symlinked_dir ( ) -> crate :: Result {
315
- use crate :: util:: named_subrepo_opts;
316
- let repo = named_subrepo_opts (
317
- "make_submodule_with_symlinked_git_dir.sh" ,
318
- "symlinked-git-dir" ,
319
- gix:: open:: Options :: isolated ( ) ,
320
- ) ?;
321
- let status = repo
322
- . status ( gix:: progress:: Discard ) ?
323
- . index_worktree_options_mut ( |opts| {
324
- opts. sorting =
325
- Some ( gix:: status:: plumbing:: index_as_worktree_with_renames:: Sorting :: ByPathCaseSensitive ) ;
326
- } )
327
- . into_index_worktree_iter ( None ) ?;
328
- for change in status {
329
- change?;
330
- }
331
- Ok ( ( ) )
332
- }
333
-
334
313
#[ test]
335
314
fn submodule_modification ( ) -> crate :: Result {
336
315
let repo = submodule_repo ( "modified-untracked-and-submodule-head-changed-and-modified" ) ?;
You can’t perform that action at this time.
0 commit comments