"lukechampine.com/blake3"
)
-var DirPrefix string
+var (
+ DirPrefix string
+ DepCwd string
+)
func recfileWrite(fdDep *os.File, fields ...recfile.Field) error {
w := recfile.NewWriter(fdDep)
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)
@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
}
}
DirPrefix = os.Getenv(EnvDirPrefix)
+ DepCwd = os.Getenv(EnvDepCwd)
if *flagStderrKeep {
mustSetenv(EnvStderrKeep, "1")
const (
EnvDepFd = "REDO_DEP_FD"
EnvDirPrefix = "REDO_DIRPREFIX"
+ EnvDepCwd = "REDO_DEP_CWD"
EnvBuildUUID = "REDO_BUILD_UUID"
EnvStderrPrefix = "REDO_STDERR_PREFIX"
EnvTrace = "REDO_TRACE"
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)
--- /dev/null
+#!/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 <<EOF
+cd ../src
+redo-ifchange src.go
+echo bla bla bla
+EOF
+echo source code > 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
)
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