type BuildLogJob struct {
tgt *Tgt
+ rec map[string][]string
started time.Time
exitCode int
- rec map[string][]string
}
type ByStarted []*BuildLogJob
if dep.rel == tgt.rel {
continue
}
- rec, err := parseBuildLogRec(dep)
+ var rec map[string][]string
+ rec, err = parseBuildLogRec(dep)
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
continue
if rec["Build"][0] != buildLogRec["Build"][0] {
continue
}
- started, err := tai64n.Decode(rec["Started"][0])
+ var started time.Time
+ started, err = tai64n.Decode(rec["Started"][0])
if err != nil {
return ErrLine(err)
}
}
type Dep struct {
- build uuid.UUID
- always bool
stamp Hash
ifcreates []*Tgt
ifchanges []*Ifchange
+ build uuid.UUID
+ always bool
}
-func ifcreate(w io.Writer, fdDepName string, tgt string) (err error) {
+func ifcreate(w io.Writer, fdDepName, tgt string) (err error) {
tracef(CDebug, "ifcreate: %s <- %s", fdDepName, tgt)
_, err = io.Copy(w, bytes.NewBuffer(chunkWrite(append(
[]byte{DepTypeIfcreate}, []byte(tgt)...,
return
}
-func chunkRead(data []byte) (typ byte, chunk []byte, tail []byte, err error) {
+func chunkRead(data []byte) (typ byte, chunk, tail []byte, err error) {
if len(data) < 2 {
err = errors.New("no length")
return
}
defer dir.Close()
for {
- entries, err := dir.ReadDir(1 << 10)
+ var entries []fs.DirEntry
+ entries, err = dir.ReadDir(1 << 10)
if err != nil {
if err == io.EOF {
break
}
tracef(CDebug, "depfix: checking %s/%s", root, entry.Name())
fdDepPath := path.Join(redoDir, entry.Name())
- data, err := os.ReadFile(fdDepPath)
+ var data []byte
+ data, err = os.ReadFile(fdDepPath)
if err != nil {
return ErrLine(err)
}
- fdDep, err := tempfile(redoDir, entry.Name())
+ var fdDep *os.File
+ fdDep, err = tempfile(redoDir, entry.Name())
if err != nil {
return ErrLine(err)
}
if _, err = depParse(NewTgt(""), data); err != nil {
return ErrLine(err)
}
- build, data, err := depHeadParse(data)
+ var build uuid.UUID
+ build, data, err = depHeadParse(data)
if err != nil {
return ErrLine(err)
}
defer os.Remove(fdDepPath)
fdDepPath = fdDepPath[:len(fdDepPath)-4] + DepSuffix
r := recfile.NewReader(bytes.NewReader(data))
- m, err := r.NextMap()
+ var m map[string]string
+ m, err = r.NextMap()
if err != nil {
return err
}
return ErrLine(err)
}
for {
- m, err := r.NextMap()
+ m, err = r.NextMap()
if err != nil {
if errors.Is(err, io.EOF) {
break
type ErrLineErr struct {
err error
file string
- line int
function string
+ line int
}
func (err ErrLineErr) Error() string {
errLine.function = frame.Function + "," + errLine.function
return errLine
}
- return ErrLineErr{err, frame.File, frame.Line, frame.Function}
+ return ErrLineErr{
+ err: err,
+ file: frame.File,
+ line: frame.Line,
+ function: frame.Function,
+ }
}
close(okChecker)
}()
for _, tgt := range tgts {
- if _, ok := seen[tgt.rel]; ok {
+ if _, exists := seen[tgt.rel]; exists {
tracef(CDebug, "%s was already build as a dependant", tgt)
continue
}
if _, err = fd.Seek(0, io.SeekStart); err != nil {
log.Fatal(err)
}
- tgtsRaw, err := io.ReadAll(bufio.NewReader(fd))
+ var tgtsRaw []byte
+ tgtsRaw, err = io.ReadAll(bufio.NewReader(fd))
if err != nil {
log.Fatal(err)
}
OODCache[tgt.rel] = ood
return ood, nil
}
- if err != nil {
- return true, TgtError{tgt, ErrLine(err)}
- }
+ return true, TgtError{tgt, ErrLine(err)}
}
DepCache[tgt.rel] = dep
}
tracef(CDebug, "ood: %s%s -> %s: same inode", indent, tgt, ifchange.tgt)
} else {
tracef(CDebug, "ood: %s%s -> %s: inode differs", indent, tgt, ifchange.tgt)
- fd, err := os.Open(ifchange.tgt.a)
+ var fd *os.File
+ fd, err = os.Open(ifchange.tgt.a)
if err != nil {
return ood, TgtError{tgt, ErrLine(err)}
}
- hsh, err := fileHash(fd)
+ var hsh Hash
+ hsh, err = fileHash(fd)
fd.Close()
if err != nil {
return ood, TgtError{tgt, ErrLine(err)}
continue
}
- if _, ok := seen[ifchange.tgt.rel]; ok {
+ if _, exists := seen[ifchange.tgt.rel]; exists {
tracef(CDebug, "ood: %s%s -> %s: was always built", indent, tgt, ifchange.tgt)
OODCache[ifchange.tgt.rel] = false
continue
if _, err = FdOODTgts.Seek(0, io.SeekEnd); err != nil {
log.Fatal(err)
}
- if _, err := FdOODTgts.WriteString(tgt.a + "\x00"); err != nil {
+ if _, err = FdOODTgts.WriteString(tgt.a + "\x00"); err != nil {
log.Fatal(err)
}
flock.Type = unix.F_UNLCK
"syscall"
"time"
+ "github.com/google/uuid"
"go.cypherpunks.su/recfile/v2"
"go.cypherpunks.su/tai64n/v3"
"golang.org/x/sys/unix"
}
type RunError struct {
+ Err error
Tgt *Tgt
- DoFile string
Started *time.Time
Finished *time.Time
- Err error
+ DoFile string
}
func (e *RunError) Name() string {
if FileExists(pth) {
return nil
}
- return os.MkdirAll(pth, os.FileMode(0777))
+ return os.MkdirAll(pth, os.FileMode(0o777))
}
func isModified(dep *Dep, tgt *Tgt) (
fdLock, err := os.OpenFile(
path.Join(redoDir, tgtT+LockSuffix),
os.O_WRONLY|os.O_TRUNC|os.O_CREATE,
- os.FileMode(0666),
+ os.FileMode(0o666),
)
if err != nil {
return TgtError{tgt, ErrLine(err)}
lockRelease := func() {
tracef(CLock, "LOCK_UN: %s", fdLock.Name())
flock.Type = unix.F_UNLCK
- if err := unix.FcntlFlock(fdLock.Fd(), unix.F_SETLK, &flock); err != nil {
+ if err = unix.FcntlFlock(fdLock.Fd(), unix.F_SETLK, &flock); err != nil {
log.Fatalln(err, fdLock.Name())
}
fdLock.Close()
defer Jobs.Done()
tracef(CLock, "LOCK_EX: %s", fdLock.Name())
LockAgain:
- if err := unix.FcntlFlock(fdLock.Fd(), unix.F_SETLKW, &flock); err != nil {
+ if err = unix.FcntlFlock(fdLock.Fd(), unix.F_SETLKW, &flock); err != nil {
if errors.Is(err, unix.EDEADLK) {
time.Sleep(10 * time.Millisecond)
goto LockAgain
log.Fatal(err)
}
}
- build, err := depBuildRead(tgt.dep)
+ var build uuid.UUID
+ build, err = depBuildRead(tgt.dep)
if err == nil {
if build != BuildUUID {
err = errors.New("was not built: build differs")
runErr := RunError{Tgt: tgt}
// Determine basename and DIRPREFIX
{
- doFileRelPath, upLevels, err := findDo(fdDepW, fdDep.Name(), tgtH, tgtT)
+ var doFileRelPath string
+ var upLevels int
+ doFileRelPath, upLevels, err = findDo(fdDepW, fdDep.Name(), tgtH, tgtT)
if err != nil {
cleanup()
return TgtError{tgt, ErrLine(err)}
fdStderr, err = os.OpenFile(
path.Join(redoDir, tgtT+LogSuffix),
os.O_WRONLY|os.O_CREATE|os.O_TRUNC,
- os.FileMode(0666),
+ os.FileMode(0o666),
)
if err != nil {
cleanup()
var exitErr *exec.ExitError
started := time.Now()
runErr.Started = &started
- fdStdout, err = os.OpenFile(fdStdout.Name(), os.O_RDWR, os.FileMode(0666))
+ fdStdout, err = os.OpenFile(fdStdout.Name(), os.O_RDWR, os.FileMode(0o666))
if err != nil {
if fdStderr != nil {
fdStderr.Close()
return
}
cmd.Stdout = fdStdout
- fdDep, err = os.OpenFile(fdDep.Name(), os.O_WRONLY|os.O_APPEND, os.FileMode(0666))
+ fdDep, err = os.OpenFile(fdDep.Name(), os.O_WRONLY|os.O_APPEND, os.FileMode(0o666))
if err != nil {
if fdStderr != nil {
fdStderr.Close()
if fdStderr, err = os.OpenFile(
logRecPath,
os.O_WRONLY|os.O_CREATE|os.O_TRUNC,
- os.FileMode(0666),
+ os.FileMode(0o666),
); err == nil {
fields := []recfile.Field{
{Name: "Build", Value: BuildUUID.String()},
}
// Was $1 touched?
- if inode, err := inodeFromFileByPath(tgt.a); err == nil {
+ if inode, errInode := inodeFromFileByPath(tgt.a); errInode == nil {
if inodePrev == nil {
runErr.Err = Err1WasTouched
errs <- runErr
import (
"io"
+ "io/fs"
"os"
"path"
"strings"
}
pth := path.Join(root, entry.Name())
if entry.Name() == RedoDir {
- redoDir, err := os.Open(pth)
+ var redoDir *os.File
+ redoDir, err = os.Open(pth)
if err != nil {
return ErrLine(err)
}
- redoEntries, err := redoDir.ReadDir(0)
+ var redoEntries []fs.DirEntry
+ redoEntries, err = redoDir.ReadDir(0)
redoDir.Close()
if err != nil {
return ErrLine(err)
if err != nil {
return nil, err
}
- err = os.Chmod(tmp.Name(), os.FileMode(0666&^UmaskCur))
+ err = os.Chmod(tmp.Name(), os.FileMode(0o666&^UmaskCur))
if err != nil {
tmp.Close()
return nil, err