]> Cypherpunks repositories - goredo.git/commitdiff
Hash type for convenience
authorSergey Matveev <stargrave@stargrave.org>
Tue, 6 Aug 2024 15:24:27 +0000 (18:24 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 24 Nov 2024 10:50:52 +0000 (13:50 +0300)
dep.go
depfix.go
hash.go
run.go

diff --git a/dep.go b/dep.go
index 8fe4fffd5fd6c682cb4ec70782f7ad1f44ae2227..b43a583ccf1386d730e7e3f46b0f0229438cf901 100644 (file)
--- a/dep.go
+++ b/dep.go
@@ -78,9 +78,9 @@ func (ifchange *Ifchange) Hash() Hash {
 }
 
 type Dep struct {
-       stamp     Hash
        ifcreates []*Tgt
        ifchanges []*Ifchange
+       stamp     Hash
        build     uuid.UUID
        always    bool
 }
@@ -104,7 +104,7 @@ func always(w io.Writer, fdDepName string) (err error) {
 func stamp(w io.Writer, fdDepName string, hsh Hash) (err error) {
        tracef(CDebug, "stamp: %s <- %s", fdDepName, hsh)
        _, err = io.Copy(w, bytes.NewBuffer(chunkWrite(append(
-               []byte{DepTypeStamp}, []byte(hsh)...,
+               []byte{DepTypeStamp}, hsh[:]...,
        ))))
        return
 }
@@ -112,7 +112,7 @@ func stamp(w io.Writer, fdDepName string, hsh Hash) (err error) {
 func fileHash(fd io.Reader) (Hash, error) {
        h := blake3.New(HashLen, nil)
        if _, err := io.Copy(h, bufio.NewReader(fd)); err != nil {
-               return "", err
+               return HashNull, err
        }
        return Hash(h.Sum(nil)), nil
 }
@@ -131,7 +131,7 @@ func depWrite(w io.Writer, fdDepName, cwd string, tgt *Tgt, hsh Hash) (err error
        if isDir {
                return nil
        }
-       if hsh == "" {
+       if hsh == HashNull {
                hsh, err = fileHash(fd)
                if err != nil {
                        return ErrLine(err)
@@ -140,7 +140,7 @@ func depWrite(w io.Writer, fdDepName, cwd string, tgt *Tgt, hsh Hash) (err error
        _, err = io.Copy(w, bytes.NewBuffer(chunkWrite(bytes.Join([][]byte{
                {DepTypeIfchange},
                inode[:],
-               []byte(hsh),
+               hsh[:],
                []byte(tgt.RelTo(cwd)),
        }, nil))))
        return
@@ -170,7 +170,7 @@ func depsWrite(fdDep *os.File, tgts []*Tgt) error {
                }
                tgtDir := path.Join(cwd, DirPrefix)
                if _, errStat := os.Stat(tgt.a); errStat == nil {
-                       err = ErrLine(depWrite(fdDepW, fdDep.Name(), tgtDir, tgt, ""))
+                       err = ErrLine(depWrite(fdDepW, fdDep.Name(), tgtDir, tgt, HashNull))
                } else {
                        tgtRel := tgt.RelTo(tgtDir)
                        err = ErrLine(depWriteNonex(fdDepW, fdDep.Name(), tgtRel))
index bbe2ae81271c8add23bf26ec7319da2bb7417165..585e93c797e146f05dbc504fdf75a1e932df6de8 100644 (file)
--- a/depfix.go
+++ b/depfix.go
@@ -177,7 +177,7 @@ func depFix(root string) error {
                                                        chunkWrite(bytes.Join([][]byte{
                                                                {DepTypeIfchange},
                                                                inode[:],
-                                                               []byte(hsh),
+                                                               hsh[:],
                                                                []byte(name),
                                                        }, nil))))
                                        case DepTypeIfchangeNonex:
@@ -266,7 +266,7 @@ func depFix(root string) error {
                                                        chunkWrite(bytes.Join([][]byte{
                                                                {DepTypeIfchange},
                                                                inode[:],
-                                                               []byte(hsh),
+                                                               hsh[:],
                                                                []byte(name),
                                                        }, nil))))
                                        }
diff --git a/hash.go b/hash.go
index 420937d0d77767cca653ae3c1f261f9e46e57f9a..6c0e6d1588efca3a0af0b9c7be578b670fa813bf 100644 (file)
--- a/hash.go
+++ b/hash.go
@@ -6,8 +6,10 @@ import (
 
 const HashLen = 32
 
-type Hash string
+type Hash [HashLen]byte
+
+var HashNull Hash
 
 func (h Hash) String() string {
-       return hex.EncodeToString([]byte(h))
+       return hex.EncodeToString(h[:])
 }
diff --git a/run.go b/run.go
index 4921548a2db3998bad2a16ff966e450c29a03e6b..035cd591ee55888df0dac28868a17049545260fc 100644 (file)
--- a/run.go
+++ b/run.go
@@ -359,7 +359,7 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                }
        }
 
-       if err = depWrite(fdDepW, fdDep.Name(), tgtH, doFile, ""); err != nil {
+       if err = depWrite(fdDepW, fdDep.Name(), tgtH, doFile, HashNull); err != nil {
                cleanup()
                return TgtError{tgt, ErrLine(err)}
        }
@@ -739,7 +739,7 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                        }
                } else {
                        var hsh Hash
-                       if hshPrev != "" {
+                       if hshPrev != HashNull {
                                _, err = fd.Seek(0, io.SeekStart)
                                if err != nil {
                                        err = ErrLine(err)