git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] travis-ci: check that all build artifacts are .gitignore-d

From
SZEDER Gábor <szeder.dev@gmail.com>
Date
Jan 2, 2018, 23:12 UTC
Message-ID
<CAM0VKjmj7VGr5rcON=2VEug-fGtBrvNqhopH9x7pjB237V796g@mail.gmail.com>
In-Reply-To
<D977F37C-D0E5-4EEB-98B4-693A5179F7B1@gmail.com>
On Tue, Jan 2, 2018 at 8:40 PM, Lars Schneider <larsxschneider@gmail.com> wrote:
Show 36 quoted lines
>
>> On 31 Dec 2017, at 17:02, SZEDER Gábor <szeder.dev@gmail.com> wrote:
>>
>> Every once in a while our explicit .gitignore files get out of sync
>> when our build process learns to create new artifacts, like test
>> helper executables, but the .gitignore files are not updated
>> accordingly.
>>
>> Use Travis CI to help catch such issues earlier: check that there are
>> no untracked files at the end of any build jobs building Git (i.e. the
>> 64 bit Clang and GCC Linux and OSX build jobs, plus the GETTEXT_POISON
>> and 32 bit Linux build jobs) or its documentation, and fail the build
>> job if there are any present.
>>
>> Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
>> ---
>> ci/lib-travisci.sh       | 10 ++++++++++
>> ci/run-linux32-docker.sh |  2 ++
>> ci/run-tests.sh          |  2 ++
>> ci/test-documentation.sh |  6 ++++++
>> 4 files changed, 20 insertions(+)
>>
>> diff --git a/ci/lib-travisci.sh b/ci/lib-travisci.sh
>> index 1543b7959..07f27c727 100755
>> --- a/ci/lib-travisci.sh
>> +++ b/ci/lib-travisci.sh
>> @@ -67,6 +67,16 @@ skip_good_tree () {
>>       exit 0
>> }
>>
>> +check_unignored_build_artifacts ()
>> +{
>> +     ! git ls-files --other --exclude-standard --error-unmatch \
>> +             -- ':/*' 2>/dev/null ||
>
> What does "-- ':/*'" do?

It makes the whole thing work :) ':/*' is a pattern matching all paths, and '--others --exclude-standard' limit the command to list files that are both untracked and unignored. '--error-unmatch' causes the command to error out if any of the files given on the command line doesn't match anything in the working tree, in this case if there are no untracked-unignored files. Without a path given on the cmdline '--error-unmatch' has basically no effect[1].

In a clean worktree:
  $ git ls-files --other --exclude-standard --error-unmatch ; echo $?
  0
  $ git ls-files --other --exclude-standard --error-unmatch ':/*' ; echo $?
  error: pathspec ':/*' did not match any file(s) known to git.
  Did you forget to 'git add'?
  1

The disambiguating double-dash is not really necessary, because the :/* pattern can't be confused with any --options, but doesn't hurt, either.

> Plus, why do you redirect stderr?

To prevent the above error message from appearing in the trace log of a successful build.

[1] - Which makes me think whether we should consider '--error-unmatch'
      without any paths given on the command line as an error.
      On a related note: that error message doesn't seem to make much
      sense with '--other'...
Previous: Lars SchneiderNext: Lars Schneider
Message 6 of 7 in “Travis CI: check unignored build artifacts”
  1. 0/2 Travis CI: check unignored build artifactsSZEDER Gábor, Dec 31, 2017
  2. 1/2 travis-ci: don't store P4 and Git LFS in the working treeSZEDER Gábor, Dec 31, 2017
  3. Lars SchneiderJan 2, 2018
  4. 2/2 travis-ci: check that all build artifacts are .gitignore-dSZEDER Gábor, Dec 31, 2017
  5. Lars SchneiderJan 2, 2018
  6. SZEDER GáborJan 2, 2018
  7. Lars SchneiderJan 3, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.