From 061d31829d7ce53a99f75bb049c954f9e7ffdf97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zlatko=20=C4=8Calu=C5=A1i=C4=87?= Date: Tue, 27 Dec 2016 01:35:45 +0100 Subject: [PATCH] Create directories before key setup, not on startup --- handlers.go | 32 ++++++++++++++++++++++++++++++++ main.go | 28 ---------------------------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/handlers.go b/handlers.go index 6239439..5ac5f32 100644 --- a/handlers.go +++ b/handlers.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "io/ioutil" + "log" "net/http" "os" "path/filepath" @@ -21,6 +22,31 @@ func isHashed(dir string) bool { return dir == "data" } +func createDirectories(c *Context) { + log.Println("Creating repository directories") + + dirs := []string{ + "data", + "index", + "keys", + "locks", + "snapshots", + "tmp", + } + + for _, d := range dirs { + if err := os.MkdirAll(filepath.Join(c.path, d), 0700); err != nil { + log.Fatal(err) + } + } + + for i := 0; i < 256; i++ { + if err := os.MkdirAll(filepath.Join(c.path, "data", fmt.Sprintf("%02x", i)), 0700); err != nil { + log.Fatal(err) + } + } +} + // AuthHandler wraps h with a http.HandlerFunc that performs basic authentication against the user/passwords pairs // stored in f and returns the http.HandlerFunc. func AuthHandler(f *HtpasswdFile, h http.Handler) http.HandlerFunc { @@ -172,6 +198,12 @@ func SaveBlob(c *Context) http.HandlerFunc { dir := vars[1] name := vars[2] + if dir == "keys" { + if _, err := os.Stat("keys"); err != nil && os.IsNotExist(err) { + createDirectories(c) + } + } + tmp := filepath.Join(c.path, "tmp", name) tf, err := os.OpenFile(tmp, os.O_CREATE|os.O_WRONLY, 0600) diff --git a/main.go b/main.go index a026398..b6d6a3f 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,6 @@ package main import ( "flag" - "fmt" "log" "net/http" "os" @@ -10,31 +9,6 @@ import ( "runtime/pprof" ) -func createDirectories(path string) { - log.Println("Creating repository directories") - - dirs := []string{ - "data", - "index", - "keys", - "locks", - "snapshots", - "tmp", - } - - for _, d := range dirs { - if err := os.MkdirAll(filepath.Join(path, d), 0700); err != nil { - log.Fatal(err) - } - } - - for i := 0; i < 256; i++ { - if err := os.MkdirAll(filepath.Join(path, "data", fmt.Sprintf("%02x", i)), 0700); err != nil { - log.Fatal(err) - } - } -} - func setupRoutes(path string) *Router { context := &Context{path} @@ -72,8 +46,6 @@ func main() { defer pprof.StopCPUProfile() } - createDirectories(*path) - router := setupRoutes(*path) var handler http.Handler