doc/news.texi | 8 ++++++++ ood.go | 23 +++++++++++++++++++++++ t/goredo-build-uuid-for-fdood.t | 20 ++++++++++++++++++++ usage.go | 2 +- diff --git a/doc/news.texi b/doc/news.texi index 34d3156f3a07c8f589541eaeaa0f32531f4a25a780d828038bd410874c13fbd9..c907f128c8dfce0b214553d665de025b02b2cab880e595b138e97a8cade35d04 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 b3ee26e62307f3e1b2fd35fe2604ef635dec587300445276edd0ffa52506e95b..feb800c5f4417946d963cc76e927a453de95446416aae389f2c6aaec0bad5800 100644 --- a/ood.go +++ b/ood.go @@ -90,6 +90,21 @@ } 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 @@ panic(err) } _, 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 0000000000000000000000000000000000000000..eec3f2543cabd4c6c23965a7a1aa37e49150c0c68d96817f99257305a7da6391 --- /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 <