On Thu, Dec 02 2021, Eric Sunshine wrote: > The order in which the stdout and stderr streams are flushed is not > guaranteed to be the same across platforms or `libc` implementations. > This lack of determinism can lead to anomalous and potentially confusing > output if normal (stdout) output is flushed after error (stderr) output. > For instance, the following output which clearly indicates a failure due > to a fatal error: > > % git worktree add ../foo bar > Preparing worktree (checking out 'bar') > fatal: 'bar' is already checked out at '.../wherever' > > has been reported[1] on Microsoft Windows to appear as: > > % git worktree add ../foo bar > fatal: 'bar' is already checked out at '.../wherever' > Preparing worktree (checking out 'bar') Makes sense. > test_expect_success 'repair incorrect gitdir' ' > @@ -141,10 +139,9 @@ test_expect_success 'repair incorrect gitdir' ' > git worktree add --detach orig && > sed s,orig/\.git$,moved/.git, .git/worktrees/orig/gitdir >expect && > mv orig moved && > - git worktree repair moved >out 2>err && > + git worktree repair moved 2>err && > test_cmp expect .git/worktrees/orig/gitdir && > - test_i18ngrep "gitdir incorrect" out && > - test_must_be_empty err > + test_i18ngrep "gitdir incorrect" err > ' This is just a "for bonus points", but maybe we could/should while we're at it harden and make the tests more exhaustive by checking the full output of both, e.g. cat >actual.out <<-\EOF && Preparing worktree (checking out 'bar') EOF cat >actual.err <<-\EOF && fatal: 'bar' is already checked out at '.../wherever' EOF <cmd> [...] test_cmp expect.out actual.out && test_cmp expect.err actual.err Doesn't need a re-roll etc., just if you're interested... :)