From 2fe7eaeac99947f761f4665893c09db31d6b3a4b Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 27 Oct 2021 10:19:29 +0300 Subject: [PATCH] BuildUUID check regression for known OOD targets --- doc/news.texi | 8 ++++++++ ood.go | 23 +++++++++++++++++++++++ t/goredo-build-uuid-for-fdood.t | 20 ++++++++++++++++++++ usage.go | 2 +- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100755 t/goredo-build-uuid-for-fdood.t diff --git a/doc/news.texi b/doc/news.texi index a28696e..f83bbc1 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -1,6 +1,14 @@ @node News @unnumbered News +@anchor{Release 1_18_0} +@section Release 1.18.0 +@itemize +@item + Fix regression of known OODs passing since 1.3.0, that leads to + rebuilding of already built targets. +@end itemize + @anchor{Release 1_17_0} @section Release 1.17.0 @itemize diff --git a/ood.go b/ood.go index 9dfed34..c455a3b 100644 --- a/ood.go +++ b/ood.go @@ -90,6 +90,21 @@ func isSrc(cwd, tgt string) bool { return true } +func isOODByBuildUUID(cwd, tgtOrig string) bool { + cwd, tgt := cwdAndTgt(path.Join(cwd, tgtOrig)) + depPath := path.Join(cwd, RedoDir, tgt+DepSuffix) + fdDep, err := os.Open(depPath) + if err != nil { + return true + } + depInfo, err := depRead(fdDep) + fdDep.Close() + if err != nil || depInfo.build != BuildUUID { + return true + } + return false +} + func isOOD(cwd, tgtOrig string, level int, seen map[string]struct{}) (bool, error) { indent := strings.Repeat(". ", level) trace(CDebug, "ood: %s%s checking", indent, tgtOrig) @@ -215,6 +230,14 @@ func isOODWithTrace( } _, ood := OODTgts[p] if ood { + if !isOODByBuildUUID(cwd, tgtOrig) { + trace( + CDebug, + "ood: %s%s -> already built", + strings.Repeat(". ", level), tgtOrig, + ) + return false, nil + } trace( CDebug, "ood: %s%s true, external decision", diff --git a/t/goredo-build-uuid-for-fdood.t b/t/goredo-build-uuid-for-fdood.t new file mode 100755 index 0000000..db952a5 --- /dev/null +++ b/t/goredo-build-uuid-for-fdood.t @@ -0,0 +1,20 @@ +#!/bin/sh + +testname=`basename "$0"` +test_description="Passed known OOD targets must not skip BuildUUID check" +. $SHARNESS_TEST_SRCDIR/sharness.sh +export REDO_TOP_DIR="`pwd`" REDO_NO_PROGRESS=1 + +echo redo-ifchange l3 l2 > l1.do +echo redo-ifchange l3 > l2.do +cat > l3.do <