]> Cypherpunks.ru repositories - gocheese.git/blobdiff - refresh.go
Refactor -help, remove -root
[gocheese.git] / refresh.go
index 092bd0125fa9ae555cb8a18b14c89ffd1440967f..b97d2becfac6b71ee10c8466179f496533211910 100644 (file)
@@ -85,11 +85,11 @@ func refreshDir(
        pkgName, filenameGet string,
        gpgUpdate bool,
 ) bool {
-       if _, err := os.Stat(filepath.Join(*Root, pkgName, InternalFlag)); err == nil {
+       if _, err := os.Stat(filepath.Join(Root, pkgName, InternalFlag)); err == nil {
                return true
        }
        c := http.Client{Transport: &PyPIHTTPTransport}
-       dirPath := filepath.Join(*Root, pkgName)
+       dirPath := filepath.Join(Root, pkgName)
        now := time.Now()
 
        var allReleases map[string][]*PkgReleaseInfo
@@ -378,6 +378,7 @@ func refreshDir(
                        }
                        hasher := hasherNew()
                        hasherSHA256 := sha256.New()
+                       hasherBLAKE2b256 := blake2b256New()
                        dst, err := TempFile(dirPath)
                        if err != nil {
                                log.Println("error", r.RemoteAddr, "pypi", filename, err)
@@ -389,6 +390,9 @@ func refreshDir(
                        if hashAlgo != HashAlgoSHA256 {
                                wrs = append(wrs, hasherSHA256)
                        }
+                       if hashAlgo != HashAlgoBLAKE2b256 {
+                               wrs = append(wrs, hasherBLAKE2b256)
+                       }
                        wr := io.MultiWriter(wrs...)
                        if _, err = io.Copy(wr, resp.Body); err != nil {
                                os.Remove(dst.Name())
@@ -439,13 +443,45 @@ func refreshDir(
                                http.Error(w, err.Error(), http.StatusInternalServerError)
                                return false
                        }
-                       if hashAlgo != HashAlgoSHA256 {
-                               hashAlgo = HashAlgoSHA256
-                               digest = hasherSHA256.Sum(nil)
-                               for _, algo := range KnownHashAlgos[1:] {
-                                       os.Remove(path + "." + algo)
-                               }
+
+                       var digestSHA256 []byte
+                       var digestBLAKE2b256 []byte
+                       if hashAlgo == HashAlgoSHA256 {
+                               digestSHA256 = hasher.Sum(nil)
+                       } else {
+                               digestSHA256 = hasherSHA256.Sum(nil)
+                       }
+                       if hashAlgo == HashAlgoBLAKE2b256 {
+                               digestBLAKE2b256 = hasher.Sum(nil)
+                       } else {
+                               digestBLAKE2b256 = hasherBLAKE2b256.Sum(nil)
+                       }
+                       if err = WriteFileSync(
+                               dirPath, path+"."+HashAlgoSHA256,
+                               digestSHA256, mtime,
+                       ); err != nil {
+                               log.Println(
+                                       "error", r.RemoteAddr, "pypi",
+                                       path+"."+HashAlgoSHA256, err,
+                               )
+                               http.Error(w, err.Error(), http.StatusInternalServerError)
+                               return false
+                       }
+                       if err = WriteFileSync(
+                               dirPath, path+"."+HashAlgoBLAKE2b256,
+                               digestBLAKE2b256, mtime,
+                       ); err != nil {
+                               log.Println(
+                                       "error", r.RemoteAddr, "pypi",
+                                       path+"."+HashAlgoBLAKE2b256, err,
+                               )
+                               http.Error(w, err.Error(), http.StatusInternalServerError)
+                               return false
+                       }
+                       for _, algo := range KnownHashAlgos[2:] {
+                               os.Remove(path + "." + algo)
                        }
+                       digest = nil
                }
                if mtimeExists {
                        stat, err := os.Stat(path)
@@ -498,6 +534,9 @@ func refreshDir(
                }
 
        GPGSigSkip:
+               if digest == nil {
+                       continue
+               }
                path = path + "." + hashAlgo
                stat, err := os.Stat(path)
                if err == nil &&