lib, gui: Default ignores for new folders (fixes #7428) (#7530)

This commit is contained in:
Simon Frei
2022-01-13 23:38:21 +01:00
committed by GitHub
parent 40bb52fdd8
commit 21d04b895a
17 changed files with 718 additions and 218 deletions
+24 -5
View File
@@ -10,8 +10,10 @@ import (
"bytes"
"context"
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"io"
"net"
"net/http"
"strings"
@@ -25,6 +27,7 @@ import (
type APIClient interface {
Get(url string) (*http.Response, error)
Post(url, body string) (*http.Response, error)
PutJSON(url string, o interface{}) (*http.Response, error)
}
type apiClient struct {
@@ -118,20 +121,36 @@ func (c *apiClient) Do(req *http.Request) (*http.Response, error) {
return resp, checkResponse(resp)
}
func (c *apiClient) Get(url string) (*http.Response, error) {
request, err := http.NewRequest("GET", c.Endpoint()+"rest/"+url, nil)
func (c *apiClient) Request(url, method string, r io.Reader) (*http.Response, error) {
request, err := http.NewRequest(method, c.Endpoint()+"rest/"+url, r)
if err != nil {
return nil, err
}
return c.Do(request)
}
func (c *apiClient) Post(url, body string) (*http.Response, error) {
request, err := http.NewRequest("POST", c.Endpoint()+"rest/"+url, bytes.NewBufferString(body))
func (c *apiClient) RequestString(url, method, data string) (*http.Response, error) {
return c.Request(url, method, bytes.NewBufferString(data))
}
func (c *apiClient) RequestJSON(url, method string, o interface{}) (*http.Response, error) {
data, err := json.Marshal(o)
if err != nil {
return nil, err
}
return c.Do(request)
return c.Request(url, method, bytes.NewBuffer(data))
}
func (c *apiClient) Get(url string) (*http.Response, error) {
return c.RequestString(url, "GET", "")
}
func (c *apiClient) Post(url, body string) (*http.Response, error) {
return c.RequestString(url, "POST", body)
}
func (c *apiClient) PutJSON(url string, o interface{}) (*http.Response, error) {
return c.RequestJSON(url, "PUT", o)
}
var errNotFound = errors.New("invalid endpoint or API call")
+36
View File
@@ -7,8 +7,12 @@
package cli
import (
"bufio"
"fmt"
"path/filepath"
"github.com/syncthing/syncthing/lib/config"
"github.com/syncthing/syncthing/lib/fs"
"github.com/urfave/cli"
)
@@ -38,6 +42,12 @@ var operationCommand = cli.Command{
ArgsUsage: "[folder id]",
Action: expects(1, foldersOverride),
},
{
Name: "default-ignores",
Usage: "Set the default ignores (config) from a file",
ArgsUsage: "path",
Action: expects(1, setDefaultIgnores),
},
},
}
@@ -74,3 +84,29 @@ func foldersOverride(c *cli.Context) error {
}
return fmt.Errorf("Folder " + rid + " not found")
}
func setDefaultIgnores(c *cli.Context) error {
client, err := getClientFactory(c).getClient()
if err != nil {
return err
}
dir, file := filepath.Split(c.Args()[0])
filesystem := fs.NewFilesystem(fs.FilesystemTypeBasic, dir)
fd, err := filesystem.Open(file)
if err != nil {
return err
}
scanner := bufio.NewScanner(fd)
var lines []string
for scanner.Scan() {
lines = append(lines, scanner.Text())
}
fd.Close()
if err := scanner.Err(); err != nil {
return err
}
_, err = client.PutJSON("config/defaults/ignores", config.Ignores{Lines: lines})
return err
}