########################################################################
cd packages
for pkg in * ; do
- # Assume gocheese -gpgupdate /gpgupdate/
+ # Assume running:
+ # GOCHEESE_NO_SYNC=1 gocheese -bind "[::1]:8080" -gpgupdate /gpgupdate/
curl http://localhost:8080/gpgupdate/$pkg/ > /dev/null
done
It is advisable to run GoCheese under some kind of
@url{http://cr.yp.to/daemontools.html, daemontools}.
+
+@env{$GOCHEESE_NO_SYNC=1} environment variable turns off filesystem
+synchronization calls, that could be useful when massively updating the
+database.
"time"
)
+var NoSync = os.Getenv("GOCHEESE_NO_SYNC") == "1"
+
func TempFile(dir string) (*os.File, error) {
// Assume that probability of suffix collision is negligible
suffix := strconv.FormatInt(time.Now().UnixNano()+int64(os.Getpid()), 16)
}
func DirSync(dirPath string) error {
+ if NoSync {
+ return nil
+ }
fd, err := os.Open(dirPath)
if err != nil {
return err
dst.Close()
return err
}
- if err = dst.Sync(); err != nil {
- os.Remove(dst.Name())
- dst.Close()
- return err
+ if !NoSync {
+ if err = dst.Sync(); err != nil {
+ os.Remove(dst.Name())
+ dst.Close()
+ return err
+ }
}
dst.Close()
if err = os.Rename(dst.Name(), filePath); err != nil {
http.Error(w, "digest mismatch", http.StatusBadGateway)
return false
}
- if err = dst.Sync(); err != nil {
- os.Remove(dst.Name())
- dst.Close()
- log.Println("error", r.RemoteAddr, "pypi", filename, err)
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return false
+ if !NoSync {
+ if err = dst.Sync(); err != nil {
+ os.Remove(dst.Name())
+ dst.Close()
+ log.Println("error", r.RemoteAddr, "pypi", filename, err)
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return false
+ }
}
if err = dst.Close(); err != nil {
log.Println("error", r.RemoteAddr, "pypi", filename, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
- if err = dst.Sync(); err != nil {
- log.Println("error", r.RemoteAddr, filename, err)
- os.Remove(dst.Name())
- dst.Close()
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
+ if !NoSync {
+ if err = dst.Sync(); err != nil {
+ log.Println("error", r.RemoteAddr, filename, err)
+ os.Remove(dst.Name())
+ dst.Close()
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
}
dst.Close()
digest := hasher.Sum(nil)