summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-05-21ci: call `finalize_test_case_output` a little laterJohannes Schindelin1-5/+6
We used to call that function already before printing the final verdict. However, now that we added grouping to the GitHub workflow output, we will want to include even that part in the collapsible group for that test case. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci(github): mention where the full logs can be foundJohannes Schindelin1-0/+1
The full logs are contained in the `failed-tests-*.zip` artifacts that are attached to the failed CI run. Since this is not immediately obvious to the well-disposed reader, let's mention it explicitly. Suggested-by: Victoria Dye <vdye@github.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci: use `--github-workflow-markup` in the GitHub workflowJohannes Schindelin1-2/+2
This makes the output easier to digest. Note: since workflow output currently cannot contain any nested groups (see https://github.com/actions/runner/issues/802 for details), we need to remove the explicit grouping that would span the entirety of each failed test script. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci(github): avoid printing test case preamble twiceVictoria Dye2-0/+4
We want to mark up the test case preamble when presenting test output in Git's GitHub workflow. Let's suppress the non-marked-up version in that case. Any information it would contain is included in the marked-up variant already. Signed-off-by: Victoria Dye <vdye@github.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci(github): skip the logs of the successful test casesJohannes Schindelin1-0/+4
In most instances, looking at the log of failed test cases is enough to identify the problem. In some (rare?) instances, a previous test case that was marked as successful actually has information pertaining to a later test case that fails. To allow the page to load relatively quickly, let's only show the logs of the failed test cases to be shown. The full logs are available for download as artifacts, should a deeper investigation become necessary. Co-authored-by: Victoria Dye <vdye@github.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci: optionally mark up output in the GitHub workflowJohannes Schindelin3-3/+56
A couple of commands exist to spruce up the output in GitHub workflows: https://docs.github.com/en/actions/learn-github-actions/workflow-commands-for-github-actions In addition to the `::group::<label>`/`::endgroup::` commands (which we already use to structure the output of the build step better), we also use `::error::`/`::notice::` to draw the attention to test failures and to test cases that were expected to fail but didn't. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci/run-build-and-tests: add some structure to the GitHub workflow outputJohannes Schindelin3-10/+52
The current output of Git's GitHub workflow can be quite confusing, especially for contributors new to the project. To make it more helpful, let's introduce some collapsible grouping. Initially, readers will see the high-level view of what actually happened (did the build fail, or the test suite?). To drill down, the respective group can be expanded. Note: sadly, workflow output currently cannot contain any nested groups (see https://github.com/actions/runner/issues/802 for details), therefore we take pains to ensure to end any previous group before starting a new one. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci: make it easier to find failed tests' logs in the GitHub workflowJohannes Schindelin4-14/+27
When investigating a test failure, the time that matters most is the time it takes from getting aware of the failure to displaying the output of the failing test case. You currently have to know a lot of implementation details when investigating test failures in the CI runs. The first step is easy: the failed job is marked quite clearly, but when opening it, the failed step is expanded, which in our case is the one running `ci/run-build-and-tests.sh`. This step, most notably, only offers a high-level view of what went wrong: it prints the output of `prove` which merely tells the reader which test script failed. The actually interesting part is in the detailed log of said failed test script. But that log is shown in the CI run's step that runs `ci/print-test-failures.sh`. And that step is _not_ expanded in the web UI by default. It is even marked as "successful", which makes it very easy to miss that there is useful information hidden in there. Let's help the reader by showing the failed tests' detailed logs in the step that is expanded automatically, i.e. directly after the test suite failed. This also helps the situation where the _build_ failed and the `print-test-failures` step was executed under the assumption that the _test suite_ failed, and consequently failed to find any failed tests. An alternative way to implement this patch would be to source `ci/print-test-failures.sh` in the `handle_test_failures` function to show these logs. However, over the course of the next few commits, we want to introduce some grouping which would be harder to achieve that way (for example, we do want a leaner, and colored, preamble for each failed test script, and it would be trickier to accommodate the lack of nested groupings in GitHub workflows' output). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci/run-build-and-tests: take a more high-level viewJohannes Schindelin1-6/+7
In the web UI of GitHub workflows, failed runs are presented with the job step that failed auto-expanded. In the current setup, this is not helpful at all because that shows only the output of `prove`, which says which test failed, but not in what way. What would help understand the reader what went wrong is the verbose test output of the failed test. The logs of the failed runs do contain that verbose test output, but it is shown in the _next_ step (which is marked as succeeding, and is therefore _not_ auto-expanded). Anyone not intimately familiar with this would completely miss the verbose test output, being left mostly puzzled with the test failures. We are about to show the failed test cases' output in the _same_ step, so that the user has a much easier time to figure out what was going wrong. But first, we must partially revert the change that tried to improve the CI runs by combining the `Makefile` targets to build into a single `make` invocation. That might have sounded like a good idea at the time, but it does make it rather impossible for the CI script to determine whether the _build_ failed, or the _tests_. If the tests were run at all, that is. So let's go back to calling `make` for the build, and call `make test` separately so that we can easily detect that _that_ invocation failed, and react appropriately. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21test(junit): avoid line feeds in XML attributesJohannes Schindelin1-4/+10
In the test case's output, we do want newline characters, but in the XML attributes we do not want them. However, the `xml_attr_encode` function always adds a Line Feed at the end (which are then encoded as `&#x0a;`, even for XML attributes. This seems not to faze Azure Pipelines' XML parser, but it still is incorrect, so let's fix it. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21tests: refactor --write-junit-xml codeJohannes Schindelin2-108/+142
The code writing JUnit XML is interspersed directly with all the code in `t/test-lib.sh`, and it is therefore not only ill-separated, but introducing yet another output format would make the situation even worse. Let's introduce an abstraction layer by hiding the JUnit XML code behind four new functions that are supposed to be called before and after each test and test case. This is not just an academic exercise, refactoring for refactoring's sake. We _actually_ want to introduce such a new output format, to make it substantially easier to diagnose test failures in our GitHub workflow, therefore we do need this refactoring. This commit is best viewed with `git show --color-moved --color-moved-ws=allow-indentation-change <commit>`. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-21ci: fix code styleJohannes Schindelin1-2/+1
In b92cb86ea14 (travis-ci: check that all build artifacts are .gitignore-d, 2017-12-31), a function was introduced with a code style that is different from the surrounding code: it added the opening curly brace on its own line, when all the existing functions in the same file cuddle that brace on the same line as the function name. Let's make the code style consistent again. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-20Documentation/technical: add cruft-packs.txtTaylor Blau2-0/+124
Create a technical document to explain cruft packs. It contains a brief overview of the problem, some background, details on the implementation, and a couple of alternative approaches not considered here. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-20First batch for 2.37Junio C Hamano1-0/+56
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-20Merge branch 'cb/ci-make-p4-optional'Junio C Hamano1-10/+16
macOS CI jobs have been occasionally flaky due to tentative version skew between perforce and the homebrew packager. Instead of failing the whole CI job, just let it skip the p4 tests when this happens. * cb/ci-make-p4-optional: ci: use https, not http to download binaries from perforce.com ci: reintroduce prevention from perforce being quarantined in macOS ci: avoid brew for installing perforce ci: make failure to find perforce more user friendly
2022-05-20Merge branch 'tk/p4-metadata-coding-strategies'Junio C Hamano5-18/+572
"git p4" updates. * tk/p4-metadata-coding-strategies: git-p4: improve encoding handling to support inconsistent encodings
2022-05-20Merge branch 'ep/equals-null-cocci'Junio C Hamano2-2/+2
Merges up ep/maint-equals-null-cocci to the current codebase. * ep/equals-null-cocci: tree-wide: apply equals-null.cocci
2022-05-20Merge branch 'ep/maint-equals-null-cocci'Junio C Hamano67-150/+180
Introduce and apply coccinelle rule to discourage an explicit comparison between a pointer and NULL, and applies the clean-up to the maintenance track. * ep/maint-equals-null-cocci: tree-wide: apply equals-null.cocci tree-wide: apply equals-null.cocci contrib/coccinnelle: add equals-null.cocci
2022-05-20Merge branch 'ds/sparse-colon-path'Junio C Hamano4-3/+66
"git show :<path>" learned to work better with the sparse-index feature. * ds/sparse-colon-path: rev-parse: integrate with sparse index object-name: diagnose trees in index properly object-name: reject trees found in the index show: integrate with the sparse index t1092: add compatibility tests for 'git show'
2022-05-20Merge branch 'vd/sparse-stash'Junio C Hamano7-9/+131
Teach "git stash" to work better with sparse index entries. * vd/sparse-stash: unpack-trees: preserve index sparsity stash: apply stash using 'merge_ort_nonrecursive()' read-cache: set sparsity when index is new sparse-index: expose 'is_sparse_index_allowed()' stash: integrate with sparse index stash: expand sparse-checkout compatibility testing
2022-05-20Merge branch 'cd/bisect-messages-from-pre-flight-states'Junio C Hamano3-13/+93
"git bisect" was too silent before it is ready to start computing the actual bisection, which has been corrected. * cd/bisect-messages-from-pre-flight-states: bisect: output bisect setup status in bisect log bisect: output state before we are ready to compute bisection
2022-05-20Merge branch 'jc/update-ozlabs-url'Junio C Hamano1-1/+4
* jc/update-ozlabs-url: SubmittingPatches: use more stable git.ozlabs.org URL
2022-05-20Merge branch 'gc/pull-recurse-submodules'Junio C Hamano2-3/+33
"git pull" without "--recurse-submodules=<arg>" made submodule.recurse take precedence over fetch.recurseSubmodules by mistake, which has been corrected. * gc/pull-recurse-submodules: pull: do not let submodule.recurse override fetch.recurseSubmodules
2022-05-20Merge branch 'mg/detect-compiler-in-c-locale'Junio C Hamano1-1/+1
Build procedure fixup. * mg/detect-compiler-in-c-locale: detect-compiler: make detection independent of locale
2022-05-20Merge branch 'js/trace2-doc-fixes'Junio C Hamano1-22/+22
Trace2 documentation updates. * js/trace2-doc-fixes: trace2 docs: add missing full stop trace2 docs: clarify what `varargs` is all about trace2 docs: fix a JSON formatted example trace2 docs: surround more terms in backticks trace2 docs: "printf" is not an English word trace2 docs: a couple of grammar fixes
2022-05-20Merge branch 'mv/log-since-as-filter'Junio C Hamano4-0/+57
"git log --since=X" will stop traversal upon seeing a commit that is older than X, but there may be commits behind it that is younger than X when the commit was created with a faulty clock. A new option is added to keep digging without stopping, and instead filter out commits with timestamp older than X. * mv/log-since-as-filter: log: "--since-as-filter" option is a non-terminating "--since" variant
2022-05-20Merge branch 'rs/external-diff-tempfile'Junio C Hamano4-11/+81
The temporary files fed to external diff command are now generated inside a new temporary directory under the same basename. * rs/external-diff-tempfile: diff: use mks_tempfile_dt() tempfile: add mks_tempfile_dt()
2022-05-20Merge branch 'kf/p4-multiple-remotes'Junio C Hamano1-1/+9
"git p4" update. * kf/p4-multiple-remotes: git-p4: fix issue with multiple perforce remotes
2022-05-20Merge branch 'tk/p4-with-explicity-sync'Junio C Hamano3-14/+132
"git p4" update. * tk/p4-with-explicity-sync: git-p4: support explicit sync of arbitrary existing git-p4 refs
2022-05-20Merge branch 'tk/p4-utf8-bom'Junio C Hamano2-0/+44
"git p4" update. * tk/p4-utf8-bom: git-p4: preserve utf8 BOM when importing from p4 to git
2022-05-20Merge branch 'cg/vscode-with-gdb'Junio C Hamano2-2/+5
VS code configuration updates. * cg/vscode-with-gdb: contrib/vscode/: debugging with VS Code and gdb
2022-05-20Merge branch 'sa/t1011-use-helpers'Junio C Hamano1-23/+23
A GSoC practice. * sa/t1011-use-helpers: t1011: replace test -f with test_path_is_file
2022-05-20Merge branch 'km/t3501-use-test-helpers'Junio C Hamano1-5/+4
Test script updates. * km/t3501-use-test-helpers: t3501: remove test -f and stop ignoring git <cmd> exit code
2022-05-20Merge branch 'pb/submodule-recurse-mode-enum'Junio C Hamano2-2/+2
Small code clean-up. * pb/submodule-recurse-mode-enum: submodule.h: use a named enum for RECURSE_SUBMODULES_*
2022-05-20Merge branch 'ah/convert-warning-message'Junio C Hamano2-10/+10
Update a few end-user facing messages around eol conversion. * ah/convert-warning-message: convert: clarify line ending conversion warning
2022-05-20Merge branch 'gf/unused-includes'Junio C Hamano2-2/+0
Remove unused includes. * gf/unused-includes: apply.c: remove unnecessary include serve.c: remove unnecessary include
2022-05-20Merge branch 'gf/shorthand-version-and-help'Junio C Hamano3-6/+11
"git -v" and "git -h" are now understood as "git --version" and "git --help". * gf/shorthand-version-and-help: cli: add -v and -h shorthands
2022-05-20Merge branch 'rs/t7812-pcre2-ws-bug-test'Junio C Hamano1-0/+10
A test to ensure workaround for an earlier pcre2 bug does work. * rs/t7812-pcre2-ws-bug-test: t7812: test PCRE2 whitespace bug
2022-05-20Merge branch 'ds/do-not-call-bug-on-bad-refs'Junio C Hamano2-2/+13
Code clean-up. * ds/do-not-call-bug-on-bad-refs: clone: die() instead of BUG() on bad refs
2022-05-20Merge branch 'sg/safe-directory-tests-and-docs'Junio C Hamano2-3/+31
New tests for the safe.directory mechanism. * sg/safe-directory-tests-and-docs: safe.directory: document and check that it's ignored in the environment t0033-safe-directory: check when 'safe.directory' is ignored t0033-safe-directory: check the error message without matching the trash dir
2022-05-20builtin/repack.c: ensure that `names` is sortedTaylor Blau2-2/+3
The previous patch demonstrates a scenario where the list of packs written by `pack-objects` (and stored in the `names` string_list) is out-of-order, and can thus cause us to delete packs we shouldn't. This patch resolves that bug by ensuring that `names` is sorted in all cases, not just when delete_redundant && pack_everything & ALL_INTO_ONE is true. Because we did sort `names` in that case (which, prior to `--geometric` repacks, was the only time we would actually delete packs, this is only a bug for `--geometric` repacks. It would be sufficient to only sort `names` when `delete_redundant` is set to a non-zero value. But sorting a small list of strings is cheap, and it is defensive against future calls to `string_list_has_string()` on this list. Co-discovered-by: Victoria Dye <vdye@github.com> Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-20t7703: demonstrate object corruption with pack.packSizeLimitTaylor Blau1-0/+47
When doing a `--geometric=<d>` repack, `git repack` determines a splitting point among packs ordered by their object count such that: - each pack above the split has at least `<d>` times as many objects as the next-largest pack by object count, and - the first pack above the split has at least `<d>` times as many object as the sum of all packs below the split line combined `git repack` then creates a pack containing all of the objects contained in packs below the split line by running `git pack-objects --stdin-packs` underneath. Once packs are moved into place, then any packs below the split line are removed, since their objects were just combined into a new pack. But `git repack` tries to be careful to avoid removing a pack that it just wrote, by checking: struct packed_git *p = geometry->pack[i]; if (string_list_has_string(&names, hash_to_hex(p->hash))) continue; in the `delete_redundant` and `geometric` conditional towards the end of `cmd_repack`. But it's possible to trick `git repack` into not recognizing a pack that it just wrote when `names` is out-of-order (which violates `string_list_has_string()`'s assumption that the list is sorted and thus binary search-able). When this happens in just the right circumstances, it is possible to remove a pack that we just wrote, leading to object corruption. Luckily, this is quite difficult to provoke in practice (for a couple of reasons): - we ordinarily write just one pack, so `names` usually contains just one entry, and is thus sorted - when we do write more than one pack (e.g., due to `--max-pack-size`) we have to: (a) write a pack identical to one that already exists, (b) have that pack be below the split line, and (c) have the set of packs written by `pack-objects` occur in an order which tricks `string_list_has_string()`. Demonstrate the above scenario in a failing test, which causes `git repack --geometric` to write a pack which occurs below the split line, _and_ fail to recognize that it wrote that pack. The following patch will fix this bug. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-20repack: respect --keep-pack with geometric repackVictoria Dye2-11/+63
Update 'repack' to ignore packs named on the command line with the '--keep-pack' option. Specifically, modify 'init_pack_geometry()' to treat command line-kept packs the same way it treats packs with an on-disk '.keep' file (that is, skip the pack and do not include it in the 'geometry' structure). Without this handling, a '--keep-pack' pack would be included in the 'geometry' structure. If the pack is *before* the geometry split line (with at least one other pack and/or loose objects present), 'repack' assumes the pack's contents are "rolled up" into another pack via 'pack-objects'. However, because the internally-invoked 'pack-objects' properly excludes '--keep-pack' objects, any new pack it creates will not contain the kept objects. Finally, 'repack' deletes the '--keep-pack' as "redundant" (since it assumes 'pack-objects' created a new pack with its contents), resulting in possible object loss and repository corruption. Add a test ensuring that '--keep-pack' packs are now appropriately handled. Co-authored-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Victoria Dye <vdye@github.com> Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-19t6424: make sure a failed merge preserves local changesJunio C Hamano1-2/+30
We do make sure that an attempt to merge with various forms of local changes will "fail", but the point of stopping the merge is so that we refrain from discarding uncommitted local changes that could be precious. Add a few more checks for each case to make sure the local changes are left intact. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-18builtin/receive-pack.c: remove redundant 'if'Taylor Blau1-2/+1
In c7c4bdeccf (run-command API: remove "env" member, always use "env_array", 2021-11-25), there was a push to replace cld.env = env->v; with strvec_pushv(&cld.env_array, env->v); The conversion in c7c4bdeccf was mostly plug-and-play, with the snag that some instances of strvec_pushv() became guarded with a NULL check to ensure that the second argument was non-NULL. This conversion was slightly over-eager to add a conditional in builtin/receive-pack.c::unpack(), since we know at the point that we add the result of `tmp_objdir_env()` into the child process's environment, that `tmp_objdir` is non-NULL. This follows from the conditional just before our strvec_pushv() call (which returns from the function if `tmp_objdir` was NULL), as well as the call to tmp_objdir_add_as_alternate() just below, which relies on its argument (`tmp_objdir`) being non-NULL. In the meantime, this extra conditional isn't hurting anything. But it is redundant and thus unnecessarily confusing. So let's remove it. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-18fetch: do not run a redundant fetch from submoduleJunio C Hamano2-1/+42
When 7dce19d3 (fetch/pull: Add the --recurse-submodules option, 2010-11-12) introduced the "--recurse-submodule" option, the approach taken was to perform fetches in submodules only once, after all the main fetching (it may usually be a fetch from a single remote, but it could be fetching from a group of remotes using fetch_multiple()) succeeded. Later we added "--all" to fetch from all defined remotes, which complicated things even more. If your project has a submodule, and you try to run "git fetch --recurse-submodule --all", you'd see a fetch for the top-level, which invokes another fetch for the submodule, followed by another fetch for the same submodule. All but the last fetch for the submodule come from a "git fetch --recurse-submodules" subprocess that is spawned via the fetch_multiple() interface for the remotes, and the last fetch comes from the code at the end. Because recursive fetching from submodules is done in each fetch for the top-level in fetch_multiple(), the last fetch in the submodule is redundant. It only matters when fetch_one() interacts with a single remote at the top-level. While we are at it, there is one optimization that exists in dealing with a group of remote, but is missing when "--all" is used. In the former, when the group turns out to be a group of one, instead of spawning "git fetch" as a subprocess via the fetch_multiple() interface, we use the normal fetch_one() code path. Do the same when handing "--all", if it turns out that we have only one remote defined. Reviewed-by: Glen Choo <chooglen@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-16object-file: convert 'switch' back to 'if'Derrick Stolee1-6/+2
This switch statement was recently added to make it clear that unpack_loose_header() returns an enum value, not an int. This adds complications for future developers if that enum gains new values, since that developer would need to add a case statement to this switch for little real value. Instead, we can revert back to an 'if' statement, but make the enum explicit by using "!= ULHR_OK" instead of assuming it has the numerical value zero. Co-authored-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-16bundle.h: make "fd" version of read_bundle_header() publicÆvar Arnfjörð Bjarmason2-4/+6
Change the parse_bundle_header() function to be non-static, and rename it to parse_bundle_header_fd(). The parse_bundle_header() function is already public, and it's a thin wrapper around this function. This will be used by code that wants to pass a fd to the bundle API. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-16remote: allow relative_url() to return an absolute urlDerrick Stolee2-2/+11
When the 'url' parameter was absolute, the previous implementation would concatenate 'remote_url' with 'url'. Instead, we want to return 'url' in this case. The documentation now discusses what happens when supplying two absolute URLs. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-05-16remote: move relative_url()Derrick Stolee3-129/+134
This method was initially written in 63e95beb0 (submodule: port resolve_relative_url from shell to C, 2016-05-15). As we will need similar functionality in the bundle URI feature, extract this to be available in remote.h. The code is almost exactly the same, except for the following trivial differences: * Fix whitespace and wrapping issues with the prototype and argument lists. * Let's call starts_with_dot_{,dot_}slash_native() instead of the functionally identical "starts_with_dot_{,dot_}slash()" wrappers "builtin/submodule--helper.c". Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>