mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-21 10:29:06 +00:00
style: gofumpt all the things (#9829)
Literally `gofumpt -w .` from the top level dir. Guaranteed to be minor style changes only and nothing else. @imsodin per request?
This commit is contained in:
parent
4b815fc086
commit
e82ed6e3d3
144
build.go
144
build.go
@ -97,40 +97,40 @@ var targets = map[string]target{
|
||||
buildPkgs: []string{"github.com/syncthing/syncthing/cmd/syncthing"},
|
||||
binaryName: "syncthing", // .exe will be added automatically for Windows builds
|
||||
archiveFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
||||
{src: "README.md", dst: "README.txt", perm: 0644},
|
||||
{src: "LICENSE", dst: "LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0644},
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0o755},
|
||||
{src: "README.md", dst: "README.txt", perm: 0o644},
|
||||
{src: "LICENSE", dst: "LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0o644},
|
||||
// All files from etc/ and extra/ added automatically in init().
|
||||
},
|
||||
systemdService: "syncthing@*.service",
|
||||
installationFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0755},
|
||||
{src: "README.md", dst: "deb/usr/share/doc/syncthing/README.txt", perm: 0644},
|
||||
{src: "LICENSE", dst: "deb/usr/share/doc/syncthing/LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing/AUTHORS.txt", perm: 0644},
|
||||
{src: "man/syncthing.1", dst: "deb/usr/share/man/man1/syncthing.1", perm: 0644},
|
||||
{src: "man/syncthing-config.5", dst: "deb/usr/share/man/man5/syncthing-config.5", perm: 0644},
|
||||
{src: "man/syncthing-stignore.5", dst: "deb/usr/share/man/man5/syncthing-stignore.5", perm: 0644},
|
||||
{src: "man/syncthing-device-ids.7", dst: "deb/usr/share/man/man7/syncthing-device-ids.7", perm: 0644},
|
||||
{src: "man/syncthing-event-api.7", dst: "deb/usr/share/man/man7/syncthing-event-api.7", perm: 0644},
|
||||
{src: "man/syncthing-faq.7", dst: "deb/usr/share/man/man7/syncthing-faq.7", perm: 0644},
|
||||
{src: "man/syncthing-networking.7", dst: "deb/usr/share/man/man7/syncthing-networking.7", perm: 0644},
|
||||
{src: "man/syncthing-rest-api.7", dst: "deb/usr/share/man/man7/syncthing-rest-api.7", perm: 0644},
|
||||
{src: "man/syncthing-security.7", dst: "deb/usr/share/man/man7/syncthing-security.7", perm: 0644},
|
||||
{src: "man/syncthing-versioning.7", dst: "deb/usr/share/man/man7/syncthing-versioning.7", perm: 0644},
|
||||
{src: "etc/linux-systemd/system/syncthing@.service", dst: "deb/lib/systemd/system/syncthing@.service", perm: 0644},
|
||||
{src: "etc/linux-systemd/user/syncthing.service", dst: "deb/usr/lib/systemd/user/syncthing.service", perm: 0644},
|
||||
{src: "etc/linux-sysctl/30-syncthing.conf", dst: "deb/usr/lib/sysctl.d/30-syncthing.conf", perm: 0644},
|
||||
{src: "etc/firewall-ufw/syncthing", dst: "deb/etc/ufw/applications.d/syncthing", perm: 0644},
|
||||
{src: "etc/linux-desktop/syncthing-start.desktop", dst: "deb/usr/share/applications/syncthing-start.desktop", perm: 0644},
|
||||
{src: "etc/linux-desktop/syncthing-ui.desktop", dst: "deb/usr/share/applications/syncthing-ui.desktop", perm: 0644},
|
||||
{src: "assets/logo-32.png", dst: "deb/usr/share/icons/hicolor/32x32/apps/syncthing.png", perm: 0644},
|
||||
{src: "assets/logo-64.png", dst: "deb/usr/share/icons/hicolor/64x64/apps/syncthing.png", perm: 0644},
|
||||
{src: "assets/logo-128.png", dst: "deb/usr/share/icons/hicolor/128x128/apps/syncthing.png", perm: 0644},
|
||||
{src: "assets/logo-256.png", dst: "deb/usr/share/icons/hicolor/256x256/apps/syncthing.png", perm: 0644},
|
||||
{src: "assets/logo-512.png", dst: "deb/usr/share/icons/hicolor/512x512/apps/syncthing.png", perm: 0644},
|
||||
{src: "assets/logo-only.svg", dst: "deb/usr/share/icons/hicolor/scalable/apps/syncthing.svg", perm: 0644},
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0o755},
|
||||
{src: "README.md", dst: "deb/usr/share/doc/syncthing/README.txt", perm: 0o644},
|
||||
{src: "LICENSE", dst: "deb/usr/share/doc/syncthing/LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing/AUTHORS.txt", perm: 0o644},
|
||||
{src: "man/syncthing.1", dst: "deb/usr/share/man/man1/syncthing.1", perm: 0o644},
|
||||
{src: "man/syncthing-config.5", dst: "deb/usr/share/man/man5/syncthing-config.5", perm: 0o644},
|
||||
{src: "man/syncthing-stignore.5", dst: "deb/usr/share/man/man5/syncthing-stignore.5", perm: 0o644},
|
||||
{src: "man/syncthing-device-ids.7", dst: "deb/usr/share/man/man7/syncthing-device-ids.7", perm: 0o644},
|
||||
{src: "man/syncthing-event-api.7", dst: "deb/usr/share/man/man7/syncthing-event-api.7", perm: 0o644},
|
||||
{src: "man/syncthing-faq.7", dst: "deb/usr/share/man/man7/syncthing-faq.7", perm: 0o644},
|
||||
{src: "man/syncthing-networking.7", dst: "deb/usr/share/man/man7/syncthing-networking.7", perm: 0o644},
|
||||
{src: "man/syncthing-rest-api.7", dst: "deb/usr/share/man/man7/syncthing-rest-api.7", perm: 0o644},
|
||||
{src: "man/syncthing-security.7", dst: "deb/usr/share/man/man7/syncthing-security.7", perm: 0o644},
|
||||
{src: "man/syncthing-versioning.7", dst: "deb/usr/share/man/man7/syncthing-versioning.7", perm: 0o644},
|
||||
{src: "etc/linux-systemd/system/syncthing@.service", dst: "deb/lib/systemd/system/syncthing@.service", perm: 0o644},
|
||||
{src: "etc/linux-systemd/user/syncthing.service", dst: "deb/usr/lib/systemd/user/syncthing.service", perm: 0o644},
|
||||
{src: "etc/linux-sysctl/30-syncthing.conf", dst: "deb/usr/lib/sysctl.d/30-syncthing.conf", perm: 0o644},
|
||||
{src: "etc/firewall-ufw/syncthing", dst: "deb/etc/ufw/applications.d/syncthing", perm: 0o644},
|
||||
{src: "etc/linux-desktop/syncthing-start.desktop", dst: "deb/usr/share/applications/syncthing-start.desktop", perm: 0o644},
|
||||
{src: "etc/linux-desktop/syncthing-ui.desktop", dst: "deb/usr/share/applications/syncthing-ui.desktop", perm: 0o644},
|
||||
{src: "assets/logo-32.png", dst: "deb/usr/share/icons/hicolor/32x32/apps/syncthing.png", perm: 0o644},
|
||||
{src: "assets/logo-64.png", dst: "deb/usr/share/icons/hicolor/64x64/apps/syncthing.png", perm: 0o644},
|
||||
{src: "assets/logo-128.png", dst: "deb/usr/share/icons/hicolor/128x128/apps/syncthing.png", perm: 0o644},
|
||||
{src: "assets/logo-256.png", dst: "deb/usr/share/icons/hicolor/256x256/apps/syncthing.png", perm: 0o644},
|
||||
{src: "assets/logo-512.png", dst: "deb/usr/share/icons/hicolor/512x512/apps/syncthing.png", perm: 0o644},
|
||||
{src: "assets/logo-only.svg", dst: "deb/usr/share/icons/hicolor/scalable/apps/syncthing.svg", perm: 0o644},
|
||||
},
|
||||
},
|
||||
"stdiscosrv": {
|
||||
@ -142,21 +142,21 @@ var targets = map[string]target{
|
||||
buildPkgs: []string{"github.com/syncthing/syncthing/cmd/stdiscosrv"},
|
||||
binaryName: "stdiscosrv", // .exe will be added automatically for Windows builds
|
||||
archiveFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
||||
{src: "cmd/stdiscosrv/README.md", dst: "README.txt", perm: 0644},
|
||||
{src: "LICENSE", dst: "LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0644},
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0o755},
|
||||
{src: "cmd/stdiscosrv/README.md", dst: "README.txt", perm: 0o644},
|
||||
{src: "LICENSE", dst: "LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0o644},
|
||||
},
|
||||
systemdService: "stdiscosrv.service",
|
||||
installationFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0755},
|
||||
{src: "cmd/stdiscosrv/README.md", dst: "deb/usr/share/doc/syncthing-discosrv/README.txt", perm: 0644},
|
||||
{src: "LICENSE", dst: "deb/usr/share/doc/syncthing-discosrv/LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing-discosrv/AUTHORS.txt", perm: 0644},
|
||||
{src: "man/stdiscosrv.1", dst: "deb/usr/share/man/man1/stdiscosrv.1", perm: 0644},
|
||||
{src: "cmd/stdiscosrv/etc/linux-systemd/stdiscosrv.service", dst: "deb/lib/systemd/system/stdiscosrv.service", perm: 0644},
|
||||
{src: "cmd/stdiscosrv/etc/linux-systemd/default", dst: "deb/etc/default/syncthing-discosrv", perm: 0644},
|
||||
{src: "cmd/stdiscosrv/etc/firewall-ufw/stdiscosrv", dst: "deb/etc/ufw/applications.d/stdiscosrv", perm: 0644},
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0o755},
|
||||
{src: "cmd/stdiscosrv/README.md", dst: "deb/usr/share/doc/syncthing-discosrv/README.txt", perm: 0o644},
|
||||
{src: "LICENSE", dst: "deb/usr/share/doc/syncthing-discosrv/LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing-discosrv/AUTHORS.txt", perm: 0o644},
|
||||
{src: "man/stdiscosrv.1", dst: "deb/usr/share/man/man1/stdiscosrv.1", perm: 0o644},
|
||||
{src: "cmd/stdiscosrv/etc/linux-systemd/stdiscosrv.service", dst: "deb/lib/systemd/system/stdiscosrv.service", perm: 0o644},
|
||||
{src: "cmd/stdiscosrv/etc/linux-systemd/default", dst: "deb/etc/default/syncthing-discosrv", perm: 0o644},
|
||||
{src: "cmd/stdiscosrv/etc/firewall-ufw/stdiscosrv", dst: "deb/etc/ufw/applications.d/stdiscosrv", perm: 0o644},
|
||||
},
|
||||
tags: []string{"purego"},
|
||||
},
|
||||
@ -169,23 +169,23 @@ var targets = map[string]target{
|
||||
buildPkgs: []string{"github.com/syncthing/syncthing/cmd/strelaysrv"},
|
||||
binaryName: "strelaysrv", // .exe will be added automatically for Windows builds
|
||||
archiveFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
||||
{src: "cmd/strelaysrv/README.md", dst: "README.txt", perm: 0644},
|
||||
{src: "cmd/strelaysrv/LICENSE", dst: "LICENSE.txt", perm: 0644},
|
||||
{src: "LICENSE", dst: "LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0644},
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0o755},
|
||||
{src: "cmd/strelaysrv/README.md", dst: "README.txt", perm: 0o644},
|
||||
{src: "cmd/strelaysrv/LICENSE", dst: "LICENSE.txt", perm: 0o644},
|
||||
{src: "LICENSE", dst: "LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0o644},
|
||||
},
|
||||
systemdService: "strelaysrv.service",
|
||||
installationFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0755},
|
||||
{src: "cmd/strelaysrv/README.md", dst: "deb/usr/share/doc/syncthing-relaysrv/README.txt", perm: 0644},
|
||||
{src: "cmd/strelaysrv/LICENSE", dst: "deb/usr/share/doc/syncthing-relaysrv/LICENSE.txt", perm: 0644},
|
||||
{src: "LICENSE", dst: "deb/usr/share/doc/syncthing-relaysrv/LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing-relaysrv/AUTHORS.txt", perm: 0644},
|
||||
{src: "man/strelaysrv.1", dst: "deb/usr/share/man/man1/strelaysrv.1", perm: 0644},
|
||||
{src: "cmd/strelaysrv/etc/linux-systemd/strelaysrv.service", dst: "deb/lib/systemd/system/strelaysrv.service", perm: 0644},
|
||||
{src: "cmd/strelaysrv/etc/linux-systemd/default", dst: "deb/etc/default/syncthing-relaysrv", perm: 0644},
|
||||
{src: "cmd/strelaysrv/etc/firewall-ufw/strelaysrv", dst: "deb/etc/ufw/applications.d/strelaysrv", perm: 0644},
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0o755},
|
||||
{src: "cmd/strelaysrv/README.md", dst: "deb/usr/share/doc/syncthing-relaysrv/README.txt", perm: 0o644},
|
||||
{src: "cmd/strelaysrv/LICENSE", dst: "deb/usr/share/doc/syncthing-relaysrv/LICENSE.txt", perm: 0o644},
|
||||
{src: "LICENSE", dst: "deb/usr/share/doc/syncthing-relaysrv/LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing-relaysrv/AUTHORS.txt", perm: 0o644},
|
||||
{src: "man/strelaysrv.1", dst: "deb/usr/share/man/man1/strelaysrv.1", perm: 0o644},
|
||||
{src: "cmd/strelaysrv/etc/linux-systemd/strelaysrv.service", dst: "deb/lib/systemd/system/strelaysrv.service", perm: 0o644},
|
||||
{src: "cmd/strelaysrv/etc/linux-systemd/default", dst: "deb/etc/default/syncthing-relaysrv", perm: 0o644},
|
||||
{src: "cmd/strelaysrv/etc/firewall-ufw/strelaysrv", dst: "deb/etc/ufw/applications.d/strelaysrv", perm: 0o644},
|
||||
},
|
||||
},
|
||||
"strelaypoolsrv": {
|
||||
@ -196,16 +196,16 @@ var targets = map[string]target{
|
||||
buildPkgs: []string{"github.com/syncthing/syncthing/cmd/infra/strelaypoolsrv"},
|
||||
binaryName: "strelaypoolsrv", // .exe will be added automatically for Windows builds
|
||||
archiveFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0755},
|
||||
{src: "cmd/infra/strelaypoolsrv/README.md", dst: "README.txt", perm: 0644},
|
||||
{src: "cmd/infra/strelaypoolsrv/LICENSE", dst: "LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0644},
|
||||
{src: "{{binary}}", dst: "{{binary}}", perm: 0o755},
|
||||
{src: "cmd/infra/strelaypoolsrv/README.md", dst: "README.txt", perm: 0o644},
|
||||
{src: "cmd/infra/strelaypoolsrv/LICENSE", dst: "LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "AUTHORS.txt", perm: 0o644},
|
||||
},
|
||||
installationFiles: []archiveFile{
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0755},
|
||||
{src: "cmd/infra/strelaypoolsrv/README.md", dst: "deb/usr/share/doc/syncthing-relaypoolsrv/README.txt", perm: 0644},
|
||||
{src: "cmd/infra/strelaypoolsrv/LICENSE", dst: "deb/usr/share/doc/syncthing-relaypoolsrv/LICENSE.txt", perm: 0644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing-relaypoolsrv/AUTHORS.txt", perm: 0644},
|
||||
{src: "{{binary}}", dst: "deb/usr/bin/{{binary}}", perm: 0o755},
|
||||
{src: "cmd/infra/strelaypoolsrv/README.md", dst: "deb/usr/share/doc/syncthing-relaypoolsrv/README.txt", perm: 0o644},
|
||||
{src: "cmd/infra/strelaypoolsrv/LICENSE", dst: "deb/usr/share/doc/syncthing-relaypoolsrv/LICENSE.txt", perm: 0o644},
|
||||
{src: "AUTHORS", dst: "deb/usr/share/doc/syncthing-relaypoolsrv/AUTHORS.txt", perm: 0o644},
|
||||
},
|
||||
},
|
||||
"stupgrades": {
|
||||
@ -244,13 +244,13 @@ func initTargets() {
|
||||
// and "extra" dirs.
|
||||
syncthingPkg := targets["syncthing"]
|
||||
for _, file := range listFiles("etc") {
|
||||
syncthingPkg.archiveFiles = append(syncthingPkg.archiveFiles, archiveFile{src: file, dst: file, perm: 0644})
|
||||
syncthingPkg.archiveFiles = append(syncthingPkg.archiveFiles, archiveFile{src: file, dst: file, perm: 0o644})
|
||||
}
|
||||
for _, file := range listFiles("extra") {
|
||||
syncthingPkg.archiveFiles = append(syncthingPkg.archiveFiles, archiveFile{src: file, dst: file, perm: 0644})
|
||||
syncthingPkg.archiveFiles = append(syncthingPkg.archiveFiles, archiveFile{src: file, dst: file, perm: 0o644})
|
||||
}
|
||||
for _, file := range listFiles("extra") {
|
||||
syncthingPkg.installationFiles = append(syncthingPkg.installationFiles, archiveFile{src: file, dst: "deb/usr/share/doc/syncthing/" + filepath.Base(file), perm: 0644})
|
||||
syncthingPkg.installationFiles = append(syncthingPkg.installationFiles, archiveFile{src: file, dst: "deb/usr/share/doc/syncthing/" + filepath.Base(file), perm: 0o644})
|
||||
}
|
||||
targets["syncthing"] = syncthingPkg
|
||||
}
|
||||
@ -750,7 +750,7 @@ func shouldBuildSyso(dir string) (string, error) {
|
||||
}
|
||||
|
||||
jsonPath := filepath.Join(dir, "versioninfo.json")
|
||||
err = os.WriteFile(jsonPath, bs, 0644)
|
||||
err = os.WriteFile(jsonPath, bs, 0o644)
|
||||
if err != nil {
|
||||
return "", errors.New("failed to create " + jsonPath + ": " + err.Error())
|
||||
}
|
||||
@ -809,7 +809,7 @@ func copyFile(src, dst string, perm os.FileMode) error {
|
||||
}
|
||||
|
||||
copy:
|
||||
os.MkdirAll(filepath.Dir(dst), 0777)
|
||||
os.MkdirAll(filepath.Dir(dst), 0o777)
|
||||
if err := os.WriteFile(dst, in, perm); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -869,7 +869,7 @@ func buildNextGenGUI() bool {
|
||||
for _, src := range listFiles("next-gen-gui/dist") {
|
||||
rel, _ := filepath.Rel("next-gen-gui/dist", src)
|
||||
dst := filepath.Join("gui", rel)
|
||||
if err := copyFile(src, dst, 0644); err != nil {
|
||||
if err := copyFile(src, dst, 0o644); err != nil {
|
||||
fmt.Println("copy:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
@ -930,7 +930,7 @@ func proto() {
|
||||
path := filepath.Join("repos", "protobuf")
|
||||
|
||||
runPrint(goCmd, "install", fmt.Sprintf("github.com/gogo/protobuf/protoc-gen-gogofast@%v", pv))
|
||||
os.MkdirAll("repos", 0755)
|
||||
os.MkdirAll("repos", 0o755)
|
||||
|
||||
if _, err := os.Stat(path); err != nil {
|
||||
runPrint("git", "clone", repo, path)
|
||||
@ -1427,7 +1427,7 @@ func windowsCodesign(file string) {
|
||||
log.Println("Codesign: signing failed: creating temp file:", err)
|
||||
return
|
||||
}
|
||||
_ = f.Chmod(0600) // best effort remove other users' access
|
||||
_ = f.Chmod(0o600) // best effort remove other users' access
|
||||
defer os.Remove(f.Name())
|
||||
if _, err := f.Write(bs); err != nil {
|
||||
log.Println("Codesign: signing failed: writing temp file:", err)
|
||||
|
@ -71,7 +71,6 @@ func (l *githubSourceCodeLoader) Load(filename string, line, context int) ([][]b
|
||||
|
||||
url := urlPrefix + l.version + filename[idx:]
|
||||
resp, err := l.client.Get(url)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("Loading source:", err)
|
||||
return nil, 0
|
||||
|
@ -52,5 +52,5 @@ func compressAndWrite(bs []byte, fullPath string) error {
|
||||
gw.Close()
|
||||
|
||||
// Create an output file with the compressed report
|
||||
return os.WriteFile(fullPath, buf.Bytes(), 0644)
|
||||
return os.WriteFile(fullPath, buf.Bytes(), 0o644)
|
||||
}
|
||||
|
@ -68,7 +68,6 @@ func findSession(key string) *session {
|
||||
ses, ok := pendingSessions[key]
|
||||
if !ok {
|
||||
return nil
|
||||
|
||||
}
|
||||
delete(pendingSessions, key)
|
||||
return ses
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("main", "Main package")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("main", "Main package")
|
||||
|
@ -140,7 +140,7 @@ func checkNotExist(t *testing.T, name string) {
|
||||
func TestAutoClosedFile(t *testing.T) {
|
||||
os.RemoveAll("_autoclose")
|
||||
defer os.RemoveAll("_autoclose")
|
||||
os.Mkdir("_autoclose", 0755)
|
||||
os.Mkdir("_autoclose", 0o755)
|
||||
file := filepath.FromSlash("_autoclose/tmp")
|
||||
data := []byte("hello, world\n")
|
||||
|
||||
|
@ -148,7 +148,7 @@ func readBroadcasts(ctx context.Context, outbox chan<- recv, port int) error {
|
||||
}
|
||||
|
||||
func bcast(ip *net.IPNet) *net.IPNet {
|
||||
var bc = &net.IPNet{}
|
||||
bc := &net.IPNet{}
|
||||
bc.IP = make([]byte, len(ip.IP))
|
||||
copy(bc.IP, ip.IP)
|
||||
bc.Mask = ip.Mask
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("beacon", "Multicast and broadcast discovery")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("beacon", "Multicast and broadcast discovery")
|
||||
|
@ -18,6 +18,7 @@ type requiresRestart struct {
|
||||
func (requiresRestart) VerifyConfiguration(_, _ Configuration) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c requiresRestart) CommitConfiguration(_, _ Configuration) bool {
|
||||
select {
|
||||
case c.committed <- struct{}{}:
|
||||
@ -25,6 +26,7 @@ func (c requiresRestart) CommitConfiguration(_, _ Configuration) bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (requiresRestart) String() string {
|
||||
return "requiresRestart"
|
||||
}
|
||||
@ -34,9 +36,11 @@ type validationError struct{}
|
||||
func (validationError) VerifyConfiguration(_, _ Configuration) error {
|
||||
return errors.New("some error")
|
||||
}
|
||||
|
||||
func (validationError) CommitConfiguration(_, _ Configuration) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (validationError) String() string {
|
||||
return "validationError"
|
||||
}
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("config", "Configuration loading and saving")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("config", "Configuration loading and saving")
|
||||
|
@ -24,7 +24,7 @@ func ParseSize(s string) (Size, error) {
|
||||
for i := 0; i < len(s) && (s[i] >= '0' && s[i] <= '9' || s[i] == '.' || s[i] == ','); i++ {
|
||||
num = s[:i+1]
|
||||
}
|
||||
var i = len(num)
|
||||
i := len(num)
|
||||
for i < len(s) && s[i] == ' ' {
|
||||
i++
|
||||
}
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("connections", "Connection handling")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("connections", "Connection handling")
|
||||
|
@ -21,8 +21,10 @@ import (
|
||||
"golang.org/x/time/rate"
|
||||
)
|
||||
|
||||
var device1, device2, device3, device4 protocol.DeviceID
|
||||
var dev1Conf, dev2Conf, dev3Conf, dev4Conf config.DeviceConfiguration
|
||||
var (
|
||||
device1, device2, device3, device4 protocol.DeviceID
|
||||
dev1Conf, dev2Conf, dev3Conf, dev4Conf config.DeviceConfiguration
|
||||
)
|
||||
|
||||
func init() {
|
||||
device1, _ = protocol.DeviceIDFromString("AIR6LPZ7K4PTTUXQSMUUCPQ5YWOEDFIIQJUG7772YQXXR5YD6AWQ")
|
||||
|
@ -11,14 +11,12 @@ import (
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
)
|
||||
|
||||
var (
|
||||
metricDeviceActiveConnections = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
||||
Namespace: "syncthing",
|
||||
Subsystem: "connections",
|
||||
Name: "active",
|
||||
Help: "Number of currently active connections, per device. If value is 0, the device is disconnected.",
|
||||
}, []string{"device"})
|
||||
)
|
||||
var metricDeviceActiveConnections = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
||||
Namespace: "syncthing",
|
||||
Subsystem: "connections",
|
||||
Name: "active",
|
||||
Help: "Number of currently active connections, per device. If value is 0, the device is disconnected.",
|
||||
}, []string{"device"})
|
||||
|
||||
func registerDeviceMetrics(deviceID string) {
|
||||
// Register metrics for this device, so that counters & gauges are present even
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("backend", "The database backend")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("backend", "The database backend")
|
||||
|
@ -13,8 +13,10 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
)
|
||||
|
||||
var f1, f2, f3 protocol.FileInfo
|
||||
var folders = []string{"folder1", "folder2"}
|
||||
var (
|
||||
f1, f2, f3 protocol.FileInfo
|
||||
folders = []string{"folder1", "folder2"}
|
||||
)
|
||||
|
||||
func init() {
|
||||
blocks := genBlocks(30)
|
||||
|
@ -159,7 +159,6 @@ func init() {
|
||||
|
||||
func TestUpdate0to3(t *testing.T) {
|
||||
ldb, err := openJSONS("testdata/v0.14.45-update0to3.db.jsons")
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -10,9 +10,7 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("db", "The database layer")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("db", "The database layer")
|
||||
|
||||
func shouldDebug() bool {
|
||||
return l.ShouldDebug("db")
|
||||
|
@ -55,6 +55,7 @@ func globalList(t testing.TB, s *db.FileSet) []protocol.FileInfo {
|
||||
})
|
||||
return fs
|
||||
}
|
||||
|
||||
func globalListPrefixed(t testing.TB, s *db.FileSet, prefix string) []db.FileInfoTruncated {
|
||||
var fs []db.FileInfoTruncated
|
||||
snap := snapshot(t, s)
|
||||
|
@ -16,9 +16,7 @@ import (
|
||||
"golang.org/x/net/proxy"
|
||||
)
|
||||
|
||||
var (
|
||||
noFallback = os.Getenv("ALL_PROXY_NO_FALLBACK") != ""
|
||||
)
|
||||
var noFallback = os.Getenv("ALL_PROXY_NO_FALLBACK") != ""
|
||||
|
||||
func init() {
|
||||
proxy.RegisterDialerType("socks", socksDialerFunction)
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("discover", "Remote device discovery")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("discover", "Remote device discovery")
|
||||
|
@ -244,6 +244,7 @@ type fakeAddressLister struct{}
|
||||
func (*fakeAddressLister) ExternalAddresses() []string {
|
||||
return []string{"tcp://0.0.0.0:22000"}
|
||||
}
|
||||
|
||||
func (*fakeAddressLister) AllAddresses() []string {
|
||||
return []string{"tcp://0.0.0.0:22000", "tcp://192.168.0.1:22000"}
|
||||
}
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
liblogger "github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
dl = liblogger.DefaultLogger.NewFacility("events", "Event generation and logging")
|
||||
)
|
||||
var dl = liblogger.DefaultLogger.NewFacility("events", "Event generation and logging")
|
||||
|
@ -81,7 +81,6 @@ func TestEventAfterSubscribe(t *testing.T) {
|
||||
l.Log(DeviceConnected, "foo")
|
||||
|
||||
ev, err := s.Poll(timeout)
|
||||
|
||||
if err != nil {
|
||||
t.Fatal("Unexpected error:", err)
|
||||
}
|
||||
|
@ -40,13 +40,13 @@ func (e basicFileInfo) Mode() FileMode {
|
||||
}
|
||||
// Set executable bits on files with executable extensions (.exe, .bat, etc).
|
||||
if isWindowsExecutable(e.Name()) {
|
||||
m |= 0111
|
||||
m |= 0o111
|
||||
}
|
||||
// There is no user/group/others in Windows' read-only attribute, and
|
||||
// all "w" bits are set if the file is not read-only. Do not send these
|
||||
// group/others-writable bits to other devices in order to avoid
|
||||
// unexpected world-writable files on other platforms.
|
||||
m &^= 0022
|
||||
m &^= 0o022
|
||||
return FileMode(m)
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ func readReparseTag(path string) (uint32, error) {
|
||||
}
|
||||
defer syscall.CloseHandle(h)
|
||||
|
||||
//https://docs.microsoft.com/windows/win32/api/winbase/ns-winbase-file_attribute_tag_info
|
||||
// https://docs.microsoft.com/windows/win32/api/winbase/ns-winbase-file_attribute_tag_info
|
||||
const fileAttributeTagInfo = 9
|
||||
type FILE_ATTRIBUTE_TAG_INFO struct {
|
||||
FileAttributes uint32
|
||||
@ -67,7 +67,7 @@ type dirJunctFileInfo struct {
|
||||
func (fi *dirJunctFileInfo) Mode() os.FileMode {
|
||||
// Simulate a directory and not a symlink; also set the execute
|
||||
// bits so the directory can be traversed Unix-side.
|
||||
return fi.FileInfo.Mode()&^junctionPointModeMask | os.ModeDir | 0111
|
||||
return fi.FileInfo.Mode()&^junctionPointModeMask | os.ModeDir | 0o111
|
||||
}
|
||||
|
||||
func (fi *dirJunctFileInfo) IsDir() bool {
|
||||
@ -89,7 +89,7 @@ func init() {
|
||||
}
|
||||
|
||||
func (f *BasicFilesystem) underlyingLstat(name string) (os.FileInfo, error) {
|
||||
var fi, err = os.Lstat(name)
|
||||
fi, err := os.Lstat(name)
|
||||
|
||||
// There are cases where files are tagged as symlink, but they end up being
|
||||
// something else. Make sure we properly handle those types.
|
||||
|
@ -34,7 +34,7 @@ func TestChmodFile(t *testing.T) {
|
||||
fs, dir := setup(t)
|
||||
path := filepath.Join(dir, "file")
|
||||
|
||||
defer os.Chmod(path, 0666)
|
||||
defer os.Chmod(path, 0o666)
|
||||
|
||||
fd, err := os.Create(path)
|
||||
if err != nil {
|
||||
@ -42,19 +42,19 @@ func TestChmodFile(t *testing.T) {
|
||||
}
|
||||
fd.Close()
|
||||
|
||||
if err := os.Chmod(path, 0666); err != nil {
|
||||
if err := os.Chmod(path, 0o666); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if stat, err := os.Stat(path); err != nil || stat.Mode()&os.ModePerm != 0666 {
|
||||
if stat, err := os.Stat(path); err != nil || stat.Mode()&os.ModePerm != 0o666 {
|
||||
t.Errorf("wrong perm: %t %#o", err == nil, stat.Mode()&os.ModePerm)
|
||||
}
|
||||
|
||||
if err := fs.Chmod("file", 0444); err != nil {
|
||||
if err := fs.Chmod("file", 0o444); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if stat, err := os.Stat(path); err != nil || stat.Mode()&os.ModePerm != 0444 {
|
||||
if stat, err := os.Stat(path); err != nil || stat.Mode()&os.ModePerm != 0o444 {
|
||||
t.Errorf("wrong perm: %t %#o", err == nil, stat.Mode()&os.ModePerm)
|
||||
}
|
||||
}
|
||||
@ -74,7 +74,7 @@ func TestChownFile(t *testing.T) {
|
||||
fs, dir := setup(t)
|
||||
path := filepath.Join(dir, "file")
|
||||
|
||||
defer os.Chmod(path, 0666)
|
||||
defer os.Chmod(path, 0o666)
|
||||
|
||||
fd, err := os.Create(path)
|
||||
if err != nil {
|
||||
@ -110,9 +110,9 @@ func TestChmodDir(t *testing.T) {
|
||||
fs, dir := setup(t)
|
||||
path := filepath.Join(dir, "dir")
|
||||
|
||||
mode := os.FileMode(0755)
|
||||
mode := os.FileMode(0o755)
|
||||
if build.IsWindows {
|
||||
mode = os.FileMode(0777)
|
||||
mode = os.FileMode(0o777)
|
||||
}
|
||||
|
||||
defer os.Chmod(path, mode)
|
||||
@ -129,11 +129,11 @@ func TestChmodDir(t *testing.T) {
|
||||
t.Errorf("wrong perm: %t %#o", err == nil, stat.Mode()&os.ModePerm)
|
||||
}
|
||||
|
||||
if err := fs.Chmod("dir", 0555); err != nil {
|
||||
if err := fs.Chmod("dir", 0o555); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if stat, err := os.Stat(path); err != nil || stat.Mode()&os.ModePerm != 0555 {
|
||||
if stat, err := os.Stat(path); err != nil || stat.Mode()&os.ModePerm != 0o555 {
|
||||
t.Errorf("wrong perm: %t %#o", err == nil, stat.Mode()&os.ModePerm)
|
||||
}
|
||||
}
|
||||
@ -221,7 +221,7 @@ func TestDirNames(t *testing.T) {
|
||||
sort.Strings(testCases)
|
||||
|
||||
for _, sub := range testCases {
|
||||
if err := os.Mkdir(filepath.Join(dir, sub), 0777); err != nil {
|
||||
if err := os.Mkdir(filepath.Join(dir, sub), 0o777); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
@ -256,7 +256,7 @@ func TestNames(t *testing.T) {
|
||||
t.Errorf("incorrect %s != %s (%v)", stat.Name(), expected, err)
|
||||
}
|
||||
|
||||
if err := fs.Mkdir("dir", 0777); err != nil {
|
||||
if err := fs.Mkdir("dir", 0o777); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
@ -286,7 +286,7 @@ func TestGlob(t *testing.T) {
|
||||
filepath.Join("a", "best", "b"),
|
||||
filepath.Join("a", "best", "c"),
|
||||
} {
|
||||
if err := fs.MkdirAll(dirToCreate, 0777); err != nil {
|
||||
if err := fs.MkdirAll(dirToCreate, 0o777); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}
|
||||
@ -572,7 +572,7 @@ func TestRel(t *testing.T) {
|
||||
|
||||
func TestXattr(t *testing.T) {
|
||||
tfs, _ := setup(t)
|
||||
if err := tfs.Mkdir("/test", 0755); err != nil {
|
||||
if err := tfs.Mkdir("/test", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -198,7 +198,7 @@ func (f *BasicFilesystem) Remove(name string) error {
|
||||
err = os.Remove(name)
|
||||
if os.IsPermission(err) {
|
||||
// Try to remove the read-only attribute and try again
|
||||
if os.Chmod(name, 0600) == nil {
|
||||
if os.Chmod(name, 0o600) == nil {
|
||||
err = os.Remove(name)
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ func testRealCase(t *testing.T, fsys Filesystem) {
|
||||
testFs := newCaseFilesystem(fsys)
|
||||
comps := []string{"Foo", "bar", "BAZ", "bAs"}
|
||||
path := filepath.Join(comps...)
|
||||
testFs.MkdirAll(filepath.Join(comps[:len(comps)-1]...), 0777)
|
||||
testFs.MkdirAll(filepath.Join(comps[:len(comps)-1]...), 0o777)
|
||||
fd, err := testFs.Create(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@ -93,7 +93,7 @@ func testRealCaseSensitive(t *testing.T, fsys Filesystem) {
|
||||
names[0] = "foo"
|
||||
names[1] = strings.ToUpper(names[0])
|
||||
for _, n := range names {
|
||||
if err := testFs.MkdirAll(n, 0777); err != nil {
|
||||
if err := testFs.MkdirAll(n, 0o777); err != nil {
|
||||
if IsErrCaseConflict(err) {
|
||||
t.Skip("Filesystem is case-insensitive")
|
||||
}
|
||||
|
@ -10,9 +10,7 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("fs", "Filesystem access")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("fs", "Filesystem access")
|
||||
|
||||
func init() {
|
||||
logger.DefaultLogger.NewFacility("walkfs", "Filesystem access while walking")
|
||||
|
@ -30,6 +30,7 @@ func (fs *errorFilesystem) DirNames(_ string) ([]string, error) { return nil, fs
|
||||
func (fs *errorFilesystem) GetXattr(_ string, _ XattrFilter) ([]protocol.Xattr, error) {
|
||||
return nil, fs.err
|
||||
}
|
||||
|
||||
func (fs *errorFilesystem) SetXattr(_ string, _ []protocol.Xattr, _ XattrFilter) error {
|
||||
return fs.err
|
||||
}
|
||||
@ -60,6 +61,7 @@ func (*errorFilesystem) SameFile(_, _ FileInfo) bool { return false }
|
||||
func (fs *errorFilesystem) Watch(_ string, _ Matcher, _ context.Context, _ bool) (<-chan Event, <-chan error, error) {
|
||||
return nil, nil, fs.err
|
||||
}
|
||||
|
||||
func (fs *errorFilesystem) PlatformData(_ string, _, _ bool, _ XattrFilter) (protocol.PlatformData, error) {
|
||||
return protocol.PlatformData{}, fs.err
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ func TestFakeFS(t *testing.T) {
|
||||
fs := newFakeFilesystem("/foo/bar/baz")
|
||||
|
||||
// MkdirAll
|
||||
err := fs.MkdirAll("dira/dirb", 0755)
|
||||
err := fs.MkdirAll("dira/dirb", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -37,7 +37,7 @@ func TestFakeFS(t *testing.T) {
|
||||
}
|
||||
|
||||
// Mkdir
|
||||
err = fs.Mkdir("dira/dirb/dirc", 0755)
|
||||
err = fs.Mkdir("dira/dirb/dirc", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -190,7 +190,7 @@ type test struct {
|
||||
}
|
||||
|
||||
func TestFakeFSCaseSensitive(t *testing.T) {
|
||||
var tests = []test{
|
||||
tests := []test{
|
||||
{"Read", testFakeFSRead},
|
||||
{"OpenFile", testFakeFSOpenFile},
|
||||
{"RemoveAll", testFakeFSRemoveAll},
|
||||
@ -201,7 +201,7 @@ func TestFakeFSCaseSensitive(t *testing.T) {
|
||||
{"DirNames", testDirNames},
|
||||
{"FileName", testFakeFSFileName},
|
||||
}
|
||||
var filesystems = []testFS{
|
||||
filesystems := []testFS{
|
||||
{"fakeFS", newFakeFilesystem("/foo")},
|
||||
}
|
||||
|
||||
@ -214,7 +214,7 @@ func TestFakeFSCaseSensitive(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFakeFSCaseInsensitive(t *testing.T) {
|
||||
var tests = []test{
|
||||
tests := []test{
|
||||
{"Read", testFakeFSRead},
|
||||
{"OpenFile", testFakeFSOpenFile},
|
||||
{"RemoveAll", testFakeFSRemoveAll},
|
||||
@ -236,7 +236,7 @@ func TestFakeFSCaseInsensitive(t *testing.T) {
|
||||
{"FileNameInsens", testFakeFSFileNameInsens},
|
||||
}
|
||||
|
||||
var filesystems = []testFS{
|
||||
filesystems := []testFS{
|
||||
{"fakeFS", newFakeFilesystem("/foobar?insens=true")},
|
||||
}
|
||||
|
||||
@ -287,7 +287,7 @@ func runTests(t *testing.T, tests []test, filesystems []testFS) {
|
||||
func testFakeFSCaseInsensitive(t *testing.T, fs Filesystem) {
|
||||
bs1 := []byte("test")
|
||||
|
||||
err := fs.Mkdir("/fUbar", 0755)
|
||||
err := fs.Mkdir("/fUbar", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -327,12 +327,12 @@ func testFakeFSCaseInsensitive(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSCaseInsensitiveMkdirAll(t *testing.T, fs Filesystem) {
|
||||
err := fs.MkdirAll("/fOO/Bar/bAz", 0755)
|
||||
err := fs.MkdirAll("/fOO/Bar/bAz", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
fd, err := fs.OpenFile("/foo/BaR/BaZ/tESt", os.O_CREATE, 0644)
|
||||
fd, err := fs.OpenFile("/foo/BaR/BaZ/tESt", os.O_CREATE, 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -430,7 +430,7 @@ func testFakeFSStatInsens(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSFileName(t *testing.T, fs Filesystem) {
|
||||
var testCases = []struct {
|
||||
testCases := []struct {
|
||||
create string
|
||||
open string
|
||||
}{
|
||||
@ -458,7 +458,7 @@ func testFakeFSFileName(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSFileNameInsens(t *testing.T, fs Filesystem) {
|
||||
var testCases = []struct {
|
||||
testCases := []struct {
|
||||
create string
|
||||
open string
|
||||
}{
|
||||
@ -486,7 +486,7 @@ func testFakeFSFileNameInsens(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSRename(t *testing.T, fs Filesystem) {
|
||||
if err := fs.MkdirAll("/foo/bar/baz", 0755); err != nil {
|
||||
if err := fs.MkdirAll("/foo/bar/baz", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -500,7 +500,7 @@ func testFakeFSRename(t *testing.T, fs Filesystem) {
|
||||
t.Errorf("rename to non-existent dir gave no error")
|
||||
}
|
||||
|
||||
if err := fs.MkdirAll("/baz/bar/foo", 0755); err != nil {
|
||||
if err := fs.MkdirAll("/baz/bar/foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -508,7 +508,7 @@ func testFakeFSRename(t *testing.T, fs Filesystem) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var dirs = []struct {
|
||||
dirs := []struct {
|
||||
dir string
|
||||
files []string
|
||||
}{
|
||||
@ -531,11 +531,11 @@ func testFakeFSRename(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSRenameInsensitive(t *testing.T, fs Filesystem) {
|
||||
if err := fs.MkdirAll("/baz/bar/foo", 0755); err != nil {
|
||||
if err := fs.MkdirAll("/baz/bar/foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := fs.MkdirAll("/foO/baR/baZ", 0755); err != nil {
|
||||
if err := fs.MkdirAll("/foO/baR/baZ", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -550,7 +550,7 @@ func testFakeFSRenameInsensitive(t *testing.T, fs Filesystem) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
var dirs = []struct {
|
||||
dirs := []struct {
|
||||
dir string
|
||||
files []string
|
||||
}{
|
||||
@ -582,7 +582,7 @@ func testFakeFSRenameInsensitive(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSMkdir(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -590,13 +590,13 @@ func testFakeFSMkdir(t *testing.T, fs Filesystem) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := fs.Mkdir("/foo", 0755); err == nil {
|
||||
if err := fs.Mkdir("/foo", 0o755); err == nil {
|
||||
t.Errorf("got no error while creating existing directory")
|
||||
}
|
||||
}
|
||||
|
||||
func testFakeFSMkdirInsens(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -604,37 +604,37 @@ func testFakeFSMkdirInsens(t *testing.T, fs Filesystem) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := fs.Mkdir("/FOO", 0755); err == nil {
|
||||
if err := fs.Mkdir("/FOO", 0o755); err == nil {
|
||||
t.Errorf("got no error while creating existing directory")
|
||||
}
|
||||
}
|
||||
|
||||
func testFakeFSOpenFile(t *testing.T, fs Filesystem) {
|
||||
fd, err := fs.OpenFile("foobar", os.O_RDONLY, 0664)
|
||||
fd, err := fs.OpenFile("foobar", os.O_RDONLY, 0o664)
|
||||
if err == nil {
|
||||
fd.Close()
|
||||
t.Fatalf("got no error opening a non-existing file")
|
||||
}
|
||||
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR|os.O_CREATE, 0664)
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR|os.O_CREATE, 0o664)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
fd.Close()
|
||||
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR|os.O_CREATE|os.O_EXCL, 0664)
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR|os.O_CREATE|os.O_EXCL, 0o664)
|
||||
if err == nil {
|
||||
fd.Close()
|
||||
t.Fatalf("created an existing file while told not to")
|
||||
}
|
||||
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR|os.O_CREATE, 0664)
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR|os.O_CREATE, 0o664)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
fd.Close()
|
||||
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR, 0664)
|
||||
fd, err = fs.OpenFile("foobar", os.O_RDWR, 0o664)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -642,31 +642,31 @@ func testFakeFSOpenFile(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSOpenFileInsens(t *testing.T, fs Filesystem) {
|
||||
fd, err := fs.OpenFile("FooBar", os.O_RDONLY, 0664)
|
||||
fd, err := fs.OpenFile("FooBar", os.O_RDONLY, 0o664)
|
||||
if err == nil {
|
||||
fd.Close()
|
||||
t.Fatalf("got no error opening a non-existing file")
|
||||
}
|
||||
|
||||
fd, err = fs.OpenFile("fOObar", os.O_RDWR|os.O_CREATE, 0664)
|
||||
fd, err = fs.OpenFile("fOObar", os.O_RDWR|os.O_CREATE, 0o664)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
fd.Close()
|
||||
|
||||
fd, err = fs.OpenFile("fOoBaR", os.O_RDWR|os.O_CREATE|os.O_EXCL, 0664)
|
||||
fd, err = fs.OpenFile("fOoBaR", os.O_RDWR|os.O_CREATE|os.O_EXCL, 0o664)
|
||||
if err == nil {
|
||||
fd.Close()
|
||||
t.Fatalf("created an existing file while told not to")
|
||||
}
|
||||
|
||||
fd, err = fs.OpenFile("FoObAr", os.O_RDWR|os.O_CREATE, 0664)
|
||||
fd, err = fs.OpenFile("FoObAr", os.O_RDWR|os.O_CREATE, 0o664)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
fd.Close()
|
||||
|
||||
fd, err = fs.OpenFile("FOOBAR", os.O_RDWR, 0664)
|
||||
fd, err = fs.OpenFile("FOOBAR", os.O_RDWR, 0o664)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -674,7 +674,7 @@ func testFakeFSOpenFileInsens(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSRemoveAll(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -702,7 +702,7 @@ func testFakeFSRemoveAll(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSRemoveAllInsens(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/Foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/Foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -729,7 +729,7 @@ func testFakeFSRemoveAllInsens(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSRemove(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/Foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/Foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -754,7 +754,7 @@ func testFakeFSRemove(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSRemoveInsens(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/Foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/Foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -778,7 +778,7 @@ func testFakeFSRemoveInsens(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSSameFile(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/Foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/Foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -810,7 +810,7 @@ func testFakeFSSameFile(t *testing.T, fs Filesystem) {
|
||||
}
|
||||
|
||||
func testFakeFSSameFileInsens(t *testing.T, fs Filesystem) {
|
||||
if err := fs.Mkdir("/Foo", 0755); err != nil {
|
||||
if err := fs.Mkdir("/Foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -104,7 +104,7 @@ func TestCanonicalize(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFileModeString(t *testing.T) {
|
||||
var fm FileMode = 0777
|
||||
var fm FileMode = 0o777
|
||||
exp := "-rwxrwxrwx"
|
||||
if fm.String() != exp {
|
||||
t.Fatalf("Got %v, expected %v", fm.String(), exp)
|
||||
|
@ -23,10 +23,10 @@ func testWalkSkipSymlink(t *testing.T, fsType FilesystemType, uri string) {
|
||||
|
||||
fs := NewFilesystem(fsType, uri)
|
||||
|
||||
if err := fs.MkdirAll("target/foo", 0755); err != nil {
|
||||
if err := fs.MkdirAll("target/foo", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := fs.Mkdir("towalk", 0755); err != nil {
|
||||
if err := fs.Mkdir("towalk", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := fs.CreateSymlink("target", "towalk/symlink"); err != nil {
|
||||
|
@ -7,10 +7,11 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"github.com/syncthing/syncthing/lib/config"
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
"github.com/syncthing/syncthing/lib/rand"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type blockPullReorderer interface {
|
||||
|
@ -14,9 +14,7 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/protocol"
|
||||
)
|
||||
|
||||
var (
|
||||
someBlocks = []protocol.BlockInfo{{Offset: 1}, {Offset: 2}, {Offset: 3}}
|
||||
)
|
||||
var someBlocks = []protocol.BlockInfo{{Offset: 1}, {Offset: 2}, {Offset: 3}}
|
||||
|
||||
func Test_chunk(t *testing.T) {
|
||||
type args struct {
|
||||
|
@ -10,9 +10,7 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("model", "The root hub")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("model", "The root hub")
|
||||
|
||||
func shouldDebug() bool {
|
||||
return l.ShouldDebug("model")
|
||||
|
@ -33,55 +33,56 @@ func TestDeviceDownloadState(t *testing.T) {
|
||||
shouldHaveIndexesFrom []protocol.FileDownloadProgressUpdate
|
||||
shouldNotHaveIndexesFrom []protocol.FileDownloadProgressUpdate
|
||||
}{
|
||||
{ //1
|
||||
{ // 1
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p2, f1v2p1, f1v2p2},
|
||||
},
|
||||
{ //2
|
||||
{ // 2
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v2p1, f1v2p2},
|
||||
},
|
||||
{ //3
|
||||
{ // 3
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v1del},
|
||||
nil,
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p1, f1v2p2}},
|
||||
{ //4
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p1, f1v2p2},
|
||||
},
|
||||
{ // 4
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2del},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v2p1, f1v2p2},
|
||||
},
|
||||
{ //5
|
||||
{ // 5
|
||||
// v2 replaces old v1 data
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v2p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p2},
|
||||
},
|
||||
{ //6
|
||||
{ // 6
|
||||
// v1 delete on v2 data does nothing
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p1, f1v1del},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v2p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p2},
|
||||
},
|
||||
{ //7
|
||||
{ // 7
|
||||
// v2 replacees v1, v2 gets deleted, and v2 part 2 gets added.
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p1, f1v2del, f1v2p2},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v2p2},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f1v1p2, f1v2p1},
|
||||
},
|
||||
// Multiple files in one go
|
||||
{ //8
|
||||
{ // 8
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f2v1p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f2v1p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p2, f2v1p2},
|
||||
},
|
||||
{ //9
|
||||
{ // 9
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f2v1p1, f2v1del},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f2v1p1, f2v1p1},
|
||||
},
|
||||
{ //10
|
||||
{ // 10
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f2v1del, f2v1p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p1, f2v1p1},
|
||||
[]protocol.FileDownloadProgressUpdate{f1v1p2, f2v1p2},
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("nat", "NAT discovery and port mapping")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("nat", "NAT discovery and port mapping")
|
||||
|
@ -101,7 +101,7 @@ func (w *AtomicWriter) Close() error {
|
||||
// On Windows, we might not be allowed to rename over the file
|
||||
// because it's read-only. Get us some write permissions and try
|
||||
// again.
|
||||
_ = w.fs.Chmod(w.path, 0644)
|
||||
_ = w.fs.Chmod(w.path, 0o644)
|
||||
err = w.fs.Rename(w.next.Name(), w.path)
|
||||
}
|
||||
if err != nil {
|
||||
|
@ -17,7 +17,7 @@ func TestCreateAtomicCreate(t *testing.T) {
|
||||
os.RemoveAll("testdata")
|
||||
defer os.RemoveAll("testdata")
|
||||
|
||||
if err := os.Mkdir("testdata", 0755); err != nil {
|
||||
if err := os.Mkdir("testdata", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -52,10 +52,11 @@ func TestCreateAtomicCreate(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCreateAtomicReplace(t *testing.T) {
|
||||
testCreateAtomicReplace(t, 0666)
|
||||
testCreateAtomicReplace(t, 0o666)
|
||||
}
|
||||
|
||||
func TestCreateAtomicReplaceReadOnly(t *testing.T) {
|
||||
testCreateAtomicReplace(t, 0444) // windows compatible read-only bits
|
||||
testCreateAtomicReplace(t, 0o444) // windows compatible read-only bits
|
||||
}
|
||||
|
||||
func testCreateAtomicReplace(t *testing.T, oldPerms os.FileMode) {
|
||||
@ -66,7 +67,7 @@ func testCreateAtomicReplace(t *testing.T, oldPerms os.FileMode) {
|
||||
|
||||
os.RemoveAll(testdir)
|
||||
|
||||
if err := os.Mkdir(testdir, 0755); err != nil {
|
||||
if err := os.Mkdir(testdir, 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ func TestTempFilePermissions(t *testing.T) {
|
||||
// The temp file should have 0600 permissions at the most, or we have a
|
||||
// security problem in CreateAtomic.
|
||||
t.Logf("Got 0%03o", info.Mode())
|
||||
if info.Mode()&^0600 != 0 {
|
||||
if info.Mode()&^0o600 != 0 {
|
||||
t.Errorf("Permission 0%03o is too generous", info.Mode())
|
||||
}
|
||||
}
|
||||
|
@ -84,14 +84,14 @@ func Copy(method fs.CopyRangeMethod, src, dst fs.Filesystem, from, to string) (e
|
||||
func withPreparedTarget(filesystem fs.Filesystem, from, to string, f func() error) error {
|
||||
// Make sure the destination directory is writeable
|
||||
toDir := filepath.Dir(to)
|
||||
if info, err := filesystem.Stat(toDir); err == nil && info.IsDir() && info.Mode()&0200 == 0 {
|
||||
filesystem.Chmod(toDir, 0755)
|
||||
if info, err := filesystem.Stat(toDir); err == nil && info.IsDir() && info.Mode()&0o200 == 0 {
|
||||
filesystem.Chmod(toDir, 0o755)
|
||||
defer filesystem.Chmod(toDir, info.Mode())
|
||||
}
|
||||
|
||||
// On Windows, make sure the destination file is writeable (or we can't delete it)
|
||||
if build.IsWindows {
|
||||
filesystem.Chmod(to, 0666)
|
||||
filesystem.Chmod(to, 0o666)
|
||||
if !strings.EqualFold(from, to) {
|
||||
err := filesystem.Remove(to)
|
||||
if err != nil && !fs.IsNotExist(err) {
|
||||
|
@ -16,8 +16,10 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/fs"
|
||||
)
|
||||
|
||||
var rand uint32
|
||||
var randmu sync.Mutex
|
||||
var (
|
||||
rand uint32
|
||||
randmu sync.Mutex
|
||||
)
|
||||
|
||||
func reseed() uint32 {
|
||||
return uint32(time.Now().UnixNano() + int64(os.Getpid()))
|
||||
@ -48,7 +50,7 @@ func TempFile(filesystem fs.Filesystem, dir, prefix string) (f fs.File, err erro
|
||||
nconflict := 0
|
||||
for i := 0; i < 10000; i++ {
|
||||
name := filepath.Join(dir, prefix+nextSuffix())
|
||||
f, err = filesystem.OpenFile(name, fs.OptReadWrite|fs.OptCreate|fs.OptExclusive, 0600)
|
||||
f, err = filesystem.OpenFile(name, fs.OptReadWrite|fs.OptCreate|fs.OptExclusive, 0o600)
|
||||
if fs.IsExist(err) {
|
||||
if nconflict++; nconflict > 10 {
|
||||
randmu.Lock()
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("pmp", "NAT-PMP discovery and port mapping")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("pmp", "NAT-PMP discovery and port mapping")
|
||||
|
@ -317,10 +317,10 @@ func PermsEqual(a, b uint32) bool {
|
||||
if build.IsWindows {
|
||||
// There is only writeable and read only, represented for user, group
|
||||
// and other equally. We only compare against user.
|
||||
return a&0600 == b&0600
|
||||
return a&0o600 == b&0o600
|
||||
}
|
||||
// All bits count
|
||||
return a&0777 == b&0777
|
||||
return a&0o777 == b&0o777
|
||||
}
|
||||
|
||||
// BlocksEqual returns true when the two files have identical block lists.
|
||||
|
@ -6,6 +6,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("protocol", "The BEP protocol")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("protocol", "The BEP protocol")
|
||||
|
@ -4,19 +4,21 @@ package protocol
|
||||
|
||||
import "testing"
|
||||
|
||||
var formatted = "P56IOI7-MZJNU2Y-IQGDREY-DM2MGTI-MGL3BXN-PQ6W5BM-TBBZ4TJ-XZWICQ2"
|
||||
var formatCases = []string{
|
||||
"P56IOI-7MZJNU-2IQGDR-EYDM2M-GTMGL3-BXNPQ6-W5BTBB-Z4TJXZ-WICQ",
|
||||
"P56IOI-7MZJNU2Y-IQGDR-EYDM2M-GTI-MGL3-BXNPQ6-W5BM-TBB-Z4TJXZ-WICQ2",
|
||||
"P56IOI7 MZJNU2I QGDREYD M2MGTMGL 3BXNPQ6W 5BTB BZ4T JXZWICQ",
|
||||
"P56IOI7 MZJNU2Y IQGDREY DM2MGTI MGL3BXN PQ6W5BM TBBZ4TJ XZWICQ2",
|
||||
"P56IOI7MZJNU2IQGDREYDM2MGTMGL3BXNPQ6W5BTBBZ4TJXZWICQ",
|
||||
"p56ioi7mzjnu2iqgdreydm2mgtmgl3bxnpq6w5btbbz4tjxzwicq",
|
||||
"P56IOI7MZJNU2YIQGDREYDM2MGTIMGL3BXNPQ6W5BMTBBZ4TJXZWICQ2",
|
||||
"P561017MZJNU2YIQGDREYDM2MGTIMGL3BXNPQ6W5BMT88Z4TJXZWICQ2",
|
||||
"p56ioi7mzjnu2yiqgdreydm2mgtimgl3bxnpq6w5bmtbbz4tjxzwicq2",
|
||||
"p561017mzjnu2yiqgdreydm2mgtimgl3bxnpq6w5bmt88z4tjxzwicq2",
|
||||
}
|
||||
var (
|
||||
formatted = "P56IOI7-MZJNU2Y-IQGDREY-DM2MGTI-MGL3BXN-PQ6W5BM-TBBZ4TJ-XZWICQ2"
|
||||
formatCases = []string{
|
||||
"P56IOI-7MZJNU-2IQGDR-EYDM2M-GTMGL3-BXNPQ6-W5BTBB-Z4TJXZ-WICQ",
|
||||
"P56IOI-7MZJNU2Y-IQGDR-EYDM2M-GTI-MGL3-BXNPQ6-W5BM-TBB-Z4TJXZ-WICQ2",
|
||||
"P56IOI7 MZJNU2I QGDREYD M2MGTMGL 3BXNPQ6W 5BTB BZ4T JXZWICQ",
|
||||
"P56IOI7 MZJNU2Y IQGDREY DM2MGTI MGL3BXN PQ6W5BM TBBZ4TJ XZWICQ2",
|
||||
"P56IOI7MZJNU2IQGDREYDM2MGTMGL3BXNPQ6W5BTBBZ4TJXZWICQ",
|
||||
"p56ioi7mzjnu2iqgdreydm2mgtmgl3bxnpq6w5btbbz4tjxzwicq",
|
||||
"P56IOI7MZJNU2YIQGDREYDM2MGTIMGL3BXNPQ6W5BMTBBZ4TJXZWICQ2",
|
||||
"P561017MZJNU2YIQGDREYDM2MGTIMGL3BXNPQ6W5BMT88Z4TJXZWICQ2",
|
||||
"p56ioi7mzjnu2yiqgdreydm2mgtimgl3bxnpq6w5bmtbbz4tjxzwicq2",
|
||||
"p561017mzjnu2yiqgdreydm2mgtimgl3bxnpq6w5bmt88z4tjxzwicq2",
|
||||
}
|
||||
)
|
||||
|
||||
func TestFormatDeviceID(t *testing.T) {
|
||||
for i, tc := range formatCases {
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("rc", "Remote control package")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("rc", "Remote control package")
|
||||
|
@ -6,6 +6,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("relay", "")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("relay", "")
|
||||
|
@ -29,9 +29,11 @@ type header struct {
|
||||
messageLength int32
|
||||
}
|
||||
|
||||
type Ping struct{}
|
||||
type Pong struct{}
|
||||
type RelayFull struct{}
|
||||
type (
|
||||
Ping struct{}
|
||||
Pong struct{}
|
||||
RelayFull struct{}
|
||||
)
|
||||
|
||||
type JoinRelayRequest struct {
|
||||
Token string
|
||||
|
@ -60,6 +60,7 @@ func (o *header) UnmarshalXDR(bs []byte) error {
|
||||
u := &xdr.Unmarshaller{Data: bs}
|
||||
return o.UnmarshalXDRFrom(u)
|
||||
}
|
||||
|
||||
func (o *header) UnmarshalXDRFrom(u *xdr.Unmarshaller) error {
|
||||
o.magic = u.UnmarshalUint32()
|
||||
o.messageType = int32(u.UnmarshalUint32())
|
||||
@ -81,6 +82,7 @@ struct Ping {
|
||||
func (Ping) XDRSize() int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (Ping) MarshalXDR() ([]byte, error) {
|
||||
return nil, nil
|
||||
}
|
||||
@ -115,6 +117,7 @@ struct Pong {
|
||||
func (Pong) XDRSize() int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (Pong) MarshalXDR() ([]byte, error) {
|
||||
return nil, nil
|
||||
}
|
||||
@ -149,6 +152,7 @@ struct RelayFull {
|
||||
func (RelayFull) XDRSize() int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (RelayFull) MarshalXDR() ([]byte, error) {
|
||||
return nil, nil
|
||||
}
|
||||
@ -215,6 +219,7 @@ func (o *JoinRelayRequest) UnmarshalXDR(bs []byte) error {
|
||||
u := &xdr.Unmarshaller{Data: bs}
|
||||
return o.UnmarshalXDRFrom(u)
|
||||
}
|
||||
|
||||
func (o *JoinRelayRequest) UnmarshalXDRFrom(u *xdr.Unmarshaller) error {
|
||||
o.Token = u.UnmarshalString()
|
||||
return u.Error
|
||||
@ -269,6 +274,7 @@ func (o *JoinSessionRequest) UnmarshalXDR(bs []byte) error {
|
||||
u := &xdr.Unmarshaller{Data: bs}
|
||||
return o.UnmarshalXDRFrom(u)
|
||||
}
|
||||
|
||||
func (o *JoinSessionRequest) UnmarshalXDRFrom(u *xdr.Unmarshaller) error {
|
||||
o.Key = u.UnmarshalBytesMax(32)
|
||||
return u.Error
|
||||
@ -325,6 +331,7 @@ func (o *Response) UnmarshalXDR(bs []byte) error {
|
||||
u := &xdr.Unmarshaller{Data: bs}
|
||||
return o.UnmarshalXDRFrom(u)
|
||||
}
|
||||
|
||||
func (o *Response) UnmarshalXDRFrom(u *xdr.Unmarshaller) error {
|
||||
o.Code = int32(u.UnmarshalUint32())
|
||||
o.Message = u.UnmarshalString()
|
||||
@ -380,6 +387,7 @@ func (o *ConnectRequest) UnmarshalXDR(bs []byte) error {
|
||||
u := &xdr.Unmarshaller{Data: bs}
|
||||
return o.UnmarshalXDRFrom(u)
|
||||
}
|
||||
|
||||
func (o *ConnectRequest) UnmarshalXDRFrom(u *xdr.Unmarshaller) error {
|
||||
o.ID = u.UnmarshalBytesMax(32)
|
||||
return u.Error
|
||||
@ -462,6 +470,7 @@ func (o *SessionInvitation) UnmarshalXDR(bs []byte) error {
|
||||
u := &xdr.Unmarshaller{Data: bs}
|
||||
return o.UnmarshalXDRFrom(u)
|
||||
}
|
||||
|
||||
func (o *SessionInvitation) UnmarshalXDRFrom(u *xdr.Unmarshaller) error {
|
||||
o.From = u.UnmarshalBytesMax(32)
|
||||
o.Key = u.UnmarshalBytesMax(32)
|
||||
|
@ -27,43 +27,67 @@ var blocksTestData = []struct {
|
||||
hash []string
|
||||
weakhash []uint32
|
||||
}{
|
||||
{[]byte(""), 1024, []string{
|
||||
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},
|
||||
{
|
||||
[]byte(""), 1024,
|
||||
[]string{
|
||||
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
},
|
||||
[]uint32{0},
|
||||
},
|
||||
{[]byte("contents"), 1024, []string{
|
||||
"d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"},
|
||||
{
|
||||
[]byte("contents"), 1024,
|
||||
[]string{
|
||||
"d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8",
|
||||
},
|
||||
[]uint32{0x0f3a036f},
|
||||
},
|
||||
{[]byte("contents"), 9, []string{
|
||||
"d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"},
|
||||
{
|
||||
[]byte("contents"), 9,
|
||||
[]string{
|
||||
"d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8",
|
||||
},
|
||||
[]uint32{0x0f3a036f},
|
||||
},
|
||||
{[]byte("contents"), 8, []string{
|
||||
"d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8"},
|
||||
{
|
||||
[]byte("contents"), 8,
|
||||
[]string{
|
||||
"d1b2a59fbea7e20077af9f91b27e95e865061b270be03ff539ab3b73587882e8",
|
||||
},
|
||||
[]uint32{0x0f3a036f},
|
||||
},
|
||||
{[]byte("contents"), 7, []string{
|
||||
"ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73",
|
||||
"043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89"},
|
||||
{
|
||||
[]byte("contents"), 7,
|
||||
[]string{
|
||||
"ed7002b439e9ac845f22357d822bac1444730fbdb6016d3ec9432297b9ec9f73",
|
||||
"043a718774c572bd8a25adbeb1bfcd5c0256ae11cecf9f9c3f925d0e52beaf89",
|
||||
},
|
||||
[]uint32{0x0bcb02fc, 0x00740074},
|
||||
},
|
||||
{[]byte("contents"), 3, []string{
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3",
|
||||
"44ad63f60af0f6db6fdde6d5186ef78176367df261fa06be3079b6c80c8adba4"},
|
||||
{
|
||||
[]byte("contents"), 3,
|
||||
[]string{
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3",
|
||||
"44ad63f60af0f6db6fdde6d5186ef78176367df261fa06be3079b6c80c8adba4",
|
||||
},
|
||||
[]uint32{0x02780141, 0x02970148, 0x015d00e8},
|
||||
},
|
||||
{[]byte("conconts"), 3, []string{
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"44ad63f60af0f6db6fdde6d5186ef78176367df261fa06be3079b6c80c8adba4"},
|
||||
{
|
||||
[]byte("conconts"), 3,
|
||||
[]string{
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"44ad63f60af0f6db6fdde6d5186ef78176367df261fa06be3079b6c80c8adba4",
|
||||
},
|
||||
[]uint32{0x02780141, 0x02780141, 0x015d00e8},
|
||||
},
|
||||
{[]byte("contenten"), 3, []string{
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3",
|
||||
"e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3"},
|
||||
{
|
||||
[]byte("contenten"), 3,
|
||||
[]string{
|
||||
"1143da2bc54c495c4be31d3868785d39ffdfd56df5668f0645d8f14d47647952",
|
||||
"e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3",
|
||||
"e4432baa90819aaef51d2a7f8e148bf7e679610f3173752fabb4dcb2d0f418d3",
|
||||
},
|
||||
[]uint32{0x02780141, 0x02970148, 0x02970148},
|
||||
},
|
||||
}
|
||||
@ -72,7 +96,6 @@ func TestBlocks(t *testing.T) {
|
||||
for testNo, test := range blocksTestData {
|
||||
buf := bytes.NewBuffer(test.data)
|
||||
blocks, err := Blocks(context.TODO(), buf, test.blocksize, -1, nil, true)
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("scanner", "File change detection and hashing")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("scanner", "File change detection and hashing")
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("stats", "Persistent device and folder statistics")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("stats", "Persistent device and folder statistics")
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("stun", "STUN functionality")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("stun", "STUN functionality")
|
||||
|
@ -10,9 +10,7 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("app", "Main run facility")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("app", "Main run facility")
|
||||
|
||||
func shouldDebug() bool {
|
||||
return l.ShouldDebug("app")
|
||||
|
@ -33,7 +33,7 @@ func EnsureDir(dir string, mode fs.FileMode) error {
|
||||
// Apparently the stat may fail even though the mkdirall passed. If it
|
||||
// does, we'll just assume things are in order and let other things
|
||||
// fail (like loading or creating the config...).
|
||||
currentMode := fi.Mode() & 0777
|
||||
currentMode := fi.Mode() & 0o777
|
||||
if currentMode != mode {
|
||||
err := fs.Chmod(".", mode)
|
||||
// This can fail on crappy filesystems, nothing we can do about it.
|
||||
@ -139,7 +139,7 @@ func copyFile(src, dst string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := os.WriteFile(dst, bs, 0600); err != nil {
|
||||
if err := os.WriteFile(dst, bs, 0o600); err != nil {
|
||||
// Attempt to clean up
|
||||
os.Remove(dst)
|
||||
return err
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("upgrade", "Binary upgrades")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("upgrade", "Binary upgrades")
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("upnp", "UPnP discovery and port mapping")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("upnp", "UPnP discovery and port mapping")
|
||||
|
@ -210,7 +210,6 @@ USER-AGENT: syncthing/%s
|
||||
proto = "udp6"
|
||||
}
|
||||
socket, err := net.ListenMulticastUDP(proto, intf, &net.UDPAddr{IP: ssdp.IP})
|
||||
|
||||
if err != nil {
|
||||
if runtime.GOOS == "windows" && ip6 {
|
||||
// Requires https://github.com/golang/go/issues/63529 to be fixed.
|
||||
@ -257,7 +256,7 @@ loop:
|
||||
if e, ok := err.(net.Error); ok && e.Timeout() {
|
||||
continue // continue reading
|
||||
}
|
||||
l.Infoln("UPnP read:", err) //legitimate error, not a timeout.
|
||||
l.Infoln("UPnP read:", err) // legitimate error, not a timeout.
|
||||
break
|
||||
}
|
||||
|
||||
@ -411,7 +410,6 @@ func localIPv4Fallback(ctx context.Context, url *url.URL) (net.IP, error) {
|
||||
defer cancel()
|
||||
|
||||
conn, err := dialer.DialContext(timeoutCtx, "udp4", url.Host)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -13,8 +13,7 @@ import (
|
||||
)
|
||||
|
||||
func TestExternalIPParsing(t *testing.T) {
|
||||
soapResponse :=
|
||||
[]byte(`<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
soapResponse := []byte(`<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
<s:Body>
|
||||
<u:GetExternalIPAddressResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
|
||||
<NewExternalIPAddress>1.2.3.4</NewExternalIPAddress>
|
||||
@ -34,8 +33,7 @@ func TestExternalIPParsing(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSoapFaultParsing(t *testing.T) {
|
||||
soapResponse :=
|
||||
[]byte(`<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
soapResponse := []byte(`<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||
<s:Body>
|
||||
<s:Fault>
|
||||
<faultcode>s:Client</faultcode>
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("ur", "Usage reporting")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("ur", "Usage reporting")
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("versioner", "File versioning")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("versioner", "File versioning")
|
||||
|
@ -27,7 +27,7 @@ import (
|
||||
// └── remove21
|
||||
// └── remove22
|
||||
func TestEmptyDirs(t *testing.T) {
|
||||
var paths = []struct {
|
||||
paths := []struct {
|
||||
path string
|
||||
isFile bool
|
||||
}{
|
||||
@ -44,7 +44,7 @@ func TestEmptyDirs(t *testing.T) {
|
||||
{"remove2/remove21/remove22", false},
|
||||
}
|
||||
|
||||
var expected = []string{
|
||||
expected := []string{
|
||||
"remove2/remove21/remove22",
|
||||
"remove2/remove21",
|
||||
"remove2",
|
||||
|
@ -81,10 +81,10 @@ func prepForRemoval(t *testing.T, file string) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(filepath.Dir(file), 0755); err != nil {
|
||||
if err := os.MkdirAll(filepath.Dir(file), 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(file, []byte("hello\n"), 0644); err != nil {
|
||||
if err := os.WriteFile(file, []byte("hello\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ type simple struct {
|
||||
}
|
||||
|
||||
func newSimple(cfg config.FolderConfiguration) Versioner {
|
||||
var keep, err = strconv.Atoi(cfg.Versioning.Params["keep"])
|
||||
keep, err := strconv.Atoi(cfg.Versioning.Params["keep"])
|
||||
cleanoutDays, _ := strconv.Atoi(cfg.Versioning.Params["cleanoutDays"])
|
||||
// On error we default to 0, "do not clean out the versioned items"
|
||||
|
||||
|
@ -134,7 +134,7 @@ func TestCreateVersionPath(t *testing.T) {
|
||||
|
||||
// Create a test dir and file
|
||||
tmpDir := t.TempDir()
|
||||
if err := os.WriteFile(filepath.Join(tmpDir, archiveFile), []byte("sup"), 0644); err != nil {
|
||||
if err := os.WriteFile(filepath.Join(tmpDir, archiveFile), []byte("sup"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -182,7 +182,7 @@ func readFile(t *testing.T, filesystem fs.Filesystem, name string) string {
|
||||
}
|
||||
|
||||
func writeFile(t *testing.T, filesystem fs.Filesystem, name, content string) {
|
||||
fd, err := filesystem.OpenFile(name, fs.OptReadWrite|fs.OptCreate, 0777)
|
||||
fd, err := filesystem.OpenFile(name, fs.OptReadWrite|fs.OptCreate, 0o777)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -213,7 +213,7 @@ func TestTrashcanCleanOut(t *testing.T) {
|
||||
|
||||
v := newTrashcan(cfg)
|
||||
|
||||
var testcases = map[string]bool{
|
||||
testcases := map[string]bool{
|
||||
".stversions/file1": false,
|
||||
".stversions/file2": true,
|
||||
".stversions/keep1/file1": false,
|
||||
@ -229,7 +229,7 @@ func TestTrashcanCleanOut(t *testing.T) {
|
||||
t.Run("trashcan versioner trashcan clean up", func(t *testing.T) {
|
||||
oldTime := time.Now().Add(-8 * 24 * time.Hour)
|
||||
for file, shouldRemove := range testcases {
|
||||
fs.MkdirAll(filepath.Dir(file), 0777)
|
||||
fs.MkdirAll(filepath.Dir(file), 0o777)
|
||||
|
||||
writeFile(t, fs, file, "some content")
|
||||
|
||||
|
@ -10,6 +10,4 @@ import (
|
||||
"github.com/syncthing/syncthing/lib/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
l = logger.DefaultLogger.NewFacility("watchaggregator", "Filesystem event watcher")
|
||||
)
|
||||
var l = logger.DefaultLogger.NewFacility("watchaggregator", "Filesystem event watcher")
|
||||
|
@ -23,8 +23,10 @@ import (
|
||||
"github.com/chmduquesne/rollinghash/buzhash64"
|
||||
)
|
||||
|
||||
const testFile = "../model/testdata/tmpfile"
|
||||
const size = 128 << 10
|
||||
const (
|
||||
testFile = "../model/testdata/tmpfile"
|
||||
size = 128 << 10
|
||||
)
|
||||
|
||||
func BenchmarkFind1MFile(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
@ -96,7 +98,6 @@ func BenchmarkBlock(b *testing.B) {
|
||||
bbb.SetBytes(testSize)
|
||||
bbb.ReportAllocs()
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -144,7 +145,6 @@ func BenchmarkRoll(b *testing.B) {
|
||||
bbb.SetBytes(testSize)
|
||||
bbb.ReportAllocs()
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -65,5 +65,4 @@ func walk(w *csv.Writer, prefix string, data interface{}) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -119,7 +119,7 @@ func main() {
|
||||
bs := readAll(htmlFile)
|
||||
bs = authorsRe.ReplaceAll(bs, []byte("id=\"contributor-list\">\n"+replacement+"\n </div>"))
|
||||
|
||||
if err := os.WriteFile(htmlFile, bs, 0644); err != nil {
|
||||
if err := os.WriteFile(htmlFile, bs, 0o644); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,11 @@ import (
|
||||
"golang.org/x/net/html"
|
||||
)
|
||||
|
||||
var trans = make(map[string]interface{})
|
||||
var attrRe = regexp.MustCompile(`\{\{\s*'([^']+)'\s+\|\s+translate\s*\}\}`)
|
||||
var attrReCond = regexp.MustCompile(`\{\{.+\s+\?\s+'([^']+)'\s+:\s+'([^']+)'\s+\|\s+translate\s*\}\}`)
|
||||
var (
|
||||
trans = make(map[string]interface{})
|
||||
attrRe = regexp.MustCompile(`\{\{\s*'([^']+)'\s+\|\s+translate\s*\}\}`)
|
||||
attrReCond = regexp.MustCompile(`\{\{.+\s+\?\s+'([^']+)'\s+:\s+'([^']+)'\s+\|\s+translate\s*\}\}`)
|
||||
)
|
||||
|
||||
// Find both $translate.instant("…") and $translate.instant("…",…) in JS.
|
||||
// Consider single quote variants too.
|
||||
@ -204,7 +206,7 @@ func main() {
|
||||
}
|
||||
fd.Close()
|
||||
|
||||
var guiDir = os.Args[2]
|
||||
guiDir := os.Args[2]
|
||||
|
||||
filepath.Walk(guiDir, walkerFor(guiDir))
|
||||
collectThemes(guiDir)
|
||||
|
@ -23,7 +23,7 @@ func TestCLIReset(t *testing.T) {
|
||||
// Create directories that reset will remove
|
||||
|
||||
for _, dir := range dirs {
|
||||
err := os.Mkdir(dir, 0755)
|
||||
err := os.Mkdir(dir, 0o755)
|
||||
if err != nil && !os.IsExist(err) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ func TestConflictsDefault(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
fd, err = os.OpenFile("s1/testfile.txt", os.O_WRONLY|os.O_APPEND, 0644)
|
||||
fd, err = os.OpenFile("s1/testfile.txt", os.O_WRONLY|os.O_APPEND, 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -100,7 +100,7 @@ func TestConflictsDefault(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
fd, err = os.OpenFile("s2/testfile.txt", os.O_WRONLY|os.O_APPEND, 0644)
|
||||
fd, err = os.OpenFile("s2/testfile.txt", os.O_WRONLY|os.O_APPEND, 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -150,7 +150,7 @@ func TestConflictsDefault(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
fd, err = os.OpenFile("s2/testfile.txt", os.O_WRONLY|os.O_APPEND, 0644)
|
||||
fd, err = os.OpenFile("s2/testfile.txt", os.O_WRONLY|os.O_APPEND, 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -204,37 +204,37 @@ func TestConflictsInitialMerge(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = os.Mkdir("s1", 0755)
|
||||
err = os.Mkdir("s1", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.Mkdir("s2", 0755)
|
||||
err = os.Mkdir("s2", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// File 1 is a conflict
|
||||
|
||||
err = os.WriteFile("s1/file1", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s1/file1", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = os.WriteFile("s2/file1", []byte("goodbye\n"), 0644)
|
||||
err = os.WriteFile("s2/file1", []byte("goodbye\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// File 2 exists on s1 only
|
||||
|
||||
err = os.WriteFile("s1/file2", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s1/file2", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// File 3 exists on s2 only
|
||||
|
||||
err = os.WriteFile("s2/file3", []byte("goodbye\n"), 0644)
|
||||
err = os.WriteFile("s2/file3", []byte("goodbye\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -303,26 +303,26 @@ func TestConflictsIndexReset(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = os.Mkdir("s1", 0755)
|
||||
err = os.Mkdir("s1", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.Mkdir("s2", 0755)
|
||||
err = os.Mkdir("s2", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Three files on s1
|
||||
|
||||
err = os.WriteFile("s1/file1", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s1/file1", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.WriteFile("s1/file2", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s1/file2", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.WriteFile("s2/file3", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s2/file3", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -370,7 +370,7 @@ func TestConflictsIndexReset(t *testing.T) {
|
||||
// locally after we rest the index, unless we have a fix for that.
|
||||
|
||||
for i := 0; i < 5; i++ {
|
||||
err = os.WriteFile("s2/file2", []byte("hello1\n"), 0644)
|
||||
err = os.WriteFile("s2/file2", []byte("hello1\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -392,7 +392,7 @@ func TestConflictsIndexReset(t *testing.T) {
|
||||
|
||||
// s1/file1 (remote) changes while receiver is down
|
||||
|
||||
err = os.WriteFile("s1/file1", []byte("goodbye\n"), 0644)
|
||||
err = os.WriteFile("s1/file1", []byte("goodbye\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -405,7 +405,7 @@ func TestConflictsIndexReset(t *testing.T) {
|
||||
|
||||
// s2/file2 (local) changes while receiver is down
|
||||
|
||||
err = os.WriteFile("s2/file2", []byte("goodbye\n"), 0644)
|
||||
err = os.WriteFile("s2/file2", []byte("goodbye\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -456,33 +456,33 @@ func TestConflictsSameContent(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
err = os.Mkdir("s1", 0755)
|
||||
err = os.Mkdir("s1", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.Mkdir("s2", 0755)
|
||||
err = os.Mkdir("s2", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Two files on s1
|
||||
|
||||
err = os.WriteFile("s1/file1", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s1/file1", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.WriteFile("s1/file2", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s1/file2", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Two files on s2, content differs in file1 only, timestamps differ on both.
|
||||
|
||||
err = os.WriteFile("s2/file1", []byte("goodbye\n"), 0644)
|
||||
err = os.WriteFile("s2/file1", []byte("goodbye\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.WriteFile("s2/file2", []byte("hello\n"), 0644)
|
||||
err = os.WriteFile("s2/file2", []byte("hello\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ func TestRescanWithDelay(t *testing.T) {
|
||||
}
|
||||
|
||||
log.Println("Generating .stignore...")
|
||||
err = os.WriteFile("s1/.stignore", []byte("some ignore data\n"), 0644)
|
||||
err = os.WriteFile("s1/.stignore", []byte("some ignore data\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -90,14 +90,14 @@ func testFileTypeChange(t *testing.T) {
|
||||
|
||||
// A directory that we will replace with a file later
|
||||
|
||||
err = os.Mkdir("s1/emptyDirToReplace", 0755)
|
||||
err = os.Mkdir("s1/emptyDirToReplace", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// A directory with files that we will replace with a file later
|
||||
|
||||
err = os.Mkdir("s1/dirToReplace", 0755)
|
||||
err = os.Mkdir("s1/dirToReplace", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -141,7 +141,7 @@ func testFileTypeChange(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.Mkdir("s1/fileToReplace", 0755)
|
||||
err = os.Mkdir("s1/fileToReplace", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -223,7 +223,7 @@ func setupAPIBench() *rc.Process {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = os.WriteFile("s1/knownfile", []byte("somedatahere"), 0644)
|
||||
err = os.WriteFile("s1/knownfile", []byte("somedatahere"), 0o644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ func TestIgnores(t *testing.T) {
|
||||
files := []string{"f1", "f2", "f3", "f4", "f11", "f12", "f13", "f14", "d1/f1.TXT"}
|
||||
|
||||
for _, dir := range dirs {
|
||||
err := os.Mkdir(filepath.Join("s1", dir), 0755)
|
||||
err := os.Mkdir(filepath.Join("s1", dir), 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -68,7 +68,7 @@ func TestIgnores(t *testing.T) {
|
||||
|
||||
err = os.WriteFile("s1/.stignore",
|
||||
[]byte("f1*\nf2\nd1*\nd2\ns1*\ns2\n(?i)*.txt"), // [fds][34] only non-ignored items
|
||||
0644)
|
||||
0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -91,7 +91,7 @@ func TestIgnores(t *testing.T) {
|
||||
// Change the pattern to include some of the files and dirs previously ignored
|
||||
|
||||
time.Sleep(1100 * time.Millisecond)
|
||||
err = os.WriteFile("s1/.stignore", []byte("f2\nd2\ns2\n"), 0644)
|
||||
err = os.WriteFile("s1/.stignore", []byte("f2\nd2\ns2\n"), 0o644)
|
||||
|
||||
// Rescan and verify that we see them
|
||||
|
||||
|
@ -90,7 +90,7 @@ func TestOverride(t *testing.T) {
|
||||
|
||||
log.Println("Changing file on sendRecv side...")
|
||||
|
||||
fd, err = os.OpenFile("s2/testfile.txt", os.O_WRONLY|os.O_APPEND, 0644)
|
||||
fd, err = os.OpenFile("s2/testfile.txt", os.O_WRONLY|os.O_APPEND, 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ func TestRescanInParallel(t *testing.T) {
|
||||
}
|
||||
|
||||
log.Println("Generating .stignore...")
|
||||
err = os.WriteFile("s1/.stignore", []byte("some ignore data\n"), 0644)
|
||||
err = os.WriteFile("s1/.stignore", []byte("some ignore data\n"), 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ func TestReset(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.Mkdir("s1", 0755); err != nil {
|
||||
if err := os.Mkdir("s1", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ func TestReset(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.Mkdir("s1", 0755); err != nil {
|
||||
if err := os.Mkdir("s1", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if fd, err := os.Create("s1/.stfolder"); err != nil {
|
||||
@ -146,7 +146,7 @@ func createFiles(t *testing.T) int {
|
||||
const n = 8
|
||||
for i := 0; i < n; i++ {
|
||||
file := fmt.Sprintf("f%d", i)
|
||||
if err := os.WriteFile(filepath.Join("s1", file), []byte("data"), 0644); err != nil {
|
||||
if err := os.WriteFile(filepath.Join("s1", file), []byte("data"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ func TestScanSubdir(t *testing.T) {
|
||||
|
||||
// 2
|
||||
log.Println("Creating a file in an unknown directory")
|
||||
os.MkdirAll("s1/filetest", 0755)
|
||||
os.MkdirAll("s1/filetest", 0o755)
|
||||
if fd, err := os.Create("s1/filetest/file1.txt"); err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
@ -101,7 +101,7 @@ func TestScanSubdir(t *testing.T) {
|
||||
|
||||
// 3
|
||||
log.Println("Creating a file in an unknown deep directory")
|
||||
os.MkdirAll("s1/filetest/1/2/3/4/5/6/7", 0755)
|
||||
os.MkdirAll("s1/filetest/1/2/3/4/5/6/7", 0o755)
|
||||
if fd, err := os.Create("s1/filetest/1/2/3/4/5/6/7/file1.txt"); err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
@ -120,7 +120,7 @@ func TestScanSubdir(t *testing.T) {
|
||||
|
||||
// 4
|
||||
log.Println("Creating a directory in an unknown directory")
|
||||
err = os.MkdirAll("s1/dirtest/1/2/3/4/5/6/7", 0755)
|
||||
err = os.MkdirAll("s1/dirtest/1/2/3/4/5/6/7", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ func testSymlinks(t *testing.T) {
|
||||
|
||||
// A directory that we will replace with a symlink later
|
||||
|
||||
err = os.Mkdir("s1/dirToReplace", 0755)
|
||||
err = os.Mkdir("s1/dirToReplace", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -121,7 +121,7 @@ func testSymlinks(t *testing.T) {
|
||||
|
||||
// A directory and a symlink to that directory
|
||||
|
||||
err = os.Mkdir("s1/dir", 0755)
|
||||
err = os.Mkdir("s1/dir", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -218,7 +218,7 @@ func testSymlinks(t *testing.T) {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
err = os.Mkdir("s1/repDirLink", 0755)
|
||||
err = os.Mkdir("s1/repDirLink", 0o755)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
@ -203,7 +203,7 @@ func TestSyncCluster(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
fd, err := os.OpenFile("s1/test-appendfile", os.O_APPEND|os.O_WRONLY, 0644)
|
||||
fd, err := os.OpenFile("s1/test-appendfile", os.O_APPEND|os.O_WRONLY, 0o644)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -326,7 +326,7 @@ func TestSyncSparseFile(t *testing.T) {
|
||||
|
||||
log.Println("Generating files...")
|
||||
|
||||
if err := os.Mkdir("s1", 0755); err != nil {
|
||||
if err := os.Mkdir("s1", 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
@ -26,18 +26,23 @@ func TestBenchmarkTransferManyFiles(t *testing.T) {
|
||||
func TestBenchmarkTransferLargeFile1G(t *testing.T) {
|
||||
setupAndBenchmarkTransfer(t, 1, 30)
|
||||
}
|
||||
|
||||
func TestBenchmarkTransferLargeFile2G(t *testing.T) {
|
||||
setupAndBenchmarkTransfer(t, 1, 31)
|
||||
}
|
||||
|
||||
func TestBenchmarkTransferLargeFile4G(t *testing.T) {
|
||||
setupAndBenchmarkTransfer(t, 1, 32)
|
||||
}
|
||||
|
||||
func TestBenchmarkTransferLargeFile8G(t *testing.T) {
|
||||
setupAndBenchmarkTransfer(t, 1, 33)
|
||||
}
|
||||
|
||||
func TestBenchmarkTransferLargeFile16G(t *testing.T) {
|
||||
setupAndBenchmarkTransfer(t, 1, 34)
|
||||
}
|
||||
|
||||
func TestBenchmarkTransferLargeFile32G(t *testing.T) {
|
||||
setupAndBenchmarkTransfer(t, 1, 35)
|
||||
}
|
||||
@ -54,7 +59,7 @@ func setupAndBenchmarkTransfer(t *testing.T, files, sizeExp int) {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = os.MkdirAll("s1", 0755)
|
||||
err = os.MkdirAll("s1", 0o755)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
14
test/util.go
14
test/util.go
@ -60,7 +60,7 @@ func generateFilesWithTime(dir string, files, maxexp int, srcname string, t0 tim
|
||||
}
|
||||
|
||||
p0 := filepath.Join(dir, string(n[0]), n[0:2])
|
||||
err = os.MkdirAll(p0, 0755)
|
||||
err = os.MkdirAll(p0, 0o755)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@ -99,7 +99,7 @@ func generateOneFile(fd io.ReadSeeker, p1 string, s int64, t0 time.Time) error {
|
||||
return err
|
||||
}
|
||||
|
||||
os.Chmod(p1, os.FileMode(rand.Intn(0777)|0400))
|
||||
os.Chmod(p1, os.FileMode(rand.Intn(0o777)|0o400))
|
||||
|
||||
t := t0.Add(-time.Duration(rand.Intn(30*86400)) * time.Second)
|
||||
err = os.Chtimes(p1, t, t)
|
||||
@ -149,15 +149,15 @@ func alterFiles(dir string) error {
|
||||
return removeAll(path)
|
||||
|
||||
case r == 1 && info.Mode().IsRegular():
|
||||
if info.Mode()&0200 != 0200 {
|
||||
if info.Mode()&0o200 != 0o200 {
|
||||
// Not owner writable. Fix.
|
||||
if err = os.Chmod(path, 0644); err != nil {
|
||||
if err = os.Chmod(path, 0o644); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Overwrite a random kilobyte of every tenth file
|
||||
fd, err := os.OpenFile(path, os.O_RDWR, 0644)
|
||||
fd, err := os.OpenFile(path, os.O_RDWR, 0o644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -291,8 +291,8 @@ func removeAll(dirs ...string) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if info.Mode()&0700 != 0700 {
|
||||
os.Chmod(path, 0777)
|
||||
if info.Mode()&0o700 != 0o700 {
|
||||
os.Chmod(path, 0o777)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user