]> Cypherpunks.ru repositories - gocheese.git/blobdiff - gocheese.go
Send whole buffered response, preventing chunked encoding
[gocheese.git] / gocheese.go
index 02aa225f252bbbd2461b298b6f59be5d9b942f9e..712783a854ca7983503ba0e4904edcea90206d1f 100644 (file)
@@ -107,8 +107,8 @@ func refreshDir(w http.ResponseWriter, r *http.Request, dir, filenameGet string)
                http.Error(w, err.Error(), http.StatusBadGateway)
                return false
        }
-       defer resp.Body.Close()
        body, err := ioutil.ReadAll(resp.Body)
+       resp.Body.Close()
        if err != nil {
                http.Error(w, err.Error(), http.StatusBadGateway)
                return false
@@ -183,11 +183,10 @@ func refreshDir(w http.ResponseWriter, r *http.Request, dir, filenameGet string)
                _, err = os.Stat(path)
                if err == nil {
                        continue
-               } else {
-                       if !os.IsNotExist(err) {
-                               http.Error(w, err.Error(), http.StatusInternalServerError)
-                               return false
-                       }
+               }
+               if !os.IsNotExist(err) {
+                       http.Error(w, err.Error(), http.StatusInternalServerError)
+                       return false
                }
                log.Println(r.RemoteAddr, "pypi touch", filename)
                if err = ioutil.WriteFile(path, digest, os.FileMode(0666)); err != nil {
@@ -205,17 +204,19 @@ func listRoot(w http.ResponseWriter, r *http.Request) {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }
-       w.Write([]byte(fmt.Sprintf(HTMLBegin, "root", "root")))
+       var result bytes.Buffer
+       result.WriteString(fmt.Sprintf(HTMLBegin, "root", "root"))
        for _, file := range files {
                if file.Mode().IsDir() {
-                       w.Write([]byte(fmt.Sprintf(
+                       result.WriteString(fmt.Sprintf(
                                HTMLElement,
                                *refreshURLPath+file.Name()+"/",
                                file.Name(),
-                       )))
+                       ))
                }
        }
-       w.Write([]byte(HTMLEnd))
+       result.WriteString(HTMLEnd)
+       w.Write(result.Bytes())
 }
 
 func listDir(w http.ResponseWriter, r *http.Request, dir string, autorefresh bool) {
@@ -233,7 +234,8 @@ func listDir(w http.ResponseWriter, r *http.Request, dir string, autorefresh boo
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }
-       w.Write([]byte(fmt.Sprintf(HTMLBegin, dir, dir)))
+       var result bytes.Buffer
+       result.WriteString(fmt.Sprintf(HTMLBegin, dir, dir))
        var data []byte
        var filenameClean string
        for _, file := range files {
@@ -246,16 +248,17 @@ func listDir(w http.ResponseWriter, r *http.Request, dir string, autorefresh boo
                        return
                }
                filenameClean = strings.TrimSuffix(file.Name(), SHA256Ext)
-               w.Write([]byte(fmt.Sprintf(
+               result.WriteString(fmt.Sprintf(
                        HTMLElement,
                        strings.Join([]string{
                                *refreshURLPath, dir, "/",
-                               filenameClean, "#", SHA256Prefix, string(data),
+                               filenameClean, "#", SHA256Prefix, hex.EncodeToString(data),
                        }, ""),
                        filenameClean,
-               )))
+               ))
        }
-       w.Write([]byte(HTMLEnd))
+       result.WriteString(HTMLEnd)
+       w.Write(result.Bytes())
 }
 
 func servePkg(w http.ResponseWriter, r *http.Request, dir, filename string) {