]> Cypherpunks.ru repositories - goredo.git/blobdiff - dep.go
Another small performance optimisation
[goredo.git] / dep.go
diff --git a/dep.go b/dep.go
index 279e55dddbc1a736e950b8788394121651763307..b4dd7a1a54c22b718f1cc4a2105733feac91ba9a 100644 (file)
--- a/dep.go
+++ b/dep.go
@@ -67,11 +67,12 @@ func chunkWrite(in []byte) (out []byte) {
 
 type Ifchange struct {
        tgt  *Tgt
-       meta string
+       meta [InodeLen + HashLen]byte
 }
 
-func (ifchange *Ifchange) Inode() Inode {
-       return Inode(ifchange.meta[:InodeLen])
+func (ifchange *Ifchange) Inode() *Inode {
+       inode := Inode(ifchange.meta[:InodeLen])
+       return &inode
 }
 
 func (ifchange *Ifchange) Hash() Hash {
@@ -140,7 +141,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},
-               []byte(inode),
+               inode[:],
                []byte(hsh),
                []byte(tgt.RelTo(cwd)),
        }, nil))))
@@ -226,20 +227,19 @@ func depBinIfchangeParse(tgt *Tgt, chunk []byte) (*Ifchange, string, error) {
        if len(chunk) < InodeLen+HashLen+1 {
                return nil, "", errors.New("too short \"ifchange\" format")
        }
-       name := string(chunk[InodeLen+HashLen:])
-       meta := string(chunk[:InodeLen+HashLen])
 
        tgtH, _ := pathSplit(tgt.a)
-       ifchange := &Ifchange{tgt: NewTgt(path.Join(tgtH, name)), meta: meta}
-       cachedFound := false
+       name := string(chunk[InodeLen+HashLen:])
+       ifchange := &Ifchange{
+               tgt:  NewTgt(path.Join(tgtH, name)),
+               meta: ([InodeLen + HashLen]byte)(chunk),
+       }
        for _, cached := range IfchangeCache[ifchange.tgt.rel] {
                if ifchange.meta == cached.meta {
-                       ifchange = cached
-                       cachedFound = true
-                       break
+                       return cached, name, nil
                }
        }
-       if IfchangeCache != nil && !cachedFound {
+       if IfchangeCache != nil {
                IfchangeCache[ifchange.tgt.rel] = append(IfchangeCache[ifchange.tgt.rel], ifchange)
        }
        return ifchange, name, nil