dep.go | 11 +++++++++-- doc/news.texi | 11 +++++++++++ main.go | 1 + run.go | 2 ++ t/goredo-deps-after-cd.t | 25 +++++++++++++++++++++++++ usage.go | 2 +- diff --git a/dep.go b/dep.go index a737c15561f597d637b036927637edceaf55548591f618099e76338f2b5f47d6..9389bee14cf0971c5f5b1c59506a890c129a01145c794da999c538ebbd37dbf6 100644 --- a/dep.go +++ b/dep.go @@ -32,7 +32,10 @@ "go.cypherpunks.ru/recfile" "lukechampine.com/blake3" ) -var DirPrefix string +var ( + DirPrefix string + DepCwd string +) func recfileWrite(fdDep *os.File, fields ...recfile.Field) error { w := recfile.NewWriter(fdDep) @@ -122,7 +125,11 @@ tgtAbs, err := filepath.Abs(tgt) if err != nil { panic(err) } - tgtDir := path.Join(Cwd, DirPrefix) + cwd := Cwd + if DepCwd != "" && Cwd != DepCwd { + cwd = DepCwd + } + tgtDir := path.Join(cwd, DirPrefix) tgtRel, err := filepath.Rel(tgtDir, tgtAbs) if err != nil { panic(err) diff --git a/doc/news.texi b/doc/news.texi index 0d9397790ef465bc83f83e386673e88f120da2d01aaaa9e08dc987f2f8203e29..0c74f8bd33a2e361ad9325e7fd9b9996c73c9d16776e48eb8dcf716c4759fc18 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -1,6 +1,17 @@ @node News @unnumbered News +@anchor{Release 1.8.0} +@section Release 1.8.0 +@itemize +@item + Fixed possibly wrong relative path record of the dependency, when + redo commands are run in different directory from the @file{.do}. +@item + Fixed possible failing in @command{redo-sources} if no @file{.dep} + is found. +@end itemize + @anchor{Release 1.7.0} @section Release 1.7.0 @itemize diff --git a/main.go b/main.go index c5d044ca08a5af683cdda1da3ee9a7e85b589b84f98771e2cba3f531970e8b6c..74d7d5d65224ba616137ee9ebf4a090081202847b96a1a74537b2ffa05e25ef8 100644 --- a/main.go +++ b/main.go @@ -123,6 +123,7 @@ panic(err) } } DirPrefix = os.Getenv(EnvDirPrefix) + DepCwd = os.Getenv(EnvDepCwd) if *flagStderrKeep { mustSetenv(EnvStderrKeep, "1") diff --git a/run.go b/run.go index 04fc60e95e354542d451c993d46afa6ff8567e6c021650b4f3b80fa6ba39d724..63d489080e16b62d325998d0f616d5e09e012b31e808571a34b7c0294f3c6c96 100644 --- a/run.go +++ b/run.go @@ -42,6 +42,7 @@ const ( EnvDepFd = "REDO_DEP_FD" EnvDirPrefix = "REDO_DIRPREFIX" + EnvDepCwd = "REDO_DEP_CWD" EnvBuildUUID = "REDO_BUILD_UUID" EnvStderrPrefix = "REDO_STDERR_PREFIX" EnvTrace = "REDO_TRACE" @@ -421,6 +422,7 @@ } cmd.ExtraFiles = append(cmd.ExtraFiles, fdDep) cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvDepFd, 3+fdNum)) fdNum++ + cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvDepCwd, cwd)) defer func() { jsRelease(shCtx, jsToken) diff --git a/t/goredo-deps-after-cd.t b/t/goredo-deps-after-cd.t new file mode 100755 index 0000000000000000000000000000000000000000..f3c3fab10d5c1f71c43254167953dfc607921bf61666024603fd22e99480d5bd --- /dev/null +++ b/t/goredo-deps-after-cd.t @@ -0,0 +1,25 @@ +#!/bin/sh + +testname=`basename "$0"` +test_description="Check that dependencies have correct relative path after cd" +. $SHARNESS_TEST_SRCDIR/sharness.sh + +tmp=`mktemp -d` +trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT + +cd $tmp +mkdir -p bin src +cat > bin/default.do < src/src.go + +test_expect_success Build "redo bin/cmd" +stat1=`stat bin/cmd` +test_expect_success Rebuild "redo-ifchange bin/cmd" +stat2=`stat bin/cmd` +test_expect_success "Was not rebuild" '[ "$stat1" = "$stat2" ]' + +test_done diff --git a/usage.go b/usage.go index 10674a017c9b024b24e3cc6843cf19735de4af5d071f699bd32bbc98f774b55d..43db2324ce5294ac84fa4f2b06184e9a2c12827d154c50c47f3544c74ce19954 100644 --- a/usage.go +++ b/usage.go @@ -24,7 +24,7 @@ "os" ) const ( - Version = "1.7.0" + Version = "1.8.0" Warranty = `Copyright (C) 2020-2021 Sergey Matveev This program is free software: you can redistribute it and/or modify