This patchset is in response to build failures on GGG's Cirrus CI freebsd_12 build jobs[1] and was prompted by a discussion thread [2]. These failures seem to be caused by the behavior outlined in [3]. Note: I jumped the gun on v2 a bit as discussions for v1 were still in progress so these are all changes suggested off v1. Changes from v2: * Split `--sq` change out into separate patch (from 3/3 to 1/3). * Convert tab in advice to space to match coding convention and to allow regex to be further simplified [4]. * Simplified regex [4]. * Reworded commit message for patch 3/3 to better document reason for change [4]. 1. https://github.com/gitgitgadget/git/pull/1550/checks?check_run_id=14949695859 2. https://lore.kernel.org/git/CALnO6CDryTsguLshcQxx97ZxyY42Twu2hC2y1bLOsS-9zbqXMA@xxxxxxxxxxxxxx/ 3. https://stackoverflow.com/questions/4233159/grep-regex-whitespace-behavior 4. https://lore.kernel.org/git/3f3a3f5b-70fd-ec3f-acbb-d585b5eb6cbc@xxxxxxxxx/ Jacob Abel (3): t2400: drop no-op `--sq` from rev-parse call builtin/worktree.c: convert tab in advice to space t2400: rewrite regex to avoid unintentional PCRE builtin/worktree.c | 4 ++-- t/t2400-worktree-add.sh | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) Range-diff against v2: -: ---------- > 1: 96c21c5bee t2400: drop no-op `--sq` from rev-parse call -: ---------- > 2: ebfba2d602 builtin/worktree.c: convert tab in advice to space 1: ef4ebd7350 ! 3: dee0c8f350 t2400: Fix test failures when using grep 2.5 @@ Metadata Author: Jacob Abel <jacobabel@xxxxxxxxxx> ## Commit message ## - t2400: Fix test failures when using grep 2.5 + t2400: rewrite regex to avoid unintentional PCRE - Replace all cases of `\s` with `[[:blank:]]` or ` ` as older versions - of GNU grep (and from what it seems most versions of BSD grep) do not - handle `\s`. + Replace all cases of `\s` with ` ` as it is not part of POSIX BRE or ERE + and therefore not all versions of grep handle it without PCRE support. For the same reason all cases of `\S` are replaced with `[^ ]`. It's not - an exact replacement (as it does not match tabs) but it is close enough - for this use case. - - Replacing `\S` also needs to occur as `\S` is technically PCRE and not - part of ERE even though most modern versions of grep accept it as ERE. - - This commit also drops `--sq` from a rev-parse call as it appears to be - a no-op. + an exact replacement but it is close enough for this use case. Signed-off-by: Jacob Abel <jacobabel@xxxxxxxxxx> @@ t/t2400-worktree-add.sh: test_wt_add_orphan_hint () { if [ $use_branch -eq 1 ] then - grep -E "^hint:\s+git worktree add --orphan -b \S+ \S+\s*$" actual -+ grep -E "^hint:[[:blank:]]+git worktree add --orphan -b [^ ]+ [^ ]+$" actual ++ grep -E "^hint:[ ]+git worktree add --orphan -b [^ ]+ [^ ]+$" actual else - grep -E "^hint:\s+git worktree add --orphan \S+\s*$" actual -+ grep -E "^hint:[[:blank:]]+git worktree add --orphan [^ ]+$" actual ++ grep -E "^hint:[ ]+git worktree add --orphan [^ ]+$" actual fi ' @@ t/t2400-worktree-add.sh: test_dwim_orphan () { local git_ns="repo" && @@ t/t2400-worktree-add.sh: test_dwim_orphan () { - grep "$invalid_ref_regex" actual && - ! grep "$orphan_hint" actual - else -- headpath=$(git $dashc_args rev-parse --sq --path-format=absolute --git-path HEAD) && -+ headpath=$(git $dashc_args rev-parse --path-format=absolute --git-path HEAD) && + headpath=$(git $dashc_args rev-parse --path-format=absolute --git-path HEAD) && headcontents=$(cat "$headpath") && grep "HEAD points to an invalid (or orphaned) reference" actual && - grep "HEAD path:\s*.$headpath." actual && -- 2.39.3