diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b49ef54..cdb5a267 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,13 +25,13 @@ jobs: scripts/ci/verify_commits.sh macos: name: macOS - runs-on: macos-latest + runs-on: macos-12 timeout-minutes: 90 steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '1.21.6' + go-version: '1.22.2' - name: "Install sha256sum" run: brew install coreutils - run: scripts/ci/setup_go.sh @@ -72,7 +72,7 @@ jobs: timeout-minutes: 30 strategy: matrix: - goversion: ['1.20.13', '1.21.6'] + goversion: ['1.21.9', '1.22.2'] steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 @@ -93,7 +93,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '1.21.6' + go-version: '1.22.2' - run: scripts/ci/setup_go.sh shell: bash - run: scripts/ci/setup_docker.sh @@ -116,7 +116,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 with: - go-version: '1.21.6' + go-version: '1.22.2' - uses: docker/setup-qemu-action@v1 - uses: docker/setup-buildx-action@v1 - uses: docker/login-action@v1 diff --git a/go.mod b/go.mod index bdcd0d97..b1c11259 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,17 @@ module github.com/mutagen-io/mutagen -go 1.20 +go 1.21 require ( - github.com/Microsoft/go-winio v0.6.1 + github.com/Microsoft/go-winio v0.6.2 github.com/bmatcuk/doublestar/v4 v4.6.1 github.com/dustin/go-humanize v1.0.1 github.com/eknkc/basex v1.0.1 github.com/fatih/color v1.16.0 github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da - github.com/google/uuid v1.4.0 + github.com/google/uuid v1.6.0 github.com/hectane/go-acl v0.0.0-20230122075934-ca0b05cb1adb - github.com/klauspost/compress v1.17.3 + github.com/klauspost/compress v1.17.8 github.com/mattn/go-isatty v0.0.20 github.com/mutagen-io/extstat v0.0.0-20210224131814-32fa3f057fa8 github.com/mutagen-io/fsevents v0.0.0-20230629001834-f53e17b91ebc @@ -19,26 +19,23 @@ require ( github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 github.com/zeebo/xxh3 v1.0.2 - golang.org/x/net v0.20.0 - golang.org/x/sys v0.16.0 + golang.org/x/net v0.24.0 + golang.org/x/sys v0.19.0 golang.org/x/text v0.14.0 - google.golang.org/grpc v1.61.0 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0 - google.golang.org/protobuf v1.32.0 + google.golang.org/grpc v1.63.2 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 + google.golang.org/protobuf v1.33.0 gopkg.in/yaml.v2 v2.4.0 k8s.io/apimachinery v0.21.3 ) require ( - github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/term v0.16.0 // indirect - golang.org/x/tools v0.16.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect + golang.org/x/term v0.19.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect ) replace k8s.io/apimachinery v0.21.3 => github.com/mutagen-io/apimachinery v0.21.3-mutagen1 diff --git a/go.sum b/go.sum index 11d97961..4e4eb980 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= @@ -52,24 +52,20 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -82,8 +78,8 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4slzwA= -github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -139,6 +135,7 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -151,8 +148,6 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -166,15 +161,14 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -187,11 +181,11 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -207,8 +201,6 @@ golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -218,15 +210,15 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe h1:bQnxqljG/wqi4NTXu2+DJ3n7APcEA882QZ1JvhQAq9o= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.61.0 h1:TOvOcuXn30kRao+gfcvsebNEa5iZIiLkisYEkf7R7o0= -google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0 h1:TLkBREm4nIsEcexnCjgQd5GQWaHcqMzwQV0TX9pq8S0= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0/go.mod h1:DNq5QpG7LJqD2AamLZ7zvKE0DEpVl2BSEVjFycAAjRY= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -236,11 +228,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/images/sidecar/linux/Dockerfile b/images/sidecar/linux/Dockerfile index bbd2089f..0a5eb444 100644 --- a/images/sidecar/linux/Dockerfile +++ b/images/sidecar/linux/Dockerfile @@ -1,5 +1,5 @@ # Use an Alpine-based Go builder. -FROM golang:1.21.6-alpine3.19 AS builder +FROM golang:1.22.2-alpine3.19 AS builder # Disable cgo in order to match the behavior of our release binaries (and to # avoid the need for gcc on certain architectures). diff --git a/pkg/filesystem/behavior/probe_mode.pb.go b/pkg/filesystem/behavior/probe_mode.pb.go index 192ff5df..2f87a599 100644 --- a/pkg/filesystem/behavior/probe_mode.pb.go +++ b/pkg/filesystem/behavior/probe_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: filesystem/behavior/probe_mode.proto package behavior diff --git a/pkg/forwarding/configuration.pb.go b/pkg/forwarding/configuration.pb.go index d7a21e2b..d85acff5 100644 --- a/pkg/forwarding/configuration.pb.go +++ b/pkg/forwarding/configuration.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: forwarding/configuration.proto package forwarding diff --git a/pkg/forwarding/endpoint/remote/protocol.pb.go b/pkg/forwarding/endpoint/remote/protocol.pb.go index 9bb4cb19..f7174438 100644 --- a/pkg/forwarding/endpoint/remote/protocol.pb.go +++ b/pkg/forwarding/endpoint/remote/protocol.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: forwarding/endpoint/remote/protocol.proto package remote diff --git a/pkg/forwarding/session.pb.go b/pkg/forwarding/session.pb.go index 9cbb9338..3104c09d 100644 --- a/pkg/forwarding/session.pb.go +++ b/pkg/forwarding/session.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: forwarding/session.proto package forwarding diff --git a/pkg/forwarding/socket_overwrite_mode.pb.go b/pkg/forwarding/socket_overwrite_mode.pb.go index fe898c99..344a6a3e 100644 --- a/pkg/forwarding/socket_overwrite_mode.pb.go +++ b/pkg/forwarding/socket_overwrite_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: forwarding/socket_overwrite_mode.proto package forwarding diff --git a/pkg/forwarding/state.pb.go b/pkg/forwarding/state.pb.go index 3cfdd296..4f2b0a8d 100644 --- a/pkg/forwarding/state.pb.go +++ b/pkg/forwarding/state.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: forwarding/state.proto package forwarding diff --git a/pkg/forwarding/version.pb.go b/pkg/forwarding/version.pb.go index 274f31d6..967f13c6 100644 --- a/pkg/forwarding/version.pb.go +++ b/pkg/forwarding/version.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: forwarding/version.proto package forwarding diff --git a/pkg/mutagen/licenses.go b/pkg/mutagen/licenses.go index 11a87dc1..0ab6262b 100644 --- a/pkg/mutagen/licenses.go +++ b/pkg/mutagen/licenses.go @@ -180,6 +180,7 @@ http://github.com/klauspost/compress Copyright (c) 2009-2016 The Go Authors. All rights reserved. Copyright (c) 2015-2023 Klaus Post. All rights reserved. +Copyright (c) 2024+ Klaus Post. All rights reserved. Copyright 2011 The Snappy-Go Authors. All rights reserved. Based on work Copyright (c) 2013, Yann Collet, released under BSD License. Based on work by Yann Collet, released under BSD License. @@ -229,6 +230,7 @@ Go support for Protocol Buffers https://github.com/protocolbuffers/protobuf-go Copyright (c) 2018 The Go Authors. All rights reserved. +Copyright 2023 Google Inc. All rights reserved. Used under the terms of the 3-Clause BSD License (Google version). A copy of this license can be found later in this text and a templated version can be @@ -307,6 +309,7 @@ uuid https://github.com/google/uuid Copyright (c) 2009,2014 Google Inc. All rights reserved. +Copyright 2023 Google Inc. All rights reserved. Used under the terms of the 3-Clause BSD License (Google version). A copy of this license can be found later in this text and a templated version can be diff --git a/pkg/mutagen/version.go b/pkg/mutagen/version.go index a6fd1c7f..38d0f36a 100644 --- a/pkg/mutagen/version.go +++ b/pkg/mutagen/version.go @@ -1,4 +1,4 @@ -//go:build go1.20 +//go:build go1.21 package mutagen @@ -19,7 +19,7 @@ const ( // VersionTag represents a tag to be appended to the Mutagen version string. // It must not contain spaces. If empty, no tag is appended to the version // string. - VersionTag = "beta2" + VersionTag = "rc1" ) // DevelopmentModeEnabled indicates that development mode is active. This is diff --git a/pkg/selection/selection.pb.go b/pkg/selection/selection.pb.go index 7db2a225..b6579d70 100644 --- a/pkg/selection/selection.pb.go +++ b/pkg/selection/selection.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: selection/selection.proto package selection diff --git a/pkg/service/daemon/daemon.pb.go b/pkg/service/daemon/daemon.pb.go index 2923a5d1..511ada38 100644 --- a/pkg/service/daemon/daemon.pb.go +++ b/pkg/service/daemon/daemon.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: service/daemon/daemon.proto package daemon diff --git a/pkg/service/daemon/daemon_grpc.pb.go b/pkg/service/daemon/daemon_grpc.pb.go index 1234a81a..d9207c4c 100644 --- a/pkg/service/daemon/daemon_grpc.pb.go +++ b/pkg/service/daemon/daemon_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: service/daemon/daemon.proto package daemon diff --git a/pkg/service/forwarding/forwarding.pb.go b/pkg/service/forwarding/forwarding.pb.go index bf369589..e6329b29 100644 --- a/pkg/service/forwarding/forwarding.pb.go +++ b/pkg/service/forwarding/forwarding.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: service/forwarding/forwarding.proto package forwarding diff --git a/pkg/service/forwarding/forwarding_grpc.pb.go b/pkg/service/forwarding/forwarding_grpc.pb.go index 45aa3d48..d38ad335 100644 --- a/pkg/service/forwarding/forwarding_grpc.pb.go +++ b/pkg/service/forwarding/forwarding_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: service/forwarding/forwarding.proto package forwarding diff --git a/pkg/service/prompting/prompting.pb.go b/pkg/service/prompting/prompting.pb.go index 8f97e404..703f634b 100644 --- a/pkg/service/prompting/prompting.pb.go +++ b/pkg/service/prompting/prompting.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: service/prompting/prompting.proto package prompting diff --git a/pkg/service/prompting/prompting_grpc.pb.go b/pkg/service/prompting/prompting_grpc.pb.go index 49cc5fc4..70412371 100644 --- a/pkg/service/prompting/prompting_grpc.pb.go +++ b/pkg/service/prompting/prompting_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: service/prompting/prompting.proto package prompting diff --git a/pkg/service/synchronization/synchronization.pb.go b/pkg/service/synchronization/synchronization.pb.go index c502f3cc..6d1b543f 100644 --- a/pkg/service/synchronization/synchronization.pb.go +++ b/pkg/service/synchronization/synchronization.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: service/synchronization/synchronization.proto package synchronization diff --git a/pkg/service/synchronization/synchronization_grpc.pb.go b/pkg/service/synchronization/synchronization_grpc.pb.go index 0c0603a4..215e94e4 100644 --- a/pkg/service/synchronization/synchronization_grpc.pb.go +++ b/pkg/service/synchronization/synchronization_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.2.0 -// - protoc v4.25.2 +// - protoc v5.26.1 // source: service/synchronization/synchronization.proto package synchronization diff --git a/pkg/synchronization/compression/algorithm.pb.go b/pkg/synchronization/compression/algorithm.pb.go index eb1f3f61..07655012 100644 --- a/pkg/synchronization/compression/algorithm.pb.go +++ b/pkg/synchronization/compression/algorithm.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/compression/algorithm.proto package compression diff --git a/pkg/synchronization/configuration.pb.go b/pkg/synchronization/configuration.pb.go index a6e976c0..bf06962c 100644 --- a/pkg/synchronization/configuration.pb.go +++ b/pkg/synchronization/configuration.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/configuration.proto package synchronization diff --git a/pkg/synchronization/core/archive.pb.go b/pkg/synchronization/core/archive.pb.go index 1ccbb871..730f7a73 100644 --- a/pkg/synchronization/core/archive.pb.go +++ b/pkg/synchronization/core/archive.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/archive.proto package core diff --git a/pkg/synchronization/core/cache.pb.go b/pkg/synchronization/core/cache.pb.go index bd46f27e..94bd6977 100644 --- a/pkg/synchronization/core/cache.pb.go +++ b/pkg/synchronization/core/cache.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/cache.proto package core diff --git a/pkg/synchronization/core/change.pb.go b/pkg/synchronization/core/change.pb.go index 2fd371e5..df3828df 100644 --- a/pkg/synchronization/core/change.pb.go +++ b/pkg/synchronization/core/change.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/change.proto package core diff --git a/pkg/synchronization/core/conflict.pb.go b/pkg/synchronization/core/conflict.pb.go index def32f5b..922ca130 100644 --- a/pkg/synchronization/core/conflict.pb.go +++ b/pkg/synchronization/core/conflict.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/conflict.proto package core diff --git a/pkg/synchronization/core/entry.pb.go b/pkg/synchronization/core/entry.pb.go index 2d3a165f..6dd04a98 100644 --- a/pkg/synchronization/core/entry.pb.go +++ b/pkg/synchronization/core/entry.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/entry.proto package core diff --git a/pkg/synchronization/core/ignore/ignore_vcs_mode.pb.go b/pkg/synchronization/core/ignore/ignore_vcs_mode.pb.go index 1d3d13b0..796bb32d 100644 --- a/pkg/synchronization/core/ignore/ignore_vcs_mode.pb.go +++ b/pkg/synchronization/core/ignore/ignore_vcs_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/ignore/ignore_vcs_mode.proto package ignore diff --git a/pkg/synchronization/core/ignore/syntax.pb.go b/pkg/synchronization/core/ignore/syntax.pb.go index 96187e06..4b309d4f 100644 --- a/pkg/synchronization/core/ignore/syntax.pb.go +++ b/pkg/synchronization/core/ignore/syntax.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/ignore/syntax.proto package ignore diff --git a/pkg/synchronization/core/mode.pb.go b/pkg/synchronization/core/mode.pb.go index 69dde4e4..fa2d847c 100644 --- a/pkg/synchronization/core/mode.pb.go +++ b/pkg/synchronization/core/mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/mode.proto package core diff --git a/pkg/synchronization/core/permissions_mode.pb.go b/pkg/synchronization/core/permissions_mode.pb.go index 1a2d7ed8..2ef696c6 100644 --- a/pkg/synchronization/core/permissions_mode.pb.go +++ b/pkg/synchronization/core/permissions_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/permissions_mode.proto package core diff --git a/pkg/synchronization/core/problem.pb.go b/pkg/synchronization/core/problem.pb.go index b329df6a..1145e5b4 100644 --- a/pkg/synchronization/core/problem.pb.go +++ b/pkg/synchronization/core/problem.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/problem.proto package core diff --git a/pkg/synchronization/core/snapshot.pb.go b/pkg/synchronization/core/snapshot.pb.go index 8af91ad6..26304e4b 100644 --- a/pkg/synchronization/core/snapshot.pb.go +++ b/pkg/synchronization/core/snapshot.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/snapshot.proto package core diff --git a/pkg/synchronization/core/symbolic_link_mode.pb.go b/pkg/synchronization/core/symbolic_link_mode.pb.go index 8cc1cbfc..2bcab1f4 100644 --- a/pkg/synchronization/core/symbolic_link_mode.pb.go +++ b/pkg/synchronization/core/symbolic_link_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/core/symbolic_link_mode.proto package core diff --git a/pkg/synchronization/endpoint/local/endpoint.go b/pkg/synchronization/endpoint/local/endpoint.go index 7bfccef6..1bf31506 100644 --- a/pkg/synchronization/endpoint/local/endpoint.go +++ b/pkg/synchronization/endpoint/local/endpoint.go @@ -8,7 +8,6 @@ import ( "io" "path/filepath" "strings" - "sync" "time" "github.com/mutagen-io/mutagen/pkg/encoding" @@ -137,7 +136,17 @@ type endpoint struct { // lastReturnedScanCache, lastReturnedScanSnapshotDecomposesUnicode, which // are only updated by Scan and read by Stage and Transition, thus making // them safe under Endpoint's (non-concurrent) interface. - scanLock sync.Mutex + // + // Instead of being implemented as a mutex, this lock is implemented as a + // semaphore, allowing for preemption when waiting on its acquisition. This + // can be useful (for example) in Scan calls that might be blocked waiting + // for an initial accelerated watching scan to complete. + // + // Concretely, this lock is implemented as a channel with a single element + // that must be held for the holder to be considered in control of the lock. + // The lockScanLock and unlockScanLock methods should be used to manage + // control of the lock. + scanLock chan struct{} // accelerate indicates that the Scan function should attempt to accelerate // scanning by using data from a background watcher Goroutine. accelerate bool @@ -446,6 +455,10 @@ func NewEndpoint( // Create a channel to track the watch Goroutine. watchDone := make(chan struct{}) + // Create the scan lock. + scanLock := make(chan struct{}, 1) + scanLock <- struct{}{} + // Create the endpoint. endpoint := &endpoint{ logger: logger, @@ -466,6 +479,7 @@ func NewEndpoint( watchDone: watchDone, pollSignal: state.NewCoalescer(pollSignalCoalescingWindow), recursiveWatchRetryEstablish: make(chan struct{}), + scanLock: scanLock, hasher: hasherFactory(), cache: cache, ignorer: ignorer, @@ -503,6 +517,25 @@ func NewEndpoint( return endpoint, nil } +// lockScanLock acquires the scan lock in a preemptable fashion. To disable +// preemption, pass context.Background(). This method returns true if the lock +// is acquired and false otherwise. It will only return false if preemption +// occurred via the provided context. +func (e *endpoint) lockScanLock(ctx context.Context) bool { + select { + case <-ctx.Done(): + return false + case <-e.scanLock: + return true + } +} + +// unlockScanLock releases the scan lock. It should only be called by the +// current holder of the scan lock. +func (e *endpoint) unlockScanLock() { + e.scanLock <- struct{}{} +} + // saveCache serializes the cache and writes the result to disk at regular // intervals. It runs as a background Goroutine for all endpoints. func (e *endpoint) saveCache(ctx context.Context, cachePath string, signal <-chan struct{}) { @@ -531,12 +564,12 @@ func (e *endpoint) saveCache(ctx context.Context, cachePath string, signal <-cha } // Grab the scan lock. - e.scanLock.Lock() + e.lockScanLock(context.Background()) // If the cache hasn't changed since the last write, then skip this // save request. if e.cache == lastSavedCache { - e.scanLock.Unlock() + e.unlockScanLock() continue } @@ -545,7 +578,7 @@ func (e *endpoint) saveCache(ctx context.Context, cachePath string, signal <-cha if err := encoding.MarshalAndSaveProtobuf(cachePath, e.cache); err != nil { e.logger.Error("Cache save failed:", err) e.cacheWriteError = err - e.scanLock.Unlock() + e.unlockScanLock() return } @@ -554,7 +587,7 @@ func (e *endpoint) saveCache(ctx context.Context, cachePath string, signal <-cha lastSaveTime = now // Release the cache lock. - e.scanLock.Unlock() + e.unlockScanLock() } } } @@ -643,9 +676,9 @@ func (e *endpoint) watchPoll(ctx context.Context, pollingInterval uint32, nonRec // Ensure that accelerated watching is disabled, if necessary. if e.accelerationAllowed { - e.scanLock.Lock() + e.lockScanLock(context.Background()) e.accelerate = false - e.scanLock.Unlock() + e.unlockScanLock() } // Terminate polling. @@ -696,7 +729,7 @@ func (e *endpoint) watchPoll(ctx context.Context, pollingInterval uint32, nonRec } // Grab the scan lock. - e.scanLock.Lock() + e.lockScanLock(context.Background()) // Disable the use of the existing scan results. e.accelerate = false @@ -711,7 +744,7 @@ func (e *endpoint) watchPoll(ctx context.Context, pollingInterval uint32, nonRec logger.Debug("Scan failed:", err) // Release the scan lock. - e.scanLock.Unlock() + e.unlockScanLock() // Strobe the poll signal and continue polling. e.pollSignal.Strobe() @@ -730,7 +763,7 @@ func (e *endpoint) watchPoll(ctx context.Context, pollingInterval uint32, nonRec snapshot := e.snapshot // Release the scan lock. - e.scanLock.Unlock() + e.unlockScanLock() // Check for modifications. modified := !snapshot.Equal(previous) @@ -847,10 +880,10 @@ WatchEstablishment: // Ensure that accelerated watching is disabled, if necessary. if e.accelerationAllowed { - e.scanLock.Lock() + e.lockScanLock(context.Background()) e.accelerate = false e.recheckPaths = nil - e.scanLock.Unlock() + e.unlockScanLock() } // Terminate watching. @@ -860,7 +893,7 @@ WatchEstablishment: logger.Debug("Attempting to enable accelerated scanning") // Attempt to perform a baseline scan to enable acceleration. - e.scanLock.Lock() + e.lockScanLock(context.Background()) if err := e.scan(ctx, nil, nil); err != nil { logger.Debug("Unable to perform baseline scan:", err) timer.Reset(pollingDuration) @@ -869,7 +902,7 @@ WatchEstablishment: e.accelerate = true e.recheckPaths = make(map[string]bool) } - e.scanLock.Unlock() + e.unlockScanLock() // Strobe the poll signal, regardless of outcome. The likely // outcome is that we succeeded in enabling acceleration, but @@ -883,10 +916,10 @@ WatchEstablishment: // If acceleration is allowed on the endpoint, then disable scan // acceleration and clear out the re-check paths. if e.accelerationAllowed { - e.scanLock.Lock() + e.lockScanLock(context.Background()) e.accelerate = false e.recheckPaths = nil - e.scanLock.Unlock() + e.unlockScanLock() } // Stop and drain the timer, which may be running. @@ -938,11 +971,11 @@ WatchEstablishment: // otherwise we're still in a pre-baseline scan state and don't // need to record these events. if e.accelerationAllowed { - e.scanLock.Lock() + e.lockScanLock(context.Background()) if e.accelerate { e.recheckPaths[path] = true } - e.scanLock.Unlock() + e.unlockScanLock() } // Strobe the poll signal to signal the event. @@ -1004,9 +1037,12 @@ func (e *endpoint) scan(ctx context.Context, baseline *core.Snapshot, recheckPat // Scan implements the Scan method for local endpoints. func (e *endpoint) Scan(ctx context.Context, _ *core.Entry, full bool) (*core.Snapshot, error, bool) { - // Grab the scan lock and defer its release. - e.scanLock.Lock() - defer e.scanLock.Unlock() + // Grab the scan lock and defer its release. If lock acquisition is + // preempted, then the controller has cancelled the request. + if !e.lockScanLock(ctx) { + return nil, fmt.Errorf("scan cancelled: %w", context.Canceled), false + } + defer e.unlockScanLock() // Before attempting to perform a scan, check for any cache write errors // that may have occurred during background cache writes. If we see any @@ -1038,7 +1074,7 @@ func (e *endpoint) Scan(ctx context.Context, _ *core.Entry, full bool) (*core.Sn if e.watchMode == reifiedWatchModeRecursive { e.logger.Debug("Performing accelerated scan with", len(e.recheckPaths), "recheck paths") if err := e.scan(ctx, e.snapshot, e.recheckPaths); err != nil { - return nil, err, true + return nil, err, !errors.Is(err, core.ErrScanCancelled) } else { e.recheckPaths = make(map[string]bool) } @@ -1131,13 +1167,13 @@ func (e *endpoint) Stage(paths []string, digests [][]byte) ([]string, []*rsync.S // Grab the scan lock. We'll need this to verify the last scan entry count // and to generate the reverse lookup map. - e.scanLock.Lock() + e.lockScanLock(context.Background()) // Verify that we've performed a scan since the last staging operation, that // way our count check is valid. If we haven't, then the controller is // either malfunctioning or malicious. if !e.scannedSinceLastStageCall { - e.scanLock.Unlock() + e.unlockScanLock() return nil, nil, nil, errors.New("multiple staging operations performed without scan") } e.scannedSinceLastStageCall = false @@ -1145,7 +1181,7 @@ func (e *endpoint) Stage(paths []string, digests [][]byte) ([]string, []*rsync.S // Verify that the number of paths provided isn't going to put us over the // maximum number of allowed entries. if e.maximumEntryCount != 0 && (e.maximumEntryCount-e.lastScanEntryCount) < uint64(len(paths)) { - e.scanLock.Unlock() + e.unlockScanLock() return nil, nil, nil, errors.New("staging would exceeded allowed entry count") } @@ -1153,12 +1189,12 @@ func (e *endpoint) Stage(paths []string, digests [][]byte) ([]string, []*rsync.S // detect renames and copies. reverseLookupMap, err := e.cache.GenerateReverseLookupMap() if err != nil { - e.scanLock.Unlock() + e.unlockScanLock() return nil, nil, nil, fmt.Errorf("unable to generate reverse lookup map: %w", err) } // Release the scan lock. - e.scanLock.Unlock() + e.unlockScanLock() // Inform the stager that we're about to begin staging and transition // operations. @@ -1248,8 +1284,8 @@ func (e *endpoint) Transition(ctx context.Context, transitions []*core.Change) ( } // Grab the scan lock and defer its release. - e.scanLock.Lock() - defer e.scanLock.Unlock() + e.lockScanLock(context.Background()) + defer e.unlockScanLock() // Verify that we've performed a scan since the last transition operation, // that way our count check is valid. If we haven't, then the controller is @@ -1296,7 +1332,7 @@ func (e *endpoint) Transition(ctx context.Context, transitions []*core.Change) ( // read lastReturnedScanCache and lastReturnedScanSnapshotDecomposesUnicode // because these aren't updated concurrently and thus don't fall under the // scope of the scan lock. - e.scanLock.Unlock() + e.unlockScanLock() results, problems, stagerMissingFiles := core.Transition( ctx, e.root, @@ -1309,7 +1345,7 @@ func (e *endpoint) Transition(ctx context.Context, transitions []*core.Change) ( e.lastReturnedScanSnapshotDecomposesUnicode, e.stager, ) - e.scanLock.Lock() + e.lockScanLock(context.Background()) // Determine whether or not the transition made any changes on disk. var transitionMadeChanges bool diff --git a/pkg/synchronization/endpoint/remote/protocol.pb.go b/pkg/synchronization/endpoint/remote/protocol.pb.go index 597f88da..6e83adb8 100644 --- a/pkg/synchronization/endpoint/remote/protocol.pb.go +++ b/pkg/synchronization/endpoint/remote/protocol.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/endpoint/remote/protocol.proto package remote diff --git a/pkg/synchronization/hashing/algorithm.pb.go b/pkg/synchronization/hashing/algorithm.pb.go index acdf3e0c..28691ead 100644 --- a/pkg/synchronization/hashing/algorithm.pb.go +++ b/pkg/synchronization/hashing/algorithm.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/hashing/algorithm.proto package hashing diff --git a/pkg/synchronization/rsync/engine.pb.go b/pkg/synchronization/rsync/engine.pb.go index 1b5334ee..0205a893 100644 --- a/pkg/synchronization/rsync/engine.pb.go +++ b/pkg/synchronization/rsync/engine.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/rsync/engine.proto package rsync diff --git a/pkg/synchronization/rsync/receive.pb.go b/pkg/synchronization/rsync/receive.pb.go index 79d87f0e..c43f701f 100644 --- a/pkg/synchronization/rsync/receive.pb.go +++ b/pkg/synchronization/rsync/receive.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/rsync/receive.proto package rsync diff --git a/pkg/synchronization/rsync/transmission.pb.go b/pkg/synchronization/rsync/transmission.pb.go index e1ad4c8a..a7e43655 100644 --- a/pkg/synchronization/rsync/transmission.pb.go +++ b/pkg/synchronization/rsync/transmission.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/rsync/transmission.proto package rsync diff --git a/pkg/synchronization/scan_mode.pb.go b/pkg/synchronization/scan_mode.pb.go index b9b2093c..d2f7eff0 100644 --- a/pkg/synchronization/scan_mode.pb.go +++ b/pkg/synchronization/scan_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/scan_mode.proto package synchronization diff --git a/pkg/synchronization/session.pb.go b/pkg/synchronization/session.pb.go index 3b509761..53f583b4 100644 --- a/pkg/synchronization/session.pb.go +++ b/pkg/synchronization/session.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/session.proto package synchronization diff --git a/pkg/synchronization/stage_mode.pb.go b/pkg/synchronization/stage_mode.pb.go index f61348fa..bfe19bf5 100644 --- a/pkg/synchronization/stage_mode.pb.go +++ b/pkg/synchronization/stage_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/stage_mode.proto package synchronization diff --git a/pkg/synchronization/state.pb.go b/pkg/synchronization/state.pb.go index 312f36b1..88792fa6 100644 --- a/pkg/synchronization/state.pb.go +++ b/pkg/synchronization/state.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/state.proto package synchronization diff --git a/pkg/synchronization/version.pb.go b/pkg/synchronization/version.pb.go index 88a89c88..06a56b91 100644 --- a/pkg/synchronization/version.pb.go +++ b/pkg/synchronization/version.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/version.proto package synchronization diff --git a/pkg/synchronization/watch_mode.pb.go b/pkg/synchronization/watch_mode.pb.go index 42b190f4..b5b0b9c3 100644 --- a/pkg/synchronization/watch_mode.pb.go +++ b/pkg/synchronization/watch_mode.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: synchronization/watch_mode.proto package synchronization diff --git a/pkg/url/url.pb.go b/pkg/url/url.pb.go index fb04a8e4..16276c28 100644 --- a/pkg/url/url.pb.go +++ b/pkg/url/url.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.32.0 -// protoc v4.25.2 +// protoc-gen-go v1.33.0 +// protoc v5.26.1 // source: url/url.proto package url diff --git a/scripts/build.go b/scripts/build.go index 1eb30c80..13fec616 100644 --- a/scripts/build.go +++ b/scripts/build.go @@ -48,8 +48,9 @@ const ( cliBaseName = "mutagen" // minimumMacOSVersion is the minimum version of macOS that we'll support - // (currently pinned to the oldest version of macOS that Go supports). - minimumMacOSVersion = "10.13" + // (currently pinned to the oldest version of macOS that Mutagen's minimum + // Go version supports). + minimumMacOSVersion = "10.15" // minimumARMSupport is the value to pass to the GOARM environment variable // when building binaries. We currently specify support for ARMv5. This will