summaryrefslogtreecommitdiff
path: root/cmd/main.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-12-31 16:47:35 -0700
committerMatthew Holt <mholt@users.noreply.github.com>2019-12-31 16:47:35 -0700
commit984d384d148090cdb0f6aa2f234a8b946c3b9ee3 (patch)
tree97ddb9038a34d499b51b84f02459a97d476abb2b /cmd/main.go
parentfdabac51a8c8801840679a24e371f23013b021bb (diff)
Change storage paths to follow OS conventions; migrate folder (#2955)
Diffstat (limited to 'cmd/main.go')
-rw-r--r--cmd/main.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/cmd/main.go b/cmd/main.go
index a86c04a..ca9b914 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -22,12 +22,15 @@ import (
"io/ioutil"
"net"
"os"
+ "path/filepath"
+ "runtime"
"strconv"
"strings"
"time"
"github.com/caddyserver/caddy/v2"
"github.com/caddyserver/caddy/v2/caddyconfig"
+ "go.uber.org/zap"
)
// Main implements the main function of the caddy command.
@@ -226,3 +229,71 @@ func printEnvironment() {
fmt.Println(v)
}
}
+
+// moveStorage moves the old default dataDir to the new default dataDir.
+// TODO: This is TEMPORARY until the release candidates.
+func moveStorage() {
+ // get the home directory (the old way)
+ oldHome := os.Getenv("HOME")
+ if oldHome == "" && runtime.GOOS == "windows" {
+ drive := os.Getenv("HOMEDRIVE")
+ path := os.Getenv("HOMEPATH")
+ oldHome = drive + path
+ if drive == "" || path == "" {
+ oldHome = os.Getenv("USERPROFILE")
+ }
+ }
+ if oldHome == "" {
+ oldHome = "."
+ }
+ oldDataDir := filepath.Join(oldHome, ".local", "share", "caddy")
+
+ // nothing to do if old data dir doesn't exist
+ _, err := os.Stat(oldDataDir)
+ if os.IsNotExist(err) {
+ return
+ }
+
+ // nothing to do if the new data dir is the same as the old one
+ newDataDir := caddy.AppDataDir()
+ if oldDataDir == newDataDir {
+ return
+ }
+
+ logger := caddy.Log().Named("automigrate").With(
+ zap.String("old_dir", oldDataDir),
+ zap.String("new_dir", newDataDir))
+
+ logger.Info("beginning one-time data directory migration",
+ zap.String("details", "https://github.com/caddyserver/caddy/issues/2955"))
+
+ // if new data directory exists, avoid auto-migration as a conservative safety measure
+ _, err = os.Stat(newDataDir)
+ if !os.IsNotExist(err) {
+ logger.Error("new data directory already exists; skipping auto-migration as conservative safety measure",
+ zap.Error(err),
+ zap.String("instructions", "https://github.com/caddyserver/caddy/issues/2955#issuecomment-570000333"))
+ return
+ }
+
+ // construct the new data directory's parent folder
+ err = os.MkdirAll(filepath.Dir(newDataDir), 0700)
+ if err != nil {
+ logger.Error("unable to make new datadirectory - follow link for instructions",
+ zap.String("instructions", "https://github.com/caddyserver/caddy/issues/2955#issuecomment-570000333"),
+ zap.Error(err))
+ return
+ }
+
+ // folder structure is same, so just try to rename (move) it;
+ // this fails if the new path is on a separate device
+ err = os.Rename(oldDataDir, newDataDir)
+ if err != nil {
+ logger.Error("new data directory already exists; skipping auto-migration as conservative safety measure - follow link for instructions",
+ zap.String("instructions", "https://github.com/caddyserver/caddy/issues/2955#issuecomment-570000333"),
+ zap.Error(err))
+ }
+
+ logger.Info("successfully completed one-time migration of data directory",
+ zap.String("details", "https://github.com/caddyserver/caddy/issues/2955"))
+}