]> Cypherpunks.ru repositories - gocheese.git/blobdiff - fileutils.go
Update dependencies
[gocheese.git] / fileutils.go
index 70d3f1123840718924d05f4817cdabdcf6034aa6..03b852e011a2e9cbfcbd2af84e9fe3fd78f62f0f 100644 (file)
@@ -1,6 +1,6 @@
 /*
 GoCheese -- Python private package repository and caching proxy
-Copyright (C) 2019 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2019-2021 Sergey Matveev <stargrave@stargrave.org>
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -24,6 +24,8 @@ import (
        "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)
@@ -32,6 +34,9 @@ func TempFile(dir string) (*os.File, error) {
 }
 
 func DirSync(dirPath string) error {
+       if NoSync {
+               return nil
+       }
        fd, err := os.Open(dirPath)
        if err != nil {
                return err
@@ -54,10 +59,12 @@ func WriteFileSync(dirPath, filePath string, data []byte) error {
                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 {