Skip to content

Commit 21d6f88

Browse files
committed
stabilize assertions in parallel mode (#301)
1 parent 07e9081 commit 21d6f88

File tree

2 files changed

+52
-35
lines changed

2 files changed

+52
-35
lines changed

etc/check-package-size.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ echo "in root: gitoxide CLI"
1919
(enter cargo-smart-release && indent cargo diet -n --package-size-limit 85KB)
2020
(enter git-actor && indent cargo diet -n --package-size-limit 5KB)
2121
(enter git-index && indent cargo diet -n --package-size-limit 30KB)
22-
(enter git-worktree && indent cargo diet -n --package-size-limit 15KB)
22+
(enter git-worktree && indent cargo diet -n --package-size-limit 20KB)
2323
(enter git-revision && indent cargo diet -n --package-size-limit 10KB)
2424
(enter git-bitmap && indent cargo diet -n --package-size-limit 5KB)
2525
(enter git-tempfile && indent cargo diet -n --package-size-limit 25KB)
@@ -36,7 +36,7 @@ echo "in root: gitoxide CLI"
3636
(enter git-object && indent cargo diet -n --package-size-limit 25KB)
3737
(enter git-commitgraph && indent cargo diet -n --package-size-limit 25KB)
3838
(enter git-pack && indent cargo diet -n --package-size-limit 115KB)
39-
(enter git-odb && indent cargo diet -n --package-size-limit 115KB)
39+
(enter git-odb && indent cargo diet -n --package-size-limit 120KB)
4040
(enter git-protocol && indent cargo diet -n --package-size-limit 50KB)
4141
(enter git-packetline && indent cargo diet -n --package-size-limit 35KB)
4242
(enter git-repository && indent cargo diet -n --package-size-limit 80KB)

git-worktree/tests/worktree/index/checkout.rs

+50-33
Original file line numberDiff line numberDiff line change
@@ -332,10 +332,10 @@ fn no_case_related_collisions_on_case_sensitive_filesystem() {
332332
}
333333

334334
#[test]
335-
fn collisions_are_detected_on_a_case_sensitive_filesystem() {
335+
fn collisions_are_detected_on_a_case_insensitive_filesystem() {
336336
let opts = opts_from_probe();
337337
if !opts.fs.ignore_case {
338-
eprintln!("Skipping case-insensitive testing on what would be a case-senstive file system");
338+
eprintln!("Skipping case-insensitive testing on what would be a case-sensitive file system");
339339
return;
340340
}
341341
let (source_tree, destination, _index, outcome) =
@@ -349,44 +349,61 @@ fn collisions_are_detected_on_a_case_sensitive_filesystem() {
349349
);
350350

351351
let dest_files = dir_structure(&destination);
352-
assert_eq!(
353-
stripped_prefix(&destination, &dest_files),
354-
paths(["D/B", "D/C", "FILE_X", "X", "link-to-X"]),
355-
"we checkout files in order and generally handle collision detection differently, hence the difference"
356-
);
352+
let multi_threaded = git_features::parallel::num_threads(None) > 1;
353+
if multi_threaded {
354+
assert_eq!(
355+
dest_files.len(),
356+
5,
357+
"can only assert on number as it's racily creating files so unclear which one clashes"
358+
);
359+
} else {
360+
assert_eq!(
361+
stripped_prefix(&destination, &dest_files),
362+
paths(["D/B", "D/C", "FILE_X", "X", "link-to-X"]),
363+
"we checkout files in order and generally handle collision detection differently, hence the difference"
364+
);
365+
}
357366

358367
let error_kind = ErrorKind::AlreadyExists;
359368
#[cfg(windows)]
360369
let error_kind_dir = ErrorKind::PermissionDenied;
361370
#[cfg(not(windows))]
362371
let error_kind_dir = error_kind;
363372

364-
assert_eq!(
365-
sort_when_threaded(outcome.collisions),
366-
sort_when_threaded(vec![
367-
Collision {
368-
path: "FILE_x".into(),
369-
error_kind,
370-
},
371-
Collision {
372-
path: "d".into(),
373-
error_kind: error_kind_dir,
374-
},
375-
Collision {
376-
path: "file_X".into(),
377-
error_kind,
378-
},
379-
Collision {
380-
path: "file_x".into(),
381-
error_kind,
382-
},
383-
Collision {
384-
path: "x".into(),
385-
error_kind,
386-
},
387-
]),
388-
"these files couldn't be checked out"
389-
);
373+
if multi_threaded {
374+
assert_eq!(
375+
outcome.collisions.len(),
376+
5,
377+
"can only assert on number as it's racily creating files so unclear which one clashes"
378+
);
379+
} else {
380+
assert_eq!(
381+
outcome.collisions,
382+
vec![
383+
Collision {
384+
path: "FILE_x".into(),
385+
error_kind,
386+
},
387+
Collision {
388+
path: "d".into(),
389+
error_kind: error_kind_dir,
390+
},
391+
Collision {
392+
path: "file_X".into(),
393+
error_kind,
394+
},
395+
Collision {
396+
path: "file_x".into(),
397+
error_kind,
398+
},
399+
Collision {
400+
path: "x".into(),
401+
error_kind,
402+
},
403+
],
404+
"these files couldn't be checked out"
405+
);
406+
}
390407
}
391408

392409
fn assert_equality(source_tree: &Path, destination: &TempDir, allow_symlinks: bool) -> crate::Result<usize> {

0 commit comments

Comments
 (0)