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

[PATCH] Documentation/Makefile: fix lint-docs mkdir dependency

From
Jeff King <peff@peff.net>
Date
Oct 26, 2021, 07:31 UTC
Message-ID
<YXeu4Hl2cmIPqobd@coredump.intra.peff.net>

Since 8650c6298c (doc lint: make "lint-docs" non-.PHONY, 2021-10-15), we put the output for gitlink linter into .build/lint-docs/gitlink. There are order-only dependencies to create the sequence of subdirs like:

  .build/lint-docs: | .build
          $(QUIET)mkdir $@
  .build/lint-docs/gitlink: | .build/lint-docs
          $(QUIET)mkdir $@

where each level has to depend on the prior one (since the parent directory must exist for us to create something inside it). But the "howto" and "config" subdirectories of gitlink have the wrong dependency; they depend on "lint-docs", not "lint-docs/gitlink".

This usually works out, because the LINT_DOCS_GITLINK targets which depend on "gitlink/howto" also depend on just "gitlink", so the directory gets created anyway. But since we haven't given make an explicit ordering, things can racily happen out of order.

If you stick a "sleep 1" in the rule to build "gitlink" like this:
   ## Lint: gitlink
   .build/lint-docs/gitlink: | .build/lint-docs
  -	$(QUIET)mkdir $@
  +	$(QUIET)sleep 1 && mkdir $@

then "make clean; make lint-docs" will fail reliably. Or you can see it as-is just by building the directory in isolation:

  $ make clean
  [...]
  $ make .build/lint-docs/gitlink/howto
      GEN mergetools-list.made
      GEN cmd-list.made
      GEN doc.dep
      SUBDIR ../
  make[1]: 'GIT-VERSION-FILE' is up to date.
      SUBDIR ../
  make[1]: 'GIT-VERSION-FILE' is up to date.
  mkdir: cannot create directory ‘.build/lint-docs/gitlink/howto’: No such file or directory
  make: *** [Makefile:476: .build/lint-docs/gitlink/howto] Error 1
The fix is easy: we just need to depend on the correct parent directory.
Signed-off-by: Jeff King <peff@peff.net>
---
The problem starts in ab/fix-make-lint-docs, which is in master.

I wasn't able to trigger the problem locally even with running 'make clean; make lint-docs' in a loop, but I did see it in the wild in a CI documentation job:

  https://github.com/peff/git/runs/4005766641?check_suite_focus=true#step:4:60

It would have been a lot easier to diagnose from the CI output if the mkdir lines weren't silent. I.e., if we had a $(QUIET_MKDIR) which printed "MKDIR $@" rather than nothing at all.

 Documentation/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Documentation/Makefile b/Documentation/Makefile
index 911b6bf79c..ed656db2ae 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -472,9 +472,9 @@ print-man1:
 ## Lint: gitlink
 .build/lint-docs/gitlink: | .build/lint-docs
 	$(QUIET)mkdir $@
-.build/lint-docs/gitlink/howto: | .build/lint-docs
+.build/lint-docs/gitlink/howto: | .build/lint-docs/gitlink
 	$(QUIET)mkdir $@
-.build/lint-docs/gitlink/config: | .build/lint-docs
+.build/lint-docs/gitlink/config: | .build/lint-docs/gitlink
 	$(QUIET)mkdir $@
 LINT_DOCS_GITLINK = $(patsubst %.txt,.build/lint-docs/gitlink/%.ok,$(HOWTO_TXT) $(DOC_DEP_TXT))
 $(LINT_DOCS_GITLINK): | .build/lint-docs/gitlink
-- 
2.33.1.1387.g97d4a0c3a8
Next: Ævar Arnfjörð Bjarmason
Message 1 of 9 in “Documentation/Makefile: fix lint-docs mkdir dependency”
  1. Documentation/Makefile: fix lint-docs mkdir dependencyJeff King, Oct 26, 2021
  2. Ævar Arnfjörð BjarmasonOct 26, 2021
  3. Jeff KingOct 26, 2021
  4. Junio C HamanoOct 28, 2021
  5. Ævar Arnfjörð BjarmasonOct 28, 2021
  6. Jeff KingOct 28, 2021
  7. Junio C HamanoOct 28, 2021
  8. Jeff KingOct 28, 2021
  9. Ævar Arnfjörð BjarmasonOct 28, 2021

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.