diff --git a/.travis.yml b/.travis.yml index 692f1944e..db4810fea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,14 +3,6 @@ sudo: false matrix: include: - - os: linux - go: "1.10.x" - env: RESTIC_TEST_FUSE=0 RESTIC_TEST_CLOUD_BACKENDS=0 - cache: - directories: - - $HOME/.cache/go-build - - $HOME/gopath/pkg/mod - - os: linux go: "1.11.x" env: RESTIC_TEST_FUSE=0 RESTIC_TEST_CLOUD_BACKENDS=0 @@ -27,9 +19,17 @@ matrix: - $HOME/.cache/go-build - $HOME/gopath/pkg/mod - # only run fuse and cloud backends tests on Travis for the latest Go on Linux - os: linux go: "1.13.x" + env: RESTIC_TEST_FUSE=0 RESTIC_TEST_CLOUD_BACKENDS=0 + cache: + directories: + - $HOME/.cache/go-build + - $HOME/gopath/pkg/mod + + # only run fuse and cloud backends tests on Travis for the latest Go on Linux + - os: linux + go: "1.14.x" sudo: true cache: directories: @@ -37,7 +37,7 @@ matrix: - $HOME/gopath/pkg/mod - os: osx - go: "1.13.x" + go: "1.14.x" env: RESTIC_TEST_FUSE=0 RESTIC_TEST_CLOUD_BACKENDS=0 cache: directories: diff --git a/appveyor.yml b/appveyor.yml index 7e1ae7894..e4a412439 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -20,8 +20,8 @@ init: install: - rmdir c:\go /s /q - - appveyor DownloadFile https://dl.google.com/go/go1.13.4.windows-amd64.msi - - msiexec /i go1.13.4.windows-amd64.msi /q + - appveyor DownloadFile https://dl.google.com/go/go1.14.windows-amd64.msi + - msiexec /i go1.14.windows-amd64.msi /q - go version - go env - appveyor DownloadFile http://sourceforge.netcologne.de/project/gnuwin32/tar/1.13-1/tar-1.13-1-bin.zip -FileName tar.zip diff --git a/build.go b/build.go index 0b3a6a61a..aa5ae21ef 100644 --- a/build.go +++ b/build.go @@ -65,7 +65,7 @@ var config = Config{ Main: "./cmd/restic", // package name for the main package DefaultBuildTags: []string{"selfupdate"}, // specify build tags which are always used Tests: []string{"./..."}, // tests to run - MinVersion: GoVersion{Major: 1, Minor: 10, Patch: 0}, // minimum Go version supported + MinVersion: GoVersion{Major: 1, Minor: 11, Patch: 0}, // minimum Go version supported } // Config configures the build. diff --git a/changelog/unreleased/pull-2600 b/changelog/unreleased/pull-2600 new file mode 100644 index 000000000..24722295b --- /dev/null +++ b/changelog/unreleased/pull-2600 @@ -0,0 +1,6 @@ +Change: Require Go >= 1.11 + +Restic now requires Go to be at least 1.11. This allows simplifications in the +build process and removing workarounds. + +https://github.com/restic/restic/pull/2600 diff --git a/doc/020_installation.rst b/doc/020_installation.rst index 05acae259..005e44d32 100644 --- a/doc/020_installation.rst +++ b/doc/020_installation.rst @@ -245,7 +245,7 @@ From Source *********** restic is written in the Go programming language and you need at least -Go version 1.9. Building restic may also work with older versions of Go, +Go version 1.11. Building restic may also work with older versions of Go, but that's not supported. See the `Getting started `__ guide of the Go project for instructions how to install Go. @@ -261,13 +261,6 @@ In order to build restic from source, execute the following steps: $ go run -mod=vendor build.go -For Go versions < 1.11, the option ``-mod=vendor`` needs to be removed, like -this: - -.. code-block:: console - - $ go run build.go - You can easily cross-compile restic for all supported platforms, just supply the target OS and platform via the command-line options like this (for Windows and FreeBSD respectively): @@ -280,8 +273,6 @@ supply the target OS and platform via the command-line options like this $ go run -mod=vendor build.go --goos linux --goarch arm --goarm 6 -Again, for Go < 1.11 ``-mod=vendor`` needs to be removed. - The resulting binary is statically linked and does not require any libraries. diff --git a/internal/backend/rclone/stdio_conn.go b/internal/backend/rclone/stdio_conn.go index 4abbb7c9a..a44e6aa5c 100644 --- a/internal/backend/rclone/stdio_conn.go +++ b/internal/backend/rclone/stdio_conn.go @@ -5,6 +5,7 @@ import ( "os" "os/exec" "sync" + "time" "github.com/restic/restic/internal/debug" ) @@ -58,6 +59,26 @@ func (s *StdioConn) RemoteAddr() net.Addr { return Addr{} } +// SetDeadline sets the read/write deadline. +func (s *StdioConn) SetDeadline(t time.Time) error { + err1 := s.stdin.SetReadDeadline(t) + err2 := s.stdout.SetWriteDeadline(t) + if err1 != nil { + return err1 + } + return err2 +} + +// SetReadDeadline sets the read/write deadline. +func (s *StdioConn) SetReadDeadline(t time.Time) error { + return s.stdin.SetReadDeadline(t) +} + +// SetWriteDeadline sets the read/write deadline. +func (s *StdioConn) SetWriteDeadline(t time.Time) error { + return s.stdout.SetWriteDeadline(t) +} + // make sure StdioConn implements net.Conn var _ net.Conn = &StdioConn{} diff --git a/internal/backend/rclone/stdio_conn_go110.go b/internal/backend/rclone/stdio_conn_go110.go deleted file mode 100644 index b21f65f04..000000000 --- a/internal/backend/rclone/stdio_conn_go110.go +++ /dev/null @@ -1,25 +0,0 @@ -// +build go1.10 - -package rclone - -import "time" - -// SetDeadline sets the read/write deadline. -func (s *StdioConn) SetDeadline(t time.Time) error { - err1 := s.stdin.SetReadDeadline(t) - err2 := s.stdout.SetWriteDeadline(t) - if err1 != nil { - return err1 - } - return err2 -} - -// SetReadDeadline sets the read/write deadline. -func (s *StdioConn) SetReadDeadline(t time.Time) error { - return s.stdin.SetReadDeadline(t) -} - -// SetWriteDeadline sets the read/write deadline. -func (s *StdioConn) SetWriteDeadline(t time.Time) error { - return s.stdout.SetWriteDeadline(t) -} diff --git a/internal/backend/rclone/stdio_conn_other.go b/internal/backend/rclone/stdio_conn_other.go deleted file mode 100644 index 07f85961b..000000000 --- a/internal/backend/rclone/stdio_conn_other.go +++ /dev/null @@ -1,22 +0,0 @@ -// +build !go1.10 - -package rclone - -import "time" - -// On Go < 1.10, it's not possible to set read/write deadlines on files, so we just ignore that. - -// SetDeadline sets the read/write deadline. -func (s *StdioConn) SetDeadline(t time.Time) error { - return nil -} - -// SetReadDeadline sets the read/write deadline. -func (s *StdioConn) SetReadDeadline(t time.Time) error { - return nil -} - -// SetWriteDeadline sets the read/write deadline. -func (s *StdioConn) SetWriteDeadline(t time.Time) error { - return nil -} diff --git a/internal/test/helper.go b/internal/test/helper.go index f0fc1f61b..c5fe3188c 100644 --- a/internal/test/helper.go +++ b/internal/test/helper.go @@ -1,5 +1,3 @@ -// +build go1.9 - package test import "testing" diff --git a/internal/test/helper_go18.go b/internal/test/helper_go18.go deleted file mode 100644 index d4f8b8de6..000000000 --- a/internal/test/helper_go18.go +++ /dev/null @@ -1,19 +0,0 @@ -// +build !go1.9 - -package test - -import "testing" - -// Helperer marks the current function as a test helper. -type Helperer interface { - Helper() -} - -type fakeHelper struct{} - -func (fakeHelper) Helper() {} - -// Helper returns a function that marks the current function as a helper function. -func Helper(t testing.TB) Helperer { - return fakeHelper{} -}