Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tell github-linguist to count fixture shell scripts #1607

Merged
merged 4 commits into from
Sep 25, 2024

Conversation

EliahKagan
Copy link
Member

@EliahKagan EliahKagan commented Sep 24, 2024

By default, github-linguist treats source code files inside tests/fixtures directories as vendored, thereby declining to consider them when computing the percentage each language contributes to a repository:

# Test fixtures
- (^|/)[Tt]ests?/fixtures/
- (^|/)[Ss]pecs?/fixtures/

But in this repository, the shell scripts inside tests/fixtures are code that is part of the test suite. The effect of treating them as vendored is that only the comparably few shell scripts that are not test fixture scripts contribute to the language computation (and possibly other uses of github-linguist by various tooling? I am not sure).

Thus, the "Languages" bar on GitHub for this repository (or in forks) currently shows 97.5% Rust, 1.3% HTML, and 1.2% Other. But "Shell" should really be shown as a the second most prevalent language here, with a percentage significantly exceeding that of HTML.

Running github-linguist -b locally verifies the situation.

Marking the affected files as not vendored, with the usual pattern we have been using to adjust their attributes in other ways, in the top-level .gitattributes file, fixes that. This PR makes that change.

This changes the output of github-linguist from:

97.63%  7154452    Rust
1.32%   96933      HTML
0.94%   69205      Shell
0.10%   7100       Makefile
0.00%   108        Dockerfile

To:

94.98%  7154452    Rust
3.64%   274106     Shell
1.29%   96933      HTML
0.09%   7100       Makefile
0.00%   108        Dockerfile

I have verified that github-linguist identifies all the expected files by running:

find . -name '*.sh' -printf '%P\n' | sort >a
github-linguist -b | grep -E '\.sh$' | sort >b
diff a b

(Where the reason for -printf '%P\n' was to omit the leading ./ that would otherwise stymie diff. I don't know if this is portable; I used GNU find.)

On the count-sh branch--the feature branch for this PR--that gives no output.

Regarding non-obvious specifics of the edit to .gitattributes:

  • While I don't think the pattern **/tests/fixtures/**/*.sh confers a benefit over tests/fixtures/**/*.sh, I've used it because it was already in use.
  • linguist-vendored=false (or -linguist-vendored) could be added to the previous line with this pattern, but I added a separate line instead because it not closely related to the other line, and because they both benefit from their own comments.
  • Least importantly, I put it before the linguist-generated=true line for gix-packetline-blocking/src/ because if gix-packetline-blocking/src/ were somehow ever to gain fixture scripts--which is admittedly unlikely, since it is a src directory--then it should be clear that those would not contribute to the count. The order does not actually affect that, because one is setting linguist-vendored to false, while the other is setting linguist-generated to true. But I think this order is still clearer for that.

Byron added a commit to EliahKagan/gitoxide that referenced this pull request Sep 24, 2024
This was brought up in GitoxideLabs#1607 and I think it's preferable.
Copy link
Member

@Byron Byron left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for contributing this improvement, which happens to also have exposed a very annoying shortcoming that I have also encountered.

Instead of working around it like last time, I thought it's best to just hit it with an axe, and let CI run more occasionally instead of trying to be very smart with path-based rules.

From a convenience standpoint, it will be very much the same as auto-merge does the important work, with the notable disadvantage that some PRs could be merged faster.

@Byron Byron linked an issue Sep 24, 2024 that may be closed by this pull request
@Byron
Copy link
Member

Byron commented Sep 24, 2024

It seems the test-failure is legit even though I restarted it to be very sure. It is probably because somehow, the changed .gitattributes file affects the tests even though I don't think that's possible at all.

@EliahKagan, can you reproduce this on Windows?

Since the tests never ran, maybe it's unrelated to the .gitattributes modifications, even though that would make it even harder to for me to understand what's going on.

Thanks for your help.

@EliahKagan
Copy link
Member Author

Instead of working around it like last time, I thought it's best to just hit it with an axe, and let CI run more occasionally instead of trying to be very smart with path-based rules.

Sounds good. I suggest keeping the paths key added in #1609, even though the rationale will be different. Now it is just to avoid fuzzing that is less likely than usual to turn up anything. The commit message title there is made slightly misleading by this change, but I think that's not too big a deal (and if we rebase this, then that commit message will be decisively behind the commit here no matter how the history is viewed).

It seems the test-failure is legit even though I restarted it to be very sure. It is probably because somehow, the changed .gitattributes file affects the tests even though I don't think that's possible at all.

Maybe I was mistaken to think **/tests/fixtures/**/*.sh confers no benefit over tests/fixtures/**/*.sh... at least here and now. I don't know what's going on with that.

But these failures, I recognize. They are the same tests shown in #1358 to currently fail on Windows when all fixture scripts have to be run due to GIX_TEST_IGNORE_ARCHIVES=1 being set, except for gix-ref-tests::refs packed::iter::performance, which is not failing here, but which does not reliably fail and which I've observed at least sometimes to pass on CI in GIX_TEST_IGNORE_ARCHIVES=1 experiments.

So generated archives are not usable, for some reason, after these changes, at least on Windows. (In addition to these being the same failing tests as in #1358, they seems to be failing in the same way and, in particular, the detailed test output includes messages about how the fixture scripts have to run.)

I'll try it without the changes in dd94f57 and see what happens.

EliahKagan added a commit to EliahKagan/gitoxide that referenced this pull request Sep 24, 2024
This reverts commit dd94f57.

One of the changes to `.gitattributes`, possibly that change, has
caused the currently committed generated archives not to be able to
be used, producing Windows `test-fast` failures similar to GitoxideLabs#1358.
See comments in GitoxideLabs#1607 for details.
auto-merge was automatically disabled September 24, 2024 20:44

Head branch was pushed to by a user without write access

@EliahKagan
Copy link
Member Author

That worked.

The Windows test-fast job took longer than usual to run this time. It took 22 minutes. It looks like CI caching might not be working. I think this is independent of the previous problem, even if it was somehow triggered by churn in .gitattributes. In any case, if CI caching is not working, I expect that to be specific to this PR, and for it to work on the main branch, including if/after this PR is merged.

Since I'm amending anyway to clarify the revert commit message, I'm also going ahead and rebasing to avoid confusion between a48965c (#1609) and what is currently fc06e41 here, as I suggested in #1607 (comment) could help clarify the history. The presence of the commit being reverted, as well as the revert commit with the descriptive message, seems like valuable enough history that I do not plan to rewind them away.

EliahKagan added a commit to EliahKagan/gitoxide that referenced this pull request Sep 24, 2024
This reverts commit dd94f57.

That change to `.gitattributes`, though intended as a refactoring,
caused the currently committed generated archives not to be able to
be used, producing Windows `test-fast` failures similar to GitoxideLabs#1358.

See comments in GitoxideLabs#1607 for details.
@EliahKagan
Copy link
Member Author

EliahKagan commented Sep 24, 2024

Apparently the leading **/ in .gitattributes makes a difference. Specifically, at least as we are using it, it is needed to prevent fixture scripts from being wrongly checked out with CRLF line terminators.

When they have such line terminators, Git Bash is still able to run them, because it has functionality added downstream to do so, and the effect of running them would still usually be the same. The breakage occurred not from changed behavior of the scripts, but instead because, due to having different line endings, the scripts' CRC32 checksums were different, and therefore the committed archives generated from them could not be used. All fixture scripts therefore had to be rerun, leading to the failures exactly as described in #1358 (except for the one performance test that was already known not always to fail).

The cause of the problem is that patterns in .gitignore or .gitattributes are only "floating" when they have no non-trailing /. Even a / in the middle causes the pattern to be matched only relative to the location of the .gitignore or .gitattributes file that contains it. From gitignore(5) in the pattern format section:

  • If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself. Otherwise the pattern may also match at any level below the .gitignore level.

That documents it for .gitignore, but the situation in this PR pertains to .gitattributes. But this is not one of the ways .gitignore and .gitattributes differ, so the above applies to .gitattributes as well. From gitattributes(5):

The rules by which the pattern matches paths are the same as in .gitignore files (see gitignore[5]), with a few exceptions:

  • negative patterns are forbidden
  • patterns that match a directory do not recursively match paths inside that directory (so using the trailing-slash path/ syntax is pointless in an attributes file; use path/** instead)

Although one of those exceptions is, as noted, relevant in practice to some patterns using **, that applies to a trailing / versus /**, not to a leading **/.


To figure out what caused the behavior described in #1607 (comment), #1607 (comment), and #1607 (comment), I checked out all files anew on Windows by creating two new worktrees:

C:\Users\ek\source\repos\gitoxide [count-sh ≡]> git log
commit f53242abf45eaa3eee1ac7ac28648ef22cefd892 (HEAD -> count-sh, origin/count-sh)
Author: Eliah Kagan <[email protected]>
Date:   Tue Sep 24 16:42:29 2024 -0400

    Revert "simplify .gitattributes"

    This reverts commit dd94f57db82a9bf5833e290b3300a747001bb1eb.

    That change to `.gitattributes`, though intended as a refactoring,
    caused the currently committed generated archives not to be able to
    be used, producing Windows `test-fast` failures similar to #1358.

    See comments in #1607 for details.

commit a75e97080df22c9fcc3fd79b9f0b03aeb8f5fbe1
Author: Sebastian Thiel <[email protected]>
Date:   Tue Sep 24 16:32:20 2024 +0200

    simplify .gitattributes

    This was brought up in #1607 and I think it's preferable.

commit bfe363c7b719fd407b57e4c48f6764715b5529d7
Author: Sebastian Thiel <[email protected]>
Date:   Tue Sep 24 16:31:34 2024 +0200

    always run everything on CI to prevent never-succeeding CI (#1608)

    Fixes #1608.
C:\Users\ek\source\repos\gitoxide [count-sh ≡]> git worktree add ../gitoxide-gitattributes a75e97080df22c9fcc3fd79b9f0b03aeb8f5fbe1
Preparing worktree (detached HEAD a75e97080)
Updating files: 100% (2241/2241), done.
HEAD is now at a75e97080 simplify .gitattributes
C:\Users\ek\source\repos\gitoxide [count-sh ≡]> git worktree add ../gitoxide-gitattributes-reverted f53242abf45eaa3eee1ac7ac28648ef22cefd892
Preparing worktree (detached HEAD f53242abf)
Updating files: 100% (2241/2241), done.
HEAD is now at f53242abf Revert "simplify .gitattributes"

Then, in Git Bash--just because it is easier to do there (it is not the cause of the problem)--I checked what the Unix file utility reported for all the .sh files, both in the worktree with the **/ prefixes removed from the patterns, and in the worktree with that change reverted:

ek@Glub MINGW64 ~
$ cd source/repos/gitoxide-gitattributes

ek@Glub MINGW64 ~/source/repos/gitoxide-gitattributes ((a75e97080...))
$ (shopt -s globstar; file **/*.sh)
etc/check-package-size.sh:                                                       Bourne-Again shell script, Unicode text, UTF-8 text executable, with CRLF line terminators
etc/copy-packetline.sh:                                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
etc/corpus/clone-repos.sh:                                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
etc/corpus/json-to-jsonl.sh:                                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_am_repo.sh:                                              Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_basic_repo.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_bisect_repo.sh:                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_cherry_pick_repo.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_cherry_pick_sequence_repo.sh:                            Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_commit_describe_multiple_tags.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_complex_shallow_repo.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_config_repo.sh:                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_config_repos.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_core_worktree_repo.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_diff_repo.sh:                                            Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_diff_repos.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_empty_repo.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_fetch_repos.sh:                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_head_repos.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_merge_repo.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_packed_and_loose.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_pre_epoch_repo.sh:                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_rebase_i_repo.sh:                                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_references_repo.sh:                                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_remote_config_repos.sh:                                  Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_remote_repos.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_repo_with_fork_and_dates.sh:                             Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_rev_spec_parse_repos.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_revert_repo.sh:                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_revert_sequence_repo.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_shallow_repo.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_signatures_repo.sh:                                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_status_repos.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_submodules.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_worktree_repo.sh:                                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_worktree_repo_with_configs.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-archive/tests/fixtures/basic.sh:                                             Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-attributes/tests/fixtures/make_attributes_baseline.sh:                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-blame/tests/fixtures/make_blame_repo.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-command/tests/fixtures/win_path_lookup.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-commitgraph/tests/fixtures/generation_number_overflow.sh:                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-commitgraph/tests/fixtures/octopus_merges.sh:                                Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-commitgraph/tests/fixtures/single_commit.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-commitgraph/tests/fixtures/single_commit_huge_dates.sh:                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-commitgraph/tests/fixtures/single_parent.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-commitgraph/tests/fixtures/split_chain.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-commitgraph/tests/fixtures/two_parents.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-config/fuzz/fuzz_targets/fuzz_file_corpus_builder.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-config/tests/fixtures/config_with_worktree_extension.sh:                     Bourne-Again shell script, ASCII text executable
gix-config/tests/fixtures/make_config_repo.sh:                                   Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/all-but-credentials.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-credentials/tests/fixtures/custom-helper.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-credentials/tests/fixtures/fail.sh:                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-credentials/tests/fixtures/last-pass.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-credentials/tests/fixtures/password.sh:                                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-credentials/tests/fixtures/reflect.sh:                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-credentials/tests/fixtures/url.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-credentials/tests/fixtures/username.sh:                                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-date/tests/fixtures/generate_git_date_baseline.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-diff/tests/fixtures/make_blob_repo.sh:                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-diff/tests/fixtures/make_diff_repo.sh:                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-dir/tests/fixtures/many.sh:                                                  Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-dir/tests/fixtures/many-symlinks.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-discover/tests/fixtures/make_basic_repo.sh:                                  Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-discover/tests/fixtures/make_exfat_repo_darwin.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-discover/tests/fixtures/make_submodules.sh:                                  Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-filter/tests/fixtures/baseline.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-filter/tests/fixtures/pipeline_repos.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-fsck/tests/fixtures/make_test_repos.sh:                                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-glob/tests/fixtures/make_baseline.sh:                                        Bourne-Again shell script, Unicode text, UTF-8 text executable, with CRLF line terminators
gix-ignore/tests/fixtures/make_global_and_external_and_dir_ignores.sh:           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/file_metadata.sh:                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2.sh:                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_all_file_kinds.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_deeper_tree.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/V2_empty.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_icase_name_clashes.sh:                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_more_files.sh:                            Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_sparse_index_no_dirs.sh:                  Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_split_index.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_split_index_recursive.sh:                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v2_split_vs_regular_index.sh:                Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v3_added_files.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v3_skip_worktree.sh:                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v3_sparse_index.sh:                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v3_sparse_index_non_cone.sh:                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_index/v4_more_files_IEOT.sh:                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-index/tests/fixtures/make_traverse_literal_separators.sh:                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-negotiate/tests/fixtures/make_repos.sh:                                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-object/fuzz/fuzz_targets/fuzz_commit_corpus_builder.sh:                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-object/fuzz/fuzz_targets/fuzz_tag_corpus_builder.sh:                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-object/fuzz/fuzz_targets/fuzz_tree_corpus_builder.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-object/tests/fixtures/make_trees.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-odb/tests/fixtures/make_alternates_odb.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-odb/tests/fixtures/make_replaced_history.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-odb/tests/fixtures/make_repo_multi_index.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-odb/tests/fixtures/repo_with_loose_objects.sh:                               Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-pack/tests/fixtures/make_pack_gen_repo.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-pack/tests/fixtures/make_pack_gen_repo_multi_index.sh:                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-path/tests/fixtures/local_config.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-pathspec/tests/fixtures/match_baseline_dirs.sh:                              Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-pathspec/tests/fixtures/match_baseline_files.sh:                             Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-pathspec/tests/fixtures/parse_baseline.sh:                                   Bourne-Again shell script, Unicode text, UTF-8 text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_multi_hop_ref.sh:                                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_namespaced_packed_ref_repository.sh:                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_packed_ref_repository.sh:                            Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_packed_ref_repository_for_overlay.sh:                Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_packed_refs_for_lookup_rules.sh:                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_ref_repository.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_repo_for_reflog.sh:                                  Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_repository_with_lots_of_packed_refs.sh:              Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-ref/tests/fixtures/make_worktree_repo.sh:                                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-refspec/tests/fixtures/match_baseline.sh:                                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-refspec/tests/fixtures/parse_baseline.sh:                                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-revision/tests/fixtures/make_merge_base_repos.sh:                            Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-revision/tests/fixtures/make_repo_with_branches.sh:                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/conflicts.sh:                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/racy_git.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/status_changed.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/status_conflict.sh:                                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/status_intent_to_add.sh:                               Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/status_many.sh:                                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/status_removed.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/status_submodule.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/status_unchanged.sh:                                   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-status/tests/fixtures/symlink_stack.sh:                                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-submodule/tests/fixtures/basic.sh:                                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-traverse/tests/fixtures/make_repo_for_topo.sh:                               Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-traverse/tests/fixtures/make_repos.sh:                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-traverse/tests/fixtures/make_traversal_repo_for_commits_same_date.sh:        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-traverse/tests/fixtures/make_traversal_repo_for_commits_with_dates.sh:       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-traverse/tests/fixtures/make_traversal_repo_for_trees.sh:                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-url/tests/fixtures/make_baseline.sh:                                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree/tests/fixtures/make_attributes_baseline.sh:                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree/tests/fixtures/make_ignore_and_attributes_setup.sh:                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree/tests/fixtures/make_special_exclude_case.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree/tests/fixtures/symlink_stack.sh:                                    Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_dangerous_symlink.sh:                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_dangling_symlink.sh:                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_dangling_symlink_to_windows_invalid.sh:   Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_dangling_symlink_to_windows_reserved.sh:  Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_dir_symlink.sh:                           Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_ignorecase_collisions.sh:                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_mixed.sh:                                 Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_mixed_without_submodules.sh:              Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_mixed_without_submodules_and_symlinks.sh: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-state/tests/fixtures/make_traverse_trees.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-worktree-stream/tests/fixtures/basic.sh:                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
tests/helpers.sh:                                                                ASCII text, with CRLF line terminators
tests/journey.sh:                                                                Bourne-Again shell script, ASCII text executable, with CRLF line terminators
tests/journey/ein.sh:                                                            ASCII text, with CRLF line terminators
tests/journey/gix.sh:                                                            ASCII text, with CRLF line terminators
tests/utilities.sh:                                                              ASCII text, with CRLF line terminators

ek@Glub MINGW64 ~/source/repos/gitoxide-gitattributes ((a75e97080...))
$ cd ../gitoxide-gitattributes-reverted

ek@Glub MINGW64 ~/source/repos/gitoxide-gitattributes-reverted ((f53242abf...))
$ (shopt -s globstar; file **/*.sh)
etc/check-package-size.sh:                                                       Bourne-Again shell script, Unicode text, UTF-8 text executable, with CRLF line terminators
etc/copy-packetline.sh:                                                          Bourne-Again shell script, ASCII text executable, with CRLF line terminators
etc/corpus/clone-repos.sh:                                                       Bourne-Again shell script, ASCII text executable, with CRLF line terminators
etc/corpus/json-to-jsonl.sh:                                                     Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix/tests/fixtures/make_am_repo.sh:                                              Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_basic_repo.sh:                                           Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_bisect_repo.sh:                                          Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_cherry_pick_repo.sh:                                     Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_cherry_pick_sequence_repo.sh:                            Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_commit_describe_multiple_tags.sh:                        Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_complex_shallow_repo.sh:                                 Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_config_repo.sh:                                          Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_config_repos.sh:                                         Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_core_worktree_repo.sh:                                   Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_diff_repo.sh:                                            Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_diff_repos.sh:                                           Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_empty_repo.sh:                                           Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_fetch_repos.sh:                                          Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_head_repos.sh:                                           Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_merge_repo.sh:                                           Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_packed_and_loose.sh:                                     Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_pre_epoch_repo.sh:                                       Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_rebase_i_repo.sh:                                        Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_references_repo.sh:                                      Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_remote_config_repos.sh:                                  Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_remote_repos.sh:                                         Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_repo_with_fork_and_dates.sh:                             Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_rev_spec_parse_repos.sh:                                 Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_revert_repo.sh:                                          Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_revert_sequence_repo.sh:                                 Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_shallow_repo.sh:                                         Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_signatures_repo.sh:                                      Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_status_repos.sh:                                         Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_submodules.sh:                                           Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_worktree_repo.sh:                                        Bourne-Again shell script, ASCII text executable
gix/tests/fixtures/make_worktree_repo_with_configs.sh:                           Bourne-Again shell script, ASCII text executable
gix-archive/tests/fixtures/basic.sh:                                             Bourne-Again shell script, ASCII text executable
gix-attributes/tests/fixtures/make_attributes_baseline.sh:                       Bourne-Again shell script, ASCII text executable
gix-blame/tests/fixtures/make_blame_repo.sh:                                     Bourne-Again shell script, ASCII text executable
gix-command/tests/fixtures/win_path_lookup.sh:                                   Bourne-Again shell script, ASCII text executable
gix-commitgraph/tests/fixtures/generation_number_overflow.sh:                    Bourne-Again shell script, ASCII text executable
gix-commitgraph/tests/fixtures/octopus_merges.sh:                                Bourne-Again shell script, ASCII text executable
gix-commitgraph/tests/fixtures/single_commit.sh:                                 Bourne-Again shell script, ASCII text executable
gix-commitgraph/tests/fixtures/single_commit_huge_dates.sh:                      Bourne-Again shell script, ASCII text executable
gix-commitgraph/tests/fixtures/single_parent.sh:                                 Bourne-Again shell script, ASCII text executable
gix-commitgraph/tests/fixtures/split_chain.sh:                                   Bourne-Again shell script, ASCII text executable
gix-commitgraph/tests/fixtures/two_parents.sh:                                   Bourne-Again shell script, ASCII text executable
gix-config/fuzz/fuzz_targets/fuzz_file_corpus_builder.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-config/tests/fixtures/config_with_worktree_extension.sh:                     Bourne-Again shell script, ASCII text executable
gix-config/tests/fixtures/make_config_repo.sh:                                   Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/all-but-credentials.sh:                           Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/custom-helper.sh:                                 Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/fail.sh:                                          Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/last-pass.sh:                                     Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/password.sh:                                      Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/reflect.sh:                                       Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/url.sh:                                           Bourne-Again shell script, ASCII text executable
gix-credentials/tests/fixtures/username.sh:                                      Bourne-Again shell script, ASCII text executable
gix-date/tests/fixtures/generate_git_date_baseline.sh:                           Bourne-Again shell script, ASCII text executable
gix-diff/tests/fixtures/make_blob_repo.sh:                                       Bourne-Again shell script, ASCII text executable
gix-diff/tests/fixtures/make_diff_repo.sh:                                       Bourne-Again shell script, ASCII text executable
gix-dir/tests/fixtures/many.sh:                                                  Bourne-Again shell script, ASCII text executable
gix-dir/tests/fixtures/many-symlinks.sh:                                         Bourne-Again shell script, ASCII text executable
gix-discover/tests/fixtures/make_basic_repo.sh:                                  Bourne-Again shell script, ASCII text executable
gix-discover/tests/fixtures/make_exfat_repo_darwin.sh:                           Bourne-Again shell script, ASCII text executable
gix-discover/tests/fixtures/make_submodules.sh:                                  Bourne-Again shell script, ASCII text executable
gix-filter/tests/fixtures/baseline.sh:                                           Bourne-Again shell script, ASCII text executable
gix-filter/tests/fixtures/pipeline_repos.sh:                                     Bourne-Again shell script, ASCII text executable
gix-fsck/tests/fixtures/make_test_repos.sh:                                      Bourne-Again shell script, ASCII text executable
gix-glob/tests/fixtures/make_baseline.sh:                                        Bourne-Again shell script, Unicode text, UTF-8 text executable
gix-ignore/tests/fixtures/make_global_and_external_and_dir_ignores.sh:           Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/file_metadata.sh:                                       Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2.sh:                                       Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_all_file_kinds.sh:                        Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_deeper_tree.sh:                           Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/V2_empty.sh:                                 Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_icase_name_clashes.sh:                    Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_more_files.sh:                            Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_sparse_index_no_dirs.sh:                  Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_split_index.sh:                           Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_split_index_recursive.sh:                 Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v2_split_vs_regular_index.sh:                Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v3_added_files.sh:                           Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v3_skip_worktree.sh:                         Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v3_sparse_index.sh:                          Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v3_sparse_index_non_cone.sh:                 Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_index/v4_more_files_IEOT.sh:                       Bourne-Again shell script, ASCII text executable
gix-index/tests/fixtures/make_traverse_literal_separators.sh:                    Bourne-Again shell script, ASCII text executable
gix-negotiate/tests/fixtures/make_repos.sh:                                      Bourne-Again shell script, ASCII text executable
gix-object/fuzz/fuzz_targets/fuzz_commit_corpus_builder.sh:                      Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-object/fuzz/fuzz_targets/fuzz_tag_corpus_builder.sh:                         Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-object/fuzz/fuzz_targets/fuzz_tree_corpus_builder.sh:                        Bourne-Again shell script, ASCII text executable, with CRLF line terminators
gix-object/tests/fixtures/make_trees.sh:                                         Bourne-Again shell script, ASCII text executable
gix-odb/tests/fixtures/make_alternates_odb.sh:                                   Bourne-Again shell script, ASCII text executable
gix-odb/tests/fixtures/make_replaced_history.sh:                                 Bourne-Again shell script, ASCII text executable
gix-odb/tests/fixtures/make_repo_multi_index.sh:                                 Bourne-Again shell script, ASCII text executable
gix-odb/tests/fixtures/repo_with_loose_objects.sh:                               Bourne-Again shell script, ASCII text executable
gix-pack/tests/fixtures/make_pack_gen_repo.sh:                                   Bourne-Again shell script, ASCII text executable
gix-pack/tests/fixtures/make_pack_gen_repo_multi_index.sh:                       Bourne-Again shell script, ASCII text executable
gix-path/tests/fixtures/local_config.sh:                                         Bourne-Again shell script, ASCII text executable
gix-pathspec/tests/fixtures/match_baseline_dirs.sh:                              Bourne-Again shell script, ASCII text executable
gix-pathspec/tests/fixtures/match_baseline_files.sh:                             Bourne-Again shell script, ASCII text executable
gix-pathspec/tests/fixtures/parse_baseline.sh:                                   Bourne-Again shell script, Unicode text, UTF-8 text executable
gix-ref/tests/fixtures/make_multi_hop_ref.sh:                                    Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_namespaced_packed_ref_repository.sh:                 Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_packed_ref_repository.sh:                            Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_packed_ref_repository_for_overlay.sh:                Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_packed_refs_for_lookup_rules.sh:                     Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_ref_repository.sh:                                   Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_repo_for_reflog.sh:                                  Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_repository_with_lots_of_packed_refs.sh:              Bourne-Again shell script, ASCII text executable
gix-ref/tests/fixtures/make_worktree_repo.sh:                                    Bourne-Again shell script, ASCII text executable
gix-refspec/tests/fixtures/match_baseline.sh:                                    Bourne-Again shell script, ASCII text executable
gix-refspec/tests/fixtures/parse_baseline.sh:                                    Bourne-Again shell script, ASCII text executable
gix-revision/tests/fixtures/make_merge_base_repos.sh:                            Bourne-Again shell script, ASCII text executable
gix-revision/tests/fixtures/make_repo_with_branches.sh:                          Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/conflicts.sh:                                          Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/racy_git.sh:                                           Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/status_changed.sh:                                     Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/status_conflict.sh:                                    Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/status_intent_to_add.sh:                               Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/status_many.sh:                                        Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/status_removed.sh:                                     Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/status_submodule.sh:                                   Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/status_unchanged.sh:                                   Bourne-Again shell script, ASCII text executable
gix-status/tests/fixtures/symlink_stack.sh:                                      Bourne-Again shell script, ASCII text executable
gix-submodule/tests/fixtures/basic.sh:                                           Bourne-Again shell script, ASCII text executable
gix-traverse/tests/fixtures/make_repo_for_topo.sh:                               Bourne-Again shell script, ASCII text executable
gix-traverse/tests/fixtures/make_repos.sh:                                       Bourne-Again shell script, ASCII text executable
gix-traverse/tests/fixtures/make_traversal_repo_for_commits_same_date.sh:        Bourne-Again shell script, ASCII text executable
gix-traverse/tests/fixtures/make_traversal_repo_for_commits_with_dates.sh:       Bourne-Again shell script, ASCII text executable
gix-traverse/tests/fixtures/make_traversal_repo_for_trees.sh:                    Bourne-Again shell script, ASCII text executable
gix-url/tests/fixtures/make_baseline.sh:                                         Bourne-Again shell script, ASCII text executable
gix-worktree/tests/fixtures/make_attributes_baseline.sh:                         Bourne-Again shell script, ASCII text executable
gix-worktree/tests/fixtures/make_ignore_and_attributes_setup.sh:                 Bourne-Again shell script, ASCII text executable
gix-worktree/tests/fixtures/make_special_exclude_case.sh:                        Bourne-Again shell script, ASCII text executable
gix-worktree/tests/fixtures/symlink_stack.sh:                                    Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_dangerous_symlink.sh:                     Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_dangling_symlink.sh:                      Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_dangling_symlink_to_windows_invalid.sh:   Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_dangling_symlink_to_windows_reserved.sh:  Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_dir_symlink.sh:                           Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_ignorecase_collisions.sh:                 Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_mixed.sh:                                 Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_mixed_without_submodules.sh:              Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_mixed_without_submodules_and_symlinks.sh: Bourne-Again shell script, ASCII text executable
gix-worktree-state/tests/fixtures/make_traverse_trees.sh:                        Bourne-Again shell script, ASCII text executable
gix-worktree-stream/tests/fixtures/basic.sh:                                     Bourne-Again shell script, ASCII text executable
tests/helpers.sh:                                                                ASCII text, with CRLF line terminators
tests/journey.sh:                                                                Bourne-Again shell script, ASCII text executable, with CRLF line terminators
tests/journey/ein.sh:                                                            ASCII text, with CRLF line terminators
tests/journey/gix.sh:                                                            ASCII text, with CRLF line terminators
tests/utilities.sh:                                                              ASCII text, with CRLF line terminators

Note the with CRLF line terminators in the first run in the worktree where the .gitattributes patterns don't have **/ prefixes, which go away for the fixture scripts in the second run in the worktree where the .gitattributes patterns have the **/ prefixes restored. (It may be necessary to scroll to the right to see this, since the output is wide.)

Interestingly, some of the scripts that are not fixtures are checked out with CRLF line endings on Windows and, presumably, have been checked out that way for some time. This should be fixed, but its consequences are minimal because Git Bash supports running such scripts and those particular scripts can have different hashes without affecting the tests. This is something that I think should be fixed, but I suggest it be fixed in a separate PR. I suspect .gitattributes can be simplified, in such a way as to satisfy the spirit of dd94f57/a75e970, which I suggest be done separately from this PR as well.

This reverts commit a75e970.

That change to `.gitattributes`, though intended as a refactoring,
caused the currently committed generated archives not to be able to
be used, producing Windows `test-fast` failures similar to GitoxideLabs#1358.

See comments in GitoxideLabs#1607 for details.
Copy link
Member

@Byron Byron left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The cause of the problem is that patterns in .gitignore or .gitattributes are only "floating" when they have no non-trailing /. Even a / in the middle causes the pattern to be matched only relative to the location of the .gitignore or .gitattributes file that contains it. From gitignore(5) in the pattern format section:

That's a wonderful find! I also should know better given I implemented both of these matching engines 😁 - but of course the little special case I wasn't aware of anymore. It's really nice of the Git documentation to summarize it like that though.

Interestingly, some of the scripts that are not fixtures are checked out with CRLF line endings on Windows and, presumably, have been checked out that way for some time. This should be fixed, but its consequences are minimal because Git Bash supports running such scripts and those particular scripts can have different hashes without affecting the tests. This is something that I think should be fixed, but I suggest it be fixed in a separate PR. I suspect .gitattributes can be simplified, in such a way as to satisfy the spirit of dd94f57/a75e970, which I suggest be done separately from this PR as well.

That's a great find, and I like how worktrees are used to easily examine different states of the repository without changing the local worktree.
And yes, let's fix line-endings in a separate PR - I suppose that would be a good occasion to use renormalization.

In any case, this PR is ready to go.

@Byron Byron merged commit 7bf2f4f into GitoxideLabs:main Sep 25, 2024
16 checks passed
@EliahKagan EliahKagan deleted the count-sh branch September 25, 2024 06:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

"Tests pass" blocks PRs that don't need tests
2 participants