diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 07d8c16f..d10d2b80 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -846,6 +846,17 @@ func renewUPnP(port int) { } func resetFolders() { + confDir, err := osutil.ExpandTilde(confDir) + if err != nil { + log.Fatal(err) + } + + cfgFile := filepath.Join(confDir, "config.xml") + cfg, err := config.Load(cfgFile, myID) + if err != nil { + log.Fatal(err) + } + suffix := fmt.Sprintf(".syncthing-reset-%d", time.Now().UnixNano()) for _, folder := range cfg.Folders() { if _, err := os.Stat(folder.Path); err == nil { diff --git a/test/.gitignore b/test/.gitignore index 8780f2b7..51d37e13 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -16,3 +16,4 @@ csrftokens.txt s4d http index +*.syncthing-reset* diff --git a/test/cli_test.go b/test/cli_test.go new file mode 100644 index 00000000..8442230a --- /dev/null +++ b/test/cli_test.go @@ -0,0 +1,56 @@ +// Copyright (C) 2014 The Syncthing Authors. +// +// 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 the Free +// Software Foundation, either version 3 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along +// with this program. If not, see . + +// +build integration + +package integration_test + +import ( + "os" + "os/exec" + "testing" +) + +func TestCLIReset(t *testing.T) { + dirs := []string{"s1", "s12-1", "h1/index"} + + // Create directories that reset will remove + + for _, dir := range dirs { + err := os.Mkdir(dir, 0755) + if err != nil && !os.IsExist(err) { + t.Fatal(err) + } + } + + // Run reset to clean up + + cmd := exec.Command("../bin/syncthing", "-home", "h1", "-reset") + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stdout + err := cmd.Run() + if err != nil { + t.Fatal(err) + } + + // Verify that they're gone + + for _, dir := range dirs { + _, err := os.Stat(dir) + if err == nil { + t.Errorf("%s still exists", dir) + } + } +}