1
0
mirror of https://github.com/rclone/rclone.git synced 2026-02-01 01:03:20 +00:00

Compare commits

..

2 Commits

Author SHA1 Message Date
Nick Craig-Wood
705572d400 webdav: nextcloud: fix must use /dav/files/USER endpoint not /webdav error
Before this change the regexp validating the endpoint URL was a bit
too strict allowing only /dav/files/USER.

This patch relaxes it allowing /dav/files/USER/dir/subdir etc.
2023-07-01 15:53:57 +01:00
Nick Craig-Wood
00512e1303 Start v1.64.0-DEV development 2023-06-30 15:39:03 +01:00
27 changed files with 342 additions and 692 deletions

348
MANUAL.html generated

File diff suppressed because it is too large Load Diff

104
MANUAL.md generated
View File

@@ -1,6 +1,6 @@
% rclone(1) User Manual
% Nick Craig-Wood
% Jul 17, 2023
% Jun 30, 2023
# Rclone syncs your files to cloud storage
@@ -18,7 +18,7 @@
Rclone is a command-line program to manage files on cloud storage. It
is a feature-rich alternative to cloud vendors' web storage
interfaces. [Over 70 cloud storage products](#providers) support
interfaces. [Over 40 cloud storage products](#providers) support
rclone including S3 object stores, business & consumer file storage
services, as well as standard transfer protocols.
@@ -2723,40 +2723,6 @@ See the [global flags page](https://rclone.org/flags/) for global options not li
* [rclone config](https://rclone.org/commands/rclone_config/) - Enter an interactive configuration session.
# rclone config redacted
Print redacted (decrypted) config file, or the redacted config for a single remote.
# Synopsis
This prints a redacted copy of the config file, either the
whole config file or for a given remote.
The config file will be redacted by replacing all passwords and other
sensitive info with XXX.
This makes the config file suitable for posting online for support.
It should be double checked before posting as the redaction may not be perfect.
```
rclone config redacted [<remote>] [flags]
```
# Options
```
-h, --help help for redacted
```
See the [global flags page](https://rclone.org/flags/) for global options not listed here.
# SEE ALSO
* [rclone config](https://rclone.org/commands/rclone_config/) - Enter an interactive configuration session.
# rclone config show
Print (decrypted) config file, or the config for a single remote.
@@ -11886,7 +11852,7 @@ all files on `remote:` excluding those in root directory `dir` and sub
directories.
E.g. on Microsoft Windows `rclone ls remote: --exclude "*\[{JP,KR,HK}\]*"`
lists the files in `remote:` without `[JP]` or `[KR]` or `[HK]` in
lists the files in `remote:` with `[JP]` or `[KR]` or `[HK]` in
their name. Quotes prevent the shell from interpreting the `\`
characters.`\` characters escape the `[` and `]` so an rclone filter
treats them literally rather than as a character-range. The `{` and `}`
@@ -15228,7 +15194,7 @@ These flags are available for every command.
--use-json-log Use json log format
--use-mmap Use mmap allocator (see docs)
--use-server-modtime Use server modified time instead of object metadata
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.1")
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.0")
-v, --verbose count Print lots more stuff (repeat for more)
```
@@ -27924,7 +27890,7 @@ to be the same account as the Dropbox you want to access)
6. Switch to the `Permissions` tab. Enable at least the following permissions: `account_info.read`, `files.metadata.write`, `files.content.write`, `files.content.read`, `sharing.write`. The `files.metadata.read` and `sharing.read` checkboxes will be marked too. Click `Submit`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/` and click on `Add`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/`
8. Find the `App key` and `App secret` values on the `Settings` tab. Use these values in rclone config to add a new remote or edit an existing remote. The `App key` setting corresponds to `client_id` in rclone config, the `App secret` corresponds to `client_secret`
@@ -30908,7 +30874,7 @@ be the same account as the Google Drive you want to access)
"Google Drive API".
4. Click "Credentials" in the left-side panel (not "Create
credentials", which opens the wizard).
credentials", which opens the wizard), then "Create credentials"
5. If you already configured an "Oauth Consent Screen", then skip
to the next step; if not, click on "CONFIGURE CONSENT SCREEN" button
@@ -33730,6 +33696,8 @@ y/e/d> y
[Mail.ru Cloud](https://cloud.mail.ru/) is a cloud storage provided by a Russian internet company [Mail.Ru Group](https://mail.ru). The official desktop client is [Disk-O:](https://disk-o.cloud/en), available on Windows and Mac OS.
Currently it is recommended to disable 2FA on Mail.ru accounts intended for rclone until it gets eventually implemented.
## Features highlights
- Paths may be as deep as required, e.g. `remote:directory/subdirectory`
@@ -43602,27 +43570,6 @@ Options:
# Changelog
## v1.63.1 - 2023-07-17
[See commits](https://github.com/rclone/rclone/compare/v1.63.0...v1.63.1)
* Bug Fixes
* build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
* dirtree: Fix performance with large directories of directories and `--fast-list` (Nick Craig-Wood)
* operations
* Fix deadlock when using `lsd`/`ls` with `--progress` (Nick Craig-Wood)
* Fix `.rclonelink` files not being converted back to symlinks (Nick Craig-Wood)
* doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada Tsunayoshi, Vladislav Vorobev)
* Local
* Fix partial directory read for corrupted filesystem (Nick Craig-Wood)
* Box
* Fix reconnect failing with HTTP 400 Bad Request (albertony)
* Smb
* Fix "Statfs failed: bucket or container name is needed" when mounting (Nick Craig-Wood)
* WebDAV
* Nextcloud: fix must use /dav/files/USER endpoint not /webdav error (Paul)
* Nextcloud chunking: add more guidance for the user to check the config (darix)
## v1.63.0 - 2023-06-30
[See commits](https://github.com/rclone/rclone/compare/v1.62.0...v1.63.0)
@@ -49286,43 +49233,32 @@ put them back in again.` >}}
* zzq <i@zhangzqs.cn>
* mac-15 <usman.ilamdin@phpstudios.com>
# Contact the rclone project
# Contact the rclone project #
## Forum
## Forum ##
Forum for questions and general discussion:
- https://forum.rclone.org
* https://forum.rclone.org
## Business support
For business support or sponsorship enquiries please see:
- https://rclone.com/
- sponsorship@rclone.com
## GitHub repository
## GitHub repository ##
The project's repository is located at:
- https://github.com/rclone/rclone
* https://github.com/rclone/rclone
There you can file bug reports or contribute with pull requests.
## Twitter
## Twitter ##
You can also follow Nick on twitter for rclone announcements:
You can also follow me on twitter for rclone announcements:
- [@njcw](https://twitter.com/njcw)
* [@njcw](https://twitter.com/njcw)
## Email
## Email ##
Or if all else fails or you want to ask something private or
confidential
- info@rclone.com
Please don't email requests for help to this address - those are
better directed to the forum unless you'd like to sign up for business
support.
confidential email [Nick Craig-Wood](mailto:nick@craig-wood.com).
Please don't email me requests for help - those are better directed to
the forum. Thanks!

91
MANUAL.txt generated
View File

@@ -1,6 +1,6 @@
rclone(1) User Manual
Nick Craig-Wood
Jul 17, 2023
Jun 30, 2023
Rclone syncs your files to cloud storage
@@ -16,7 +16,7 @@ About rclone
Rclone is a command-line program to manage files on cloud storage. It is
a feature-rich alternative to cloud vendors' web storage interfaces.
Over 70 cloud storage products support rclone including S3 object
Over 40 cloud storage products support rclone including S3 object
stores, business & consumer file storage services, as well as standard
transfer protocols.
@@ -2481,36 +2481,6 @@ SEE ALSO
- rclone config - Enter an interactive configuration session.
rclone config redacted
Print redacted (decrypted) config file, or the redacted config for a
single remote.
Synopsis
This prints a redacted copy of the config file, either the whole config
file or for a given remote.
The config file will be redacted by replacing all passwords and other
sensitive info with XXX.
This makes the config file suitable for posting online for support.
It should be double checked before posting as the redaction may not be
perfect.
rclone config redacted [<remote>] [flags]
Options
-h, --help help for redacted
See the global flags page for global options not listed here.
SEE ALSO
- rclone config - Enter an interactive configuration session.
rclone config show
Print (decrypted) config file, or the config for a single remote.
@@ -11425,7 +11395,7 @@ all files on remote: excluding those in root directory dir and sub
directories.
E.g. on Microsoft Windows rclone ls remote: --exclude "*\[{JP,KR,HK}\]*"
lists the files in remote: without [JP] or [KR] or [HK] in their name.
lists the files in remote: with [JP] or [KR] or [HK] in their name.
Quotes prevent the shell from interpreting the \ characters.\ characters
escape the [ and ] so an rclone filter treats them literally rather than
as a character-range. The { and } define an rclone pattern list. For
@@ -14768,7 +14738,7 @@ These flags are available for every command.
--use-json-log Use json log format
--use-mmap Use mmap allocator (see docs)
--use-server-modtime Use server modified time instead of object metadata
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.1")
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.0")
-v, --verbose count Print lots more stuff (repeat for more)
Backend Flags
@@ -27270,7 +27240,7 @@ Here is how to create your own Dropbox App ID for rclone:
Click Submit
7. Switch to the Settings tab. Fill OAuth2 - Redirect URIs as
http://localhost:53682/ and click on Add
http://localhost:53682/
8. Find the App key and App secret values on the Settings tab. Use
these values in rclone config to add a new remote or edit an
@@ -30268,7 +30238,7 @@ Here is how to create your own Google Drive client ID for rclone:
"Google Drive API".
4. Click "Credentials" in the left-side panel (not "Create
credentials", which opens the wizard).
credentials", which opens the wizard), then "Create credentials"
5. If you already configured an "Oauth Consent Screen", then skip to
the next step; if not, click on "CONFIGURE CONSENT SCREEN" button
@@ -33131,6 +33101,9 @@ Mail.ru Cloud is a cloud storage provided by a Russian internet company
Mail.Ru Group. The official desktop client is Disk-O:, available on
Windows and Mac OS.
Currently it is recommended to disable 2FA on Mail.ru accounts intended
for rclone until it gets eventually implemented.
Features highlights
- Paths may be as deep as required, e.g. remote:directory/subdirectory
@@ -43095,35 +43068,6 @@ Options:
Changelog
v1.63.1 - 2023-07-17
See commits
- Bug Fixes
- build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
- dirtree: Fix performance with large directories of directories
and --fast-list (Nick Craig-Wood)
- operations
- Fix deadlock when using lsd/ls with --progress (Nick
Craig-Wood)
- Fix .rclonelink files not being converted back to symlinks
(Nick Craig-Wood)
- doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada
Tsunayoshi, Vladislav Vorobev)
- Local
- Fix partial directory read for corrupted filesystem (Nick
Craig-Wood)
- Box
- Fix reconnect failing with HTTP 400 Bad Request (albertony)
- Smb
- Fix "Statfs failed: bucket or container name is needed" when
mounting (Nick Craig-Wood)
- WebDAV
- Nextcloud: fix must use /dav/files/USER endpoint not /webdav
error (Paul)
- Nextcloud chunking: add more guidance for the user to check the
config (darix)
v1.63.0 - 2023-06-30
See commits
@@ -50216,13 +50160,6 @@ Forum for questions and general discussion:
- https://forum.rclone.org
Business support
For business support or sponsorship enquiries please see:
- https://rclone.com/
- sponsorship@rclone.com
GitHub repository
The project's repository is located at:
@@ -50233,16 +50170,12 @@ There you can file bug reports or contribute with pull requests.
Twitter
You can also follow Nick on twitter for rclone announcements:
You can also follow me on twitter for rclone announcements:
- [@njcw](https://twitter.com/njcw)
Email
Or if all else fails or you want to ask something private or
confidential
- info@rclone.com
Please don't email requests for help to this address - those are better
directed to the forum unless you'd like to sign up for business support.
confidential email Nick Craig-Wood. Please don't email me requests for
help - those are better directed to the forum. Thanks!

View File

@@ -1 +1 @@
v1.63.1
v1.64.0

View File

@@ -77,7 +77,7 @@ var (
)
type boxCustomClaims struct {
jwt.StandardClaims
jwt.RegisteredClaims
BoxSubType string `json:"box_sub_type,omitempty"`
}
@@ -206,14 +206,12 @@ func getClaims(boxConfig *api.ConfigJSON, boxSubType string) (claims *boxCustomC
}
claims = &boxCustomClaims{
//lint:ignore SA1019 since we need to use jwt.StandardClaims even if deprecated in jwt-go v4 until a more permanent solution is ready in time before jwt-go v5 where it is removed entirely
//nolint:staticcheck // Don't include staticcheck when running golangci-lint to avoid SA1019
StandardClaims: jwt.StandardClaims{
Id: val,
RegisteredClaims: jwt.RegisteredClaims{
ID: val,
Issuer: boxConfig.BoxAppSettings.ClientID,
Subject: boxConfig.EnterpriseID,
Audience: tokenURL,
ExpiresAt: time.Now().Add(time.Second * 45).Unix(),
Audience: jwt.ClaimStrings{tokenURL},
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Second * 45)),
},
BoxSubType: boxSubType,
}

View File

@@ -516,7 +516,7 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e
continue
}
}
fierr = fmt.Errorf("failed to get info about directory entry %q: %w", namepath, fierr)
err = fmt.Errorf("failed to read directory %q: %w", namepath, fierr)
fs.Errorf(dir, "%v", fierr)
_ = accounting.Stats(ctx).Error(fserrors.NoRetryError(fierr)) // fail the sync
continue

View File

@@ -19,7 +19,6 @@ import (
"github.com/rclone/rclone/fs/filter"
"github.com/rclone/rclone/fs/hash"
"github.com/rclone/rclone/fs/object"
"github.com/rclone/rclone/fs/operations"
"github.com/rclone/rclone/fstest"
"github.com/rclone/rclone/lib/file"
"github.com/rclone/rclone/lib/readers"
@@ -515,43 +514,3 @@ func TestFilterSymlinkCopyLinks(t *testing.T) {
func TestFilterSymlinkLinks(t *testing.T) {
testFilterSymlink(t, false)
}
func TestCopySymlink(t *testing.T) {
ctx := context.Background()
r := fstest.NewRun(t)
defer r.Finalise()
when := time.Now()
f := r.Flocal.(*Fs)
// Create a file and a symlink to it
r.WriteFile("src/file.txt", "hello world", when)
require.NoError(t, os.Symlink("file.txt", filepath.Join(r.LocalName, "src", "link.txt")))
defer func() {
// Reset -L/-l mode
f.opt.FollowSymlinks = false
f.opt.TranslateSymlinks = false
f.lstat = os.Lstat
}()
// Set fs into "-l/--links" mode
f.opt.FollowSymlinks = false
f.opt.TranslateSymlinks = true
f.lstat = os.Lstat
// Create dst
require.NoError(t, f.Mkdir(ctx, "dst"))
// Do copy from src into dst
src, err := f.NewObject(ctx, "src/link.txt.rclonelink")
require.NoError(t, err)
require.NotNil(t, src)
dst, err := operations.Copy(ctx, f, nil, "dst/link.txt.rclonelink", src)
require.NoError(t, err)
require.NotNil(t, dst)
// Test that we made a symlink and it has the right contents
dstPath := filepath.Join(r.LocalName, "dst", "link.txt")
linkContents, err := os.Readlink(dstPath)
require.NoError(t, err)
assert.Equal(t, "file.txt", linkContents)
}

View File

@@ -447,8 +447,7 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e
func (f *Fs) About(ctx context.Context) (_ *fs.Usage, err error) {
share, dir := f.split("/")
if share == "" {
// Just return empty info rather than an error if called on the root
return &fs.Usage{}, nil
return nil, fs.ErrorListBucketRequired
}
dir = f.toSambaPath(dir)

View File

@@ -14,6 +14,7 @@ import (
"io"
"net/http"
"path"
"strings"
"github.com/rclone/rclone/fs"
"github.com/rclone/rclone/lib/readers"
@@ -40,6 +41,10 @@ func (f *Fs) setUploadChunkSize(cs fs.SizeSuffix) (old fs.SizeSuffix, err error)
return
}
func (f *Fs) getChunksUploadURL() string {
return strings.Replace(f.endpointURL, "/dav/files/", "/dav/uploads/", 1)
}
func (o *Object) getChunksUploadDir() (string, error) {
hasher := md5.New()
_, err := hasher.Write([]byte(o.filePath()))
@@ -50,16 +55,12 @@ func (o *Object) getChunksUploadDir() (string, error) {
return uploadDir, nil
}
func (f *Fs) getChunksUploadURL() (string, error) {
submatch := nextCloudURLRegex.FindStringSubmatch(f.endpointURL)
if submatch == nil {
return "", errors.New("the remote url looks incorrect. Note that nextcloud chunked uploads require you to use the /dav/files/USER endpoint instead of /webdav. Please check 'rclone config show remotename' to verify that the url field ends in /dav/files/USERNAME")
func (f *Fs) verifyChunkConfig() error {
if f.opt.ChunkSize != 0 && !validateNextCloudChunkedURL.MatchString(f.endpointURL) {
return errors.New("chunked upload with nextcloud must use /dav/files/USER endpoint not /webdav")
}
baseURL, user := submatch[1], submatch[2]
chunksUploadURL := fmt.Sprintf("%s/dav/uploads/%s/", baseURL, user)
return chunksUploadURL, nil
return nil
}
func (o *Object) shouldUseChunkedUpload(src fs.ObjectInfo) bool {

View File

@@ -569,8 +569,7 @@ func (f *Fs) fetchAndSetBearerToken() error {
return nil
}
// The WebDAV url can optionally be suffixed with a path. This suffix needs to be ignored for determining the temporary upload directory of chunks.
var nextCloudURLRegex = regexp.MustCompile(`^(.*)/dav/files/([^/]+)`)
var validateNextCloudChunkedURL = regexp.MustCompile(`^.*/dav/files/`)
// setQuirks adjusts the Fs for the vendor passed in
func (f *Fs) setQuirks(ctx context.Context, vendor string) error {
@@ -593,18 +592,11 @@ func (f *Fs) setQuirks(ctx context.Context, vendor string) error {
f.propsetMtime = true
f.hasOCSHA1 = true
f.canChunk = true
if f.opt.ChunkSize == 0 {
fs.Logf(nil, "Chunked uploads are disabled because nextcloud_chunk_size is set to 0")
} else {
chunksUploadURL, err := f.getChunksUploadURL()
if err != nil {
return err
}
f.chunksUploadURL = chunksUploadURL
fs.Logf(nil, "Chunks temporary upload directory: %s", f.chunksUploadURL)
if err := f.verifyChunkConfig(); err != nil {
return err
}
f.chunksUploadURL = f.getChunksUploadURL()
fs.Logf(nil, "Chunks temporary upload directory: %s", f.chunksUploadURL)
case "sharepoint":
// To mount sharepoint, two Cookies are required
// They have to be set instead of BasicAuth

View File

@@ -114,7 +114,7 @@ commands_order = [
ignore_docs = [
"downloads.md",
"privacy.md",
"sponsor.md",
"donate.md",
]
def read_doc(doc):

View File

@@ -21,7 +21,7 @@ notoc: true
Rclone is a command-line program to manage files on cloud storage. It
is a feature-rich alternative to cloud vendors' web storage
interfaces. [Over 70 cloud storage products](#providers) support
interfaces. [Over 40 cloud storage products](#providers) support
rclone including S3 object stores, business & consumer file storage
services, as well as standard transfer protocols.

View File

@@ -5,27 +5,6 @@ description: "Rclone Changelog"
# Changelog
## v1.63.1 - 2023-07-17
[See commits](https://github.com/rclone/rclone/compare/v1.63.0...v1.63.1)
* Bug Fixes
* build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
* dirtree: Fix performance with large directories of directories and `--fast-list` (Nick Craig-Wood)
* operations
* Fix deadlock when using `lsd`/`ls` with `--progress` (Nick Craig-Wood)
* Fix `.rclonelink` files not being converted back to symlinks (Nick Craig-Wood)
* doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada Tsunayoshi, Vladislav Vorobev)
* Local
* Fix partial directory read for corrupted filesystem (Nick Craig-Wood)
* Box
* Fix reconnect failing with HTTP 400 Bad Request (albertony)
* Smb
* Fix "Statfs failed: bucket or container name is needed" when mounting (Nick Craig-Wood)
* WebDAV
* Nextcloud: fix must use /dav/files/USER endpoint not /webdav error (Paul)
* Nextcloud chunking: add more guidance for the user to check the config (darix)
## v1.63.0 - 2023-06-30
[See commits](https://github.com/rclone/rclone/compare/v1.62.0...v1.63.0)

View File

@@ -3,42 +3,31 @@ title: "Contact"
description: "Contact the rclone project"
---
# Contact the rclone project
# Contact the rclone project #
## Forum
## Forum ##
Forum for questions and general discussion:
- https://forum.rclone.org
* https://forum.rclone.org
## Business support
For business support or sponsorship enquiries please see:
- https://rclone.com/
- sponsorship@rclone.com
## GitHub repository
## GitHub repository ##
The project's repository is located at:
- https://github.com/rclone/rclone
* https://github.com/rclone/rclone
There you can file bug reports or contribute with pull requests.
## Twitter
## Twitter ##
You can also follow Nick on twitter for rclone announcements:
You can also follow me on twitter for rclone announcements:
- [@njcw](https://twitter.com/njcw)
* [@njcw](https://twitter.com/njcw)
## Email
## Email ##
Or if all else fails or you want to ask something private or
confidential
- info@rclone.com
Please don't email requests for help to this address - those are
better directed to the forum unless you'd like to sign up for business
support.
confidential email [Nick Craig-Wood](mailto:nick@craig-wood.com).
Please don't email me requests for help - those are better directed to
the forum. Thanks!

68
docs/content/donate.md Normal file
View File

@@ -0,0 +1,68 @@
---
title: "Donations"
description: "Donations to the rclone project."
type: page
---
# {{< icon "fa fa-heart heart" >}} Donations to the rclone project
Rclone is a free open-source project with thousands of contributions
from volunteers all round the world and I would like to thank all of
you for donating your time to the project.
However, maintaining rclone is a lot of work - easily the equivalent
of a **full time job** - for me. Nothing stands still in the world of
cloud storage. Rclone needs constant attention adapting to changes by
cloud providers, adding new providers, adding new features, keeping
the integration tests working, fixing bugs and many more things!
I love doing the work and I'd like to spend more time doing it - your
support helps make that possible.
Thank you :-)
{{< nick >}}
PS I'm available for rclone and object storage related consultancy -
[email me](mailto:nick@craig-wood.com) for more info.
{{< monthly_donations >}}
## Personal users
If you are a personal user and you would like to support the project
with sponsorship as a way of saying thank you that would be most
appreciated. {{< icon "fa fa-heart heart" >}}
## Business users
If your business distributes rclone as part of its products (which the
generous MIT licence allows) or uses it internally then it would make
business sense to sponsor the rclone project to ensure that the
project you rely on stays healthy and well maintained.
If you run one of the cloud storage providers that rclone supports and
rclone is driving revenue your way then you know it makes sense to
sponsor the project. {{< icon "far fa-smile" >}}
Note that if you choose the "GitHub Sponsors" option they will provide
proper tax invoices appropriate for your country.
## Monthly donations
Monthly donations help keep rclone development sustainable in the long
run so this is the preferred option. A small amount every month is
much better than a one off donation as it allows planning for the
future.
{{< monthly_donations >}}
## One off donations
If you don't want to contribute monthly then of course we'd love a one
off donation.
{{< one_off_donations >}}
If you require a receipt or wish to contribute in a different way then
please [drop me an email](mailto:nick@craig-wood.com).

View File

@@ -1522,7 +1522,7 @@ be the same account as the Google Drive you want to access)
"Google Drive API".
4. Click "Credentials" in the left-side panel (not "Create
credentials", which opens the wizard).
credentials", which opens the wizard), then "Create credentials"
5. If you already configured an "Oauth Consent Screen", then skip
to the next step; if not, click on "CONFIGURE CONSENT SCREEN" button

View File

@@ -502,6 +502,6 @@ to be the same account as the Dropbox you want to access)
6. Switch to the `Permissions` tab. Enable at least the following permissions: `account_info.read`, `files.metadata.write`, `files.content.write`, `files.content.read`, `sharing.write`. The `files.metadata.read` and `sharing.read` checkboxes will be marked too. Click `Submit`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/` and click on `Add`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/`
8. Find the `App key` and `App secret` values on the `Settings` tab. Use these values in rclone config to add a new remote or edit an existing remote. The `App key` setting corresponds to `client_id` in rclone config, the `App secret` corresponds to `client_secret`

View File

@@ -174,7 +174,7 @@ These flags are available for every command.
--use-json-log Use json log format
--use-mmap Use mmap allocator (see docs)
--use-server-modtime Use server modified time instead of object metadata
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.1")
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.0")
-v, --verbose count Print lots more stuff (repeat for more)
```

View File

@@ -8,6 +8,8 @@ versionIntroduced: "v1.50"
[Mail.ru Cloud](https://cloud.mail.ru/) is a cloud storage provided by a Russian internet company [Mail.Ru Group](https://mail.ru). The official desktop client is [Disk-O:](https://disk-o.cloud/en), available on Windows and Mac OS.
Currently it is recommended to disable 2FA on Mail.ru accounts intended for rclone until it gets eventually implemented.
## Features highlights
- Paths may be as deep as required, e.g. `remote:directory/subdirectory`

View File

@@ -1 +1 @@
v1.63.1
v1.64.0

View File

@@ -63,12 +63,10 @@ func (dt DirTree) AddEntry(entry fs.DirEntry) {
panic("unknown entry type")
}
remoteParent := parentDir(entry.Remote())
dt.checkParent("", remoteParent, nil)
dt.CheckParent("", remoteParent)
}
// Find returns the DirEntry for filePath or nil if not found
//
// None that Find does a O(N) search so can be slow
func (dt DirTree) Find(filePath string) (parentPath string, entry fs.DirEntry) {
parentPath = parentDir(filePath)
for _, entry := range dt[parentPath] {
@@ -79,52 +77,23 @@ func (dt DirTree) Find(filePath string) (parentPath string, entry fs.DirEntry) {
return parentPath, nil
}
// checkParent checks that dirPath has a *Dir in its parent
//
// If dirs is not nil it must contain entries for every *Dir found in
// the tree. It is used to speed up the checking when calling this
// repeatedly.
func (dt DirTree) checkParent(root, dirPath string, dirs map[string]struct{}) {
var parentPath string
for {
if dirPath == root {
return
}
// Can rely on dirs to have all directories in it so
// we don't need to call Find.
if dirs != nil {
if _, found := dirs[dirPath]; found {
return
}
parentPath = parentDir(dirPath)
} else {
var entry fs.DirEntry
parentPath, entry = dt.Find(dirPath)
if entry != nil {
return
}
}
dt[parentPath] = append(dt[parentPath], fs.NewDir(dirPath, time.Now()))
if dirs != nil {
dirs[dirPath] = struct{}{}
}
dirPath = parentPath
// CheckParent checks that dirPath has a *Dir in its parent
func (dt DirTree) CheckParent(root, dirPath string) {
if dirPath == root {
return
}
parentPath, entry := dt.Find(dirPath)
if entry != nil {
return
}
dt[parentPath] = append(dt[parentPath], fs.NewDir(dirPath, time.Now()))
dt.CheckParent(root, parentPath)
}
// CheckParents checks every directory in the tree has *Dir in its parent
func (dt DirTree) CheckParents(root string) {
dirs := make(map[string]struct{})
// Find all the directories and stick them in dirs
for _, entries := range dt {
for _, entry := range entries {
if _, ok := entry.(fs.Directory); ok {
dirs[entry.Remote()] = struct{}{}
}
}
}
for dirPath := range dt {
dt.checkParent(root, dirPath, dirs)
dt.CheckParent(root, dirPath)
}
}

View File

@@ -1,7 +1,6 @@
package dirtree
import (
"fmt"
"testing"
"github.com/rclone/rclone/fstest/mockdir"
@@ -109,7 +108,7 @@ func TestDirTreeCheckParent(t *testing.T) {
sausage
`, dt.String())
dt.checkParent("", "dir/subdir", nil)
dt.CheckParent("", "dir/subdir")
assert.Equal(t, `/
dir/
@@ -201,21 +200,3 @@ dir2/
`, dt.String())
}
func BenchmarkCheckParents(b *testing.B) {
for _, N := range []int{1e2, 1e3, 1e4, 1e5, 1e6} {
b.Run(fmt.Sprintf("%d", N), func(b *testing.B) {
b.StopTimer()
dt := New()
for i := 0; i < N; i++ {
remote := fmt.Sprintf("dir%09d/file%09d.txt", i, 1)
o := mockobject.New(remote)
dt.Add(o)
}
b.StartTimer()
for n := 0; n < b.N; n++ {
dt.CheckParents("")
}
})
}
}

View File

@@ -358,7 +358,7 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
inplace = true
remotePartial = remote
)
if !ci.Inplace && f.Features().Move != nil && f.Features().PartialUploads && !strings.HasSuffix(remote, ".rclonelink") {
if !ci.Inplace && f.Features().Move != nil && f.Features().PartialUploads {
// Avoid making the leaf name longer if it's already lengthy to avoid
// trouble with file name length limits.
suffix := "." + random.String(8) + ".partial"
@@ -926,15 +926,10 @@ func ListFn(ctx context.Context, f fs.Fs, fn func(fs.Object)) error {
// StdoutMutex mutex for synchronized output on stdout
var StdoutMutex sync.Mutex
// SyncPrintf is a global var holding the Printf function so that it
// can be overridden.
//
// This writes to stdout holding the StdoutMutex. If you are going to
// override it and write to os.Stdout then you should hold the
// StdoutMutex too.
// SyncPrintf is a global var holding the Printf function used in syncFprintf so that it can be overridden
// Note, despite name, does not provide sync and should not be called directly
// Call syncFprintf, which provides sync
var SyncPrintf = func(format string, a ...interface{}) {
StdoutMutex.Lock()
defer StdoutMutex.Unlock()
fmt.Printf(format, a...)
}
@@ -942,13 +937,14 @@ var SyncPrintf = func(format string, a ...interface{}) {
//
// Ignores errors from Fprintf.
//
// Prints to stdout if w is nil
// Updated to print to terminal if no writer is defined
// This special behavior is used to allow easier replacement of the print to terminal code by progress
func syncFprintf(w io.Writer, format string, a ...interface{}) {
StdoutMutex.Lock()
defer StdoutMutex.Unlock()
if w == nil || w == os.Stdout {
SyncPrintf(format, a...)
} else {
StdoutMutex.Lock()
defer StdoutMutex.Unlock()
_, _ = fmt.Fprintf(w, format, a...)
}
}

View File

@@ -1,4 +1,4 @@
package fs
// VersionTag of rclone
var VersionTag = "v1.63.1"
var VersionTag = "v1.64.0"

10
go.mod
View File

@@ -50,12 +50,12 @@ require (
github.com/rclone/ftp v0.0.0-20230327202000-dadc1f64e87d
github.com/rfjakob/eme v1.1.2
github.com/rivo/uniseg v0.4.4
github.com/shirou/gopsutil/v3 v3.23.5
github.com/shirou/gopsutil/v3 v3.23.3
github.com/sirupsen/logrus v1.9.0
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
github.com/spf13/cobra v1.7.0
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.8.3
github.com/stretchr/testify v1.8.2
github.com/t3rm1n4l/go-mega v0.0.0-20230228171823-a01a2cda13ca
github.com/winfsp/cgofuse v1.5.1-0.20221118130120-84c0898ad2e0
github.com/xanzy/ssh-agent v0.3.3
@@ -67,7 +67,7 @@ require (
golang.org/x/net v0.8.0
golang.org/x/oauth2 v0.6.0
golang.org/x/sync v0.1.0
golang.org/x/sys v0.8.0
golang.org/x/sys v0.7.0
golang.org/x/text v0.8.0
golang.org/x/time v0.3.0
google.golang.org/api v0.115.0
@@ -120,13 +120,13 @@ require (
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/shoenig/go-m1cpu v0.1.4 // indirect
github.com/sony/gobreaker v0.5.0 // indirect
github.com/spacemonkeygo/monkit/v3 v3.0.19 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
github.com/vivint/infectious v0.0.0-20200605153912-25a574ae18a3 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
github.com/zeebo/blake3 v0.2.3 // indirect
github.com/zeebo/errs v1.3.0 // indirect
go.opencensus.io v0.24.0 // indirect

24
go.sum
View File

@@ -428,12 +428,12 @@ github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6po
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/shirou/gopsutil/v3 v3.23.5 h1:5SgDCeQ0KW0S4N0znjeM/eFHXXOKyv2dVNgRq/c9P6Y=
github.com/shirou/gopsutil/v3 v3.23.5/go.mod h1:Ng3Maa27Q2KARVJ0SPZF5NdrQSC3XHKP8IIWrHgMeLY=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/shirou/gopsutil/v3 v3.23.3 h1:Syt5vVZXUDXPEXpIBt5ziWsJ4LdSAAxF4l/xZeQgSEE=
github.com/shirou/gopsutil/v3 v3.23.3/go.mod h1:lSBNN6t3+D6W5e5nXTxc8KIMMVxAcS+6IJlffjRRlMU=
github.com/shoenig/go-m1cpu v0.1.4 h1:SZPIgRM2sEF9NJy50mRHu9PKGwxyyTTJIWvCtgVbozs=
github.com/shoenig/go-m1cpu v0.1.4/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
github.com/shoenig/test v0.6.3 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c=
github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
@@ -470,8 +470,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/t3rm1n4l/go-mega v0.0.0-20230228171823-a01a2cda13ca h1:I9rVnNXdIkij4UvMT7OmKhH9sOIvS8iXkxfPdnn9wQA=
github.com/t3rm1n4l/go-mega v0.0.0-20230228171823-a01a2cda13ca/go.mod h1:suDIky6yrK07NnaBadCB4sS0CqFOvUK91lH7CR+JlDA=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
@@ -496,8 +496,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yunify/qingstor-sdk-go/v3 v3.2.0 h1:9sB2WZMgjwSUNZhrgvaNGazVltoFUUfuS9f0uCWtTr8=
github.com/yunify/qingstor-sdk-go/v3 v3.2.0/go.mod h1:KciFNuMu6F4WLk9nGwwK69sCGKLCdd9f97ac/wfumS4=
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/assert v1.3.1 h1:vukIABvugfNMZMQO1ABsyQDJDTVQbn+LWSMy1ol1h6A=
github.com/zeebo/assert v1.3.1/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
@@ -691,8 +691,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=

126
rclone.1 generated
View File

@@ -1,7 +1,7 @@
.\"t
.\" Automatically generated by Pandoc 2.9.2.1
.\"
.TH "rclone" "1" "Jul 17, 2023" "User Manual" ""
.TH "rclone" "1" "Jun 30, 2023" "User Manual" ""
.hy
.SH Rclone syncs your files to cloud storage
.PP
@@ -24,7 +24,7 @@ Donate. (https://rclone.org/donate/)
Rclone is a command-line program to manage files on cloud storage.
It is a feature-rich alternative to cloud vendors\[aq] web storage
interfaces.
Over 70 cloud storage products support rclone including S3 object
Over 40 cloud storage products support rclone including S3 object
stores, business & consumer file storage services, as well as standard
transfer protocols.
.PP
@@ -3456,42 +3456,6 @@ not listed here.
.IP \[bu] 2
rclone config (https://rclone.org/commands/rclone_config/) - Enter an
interactive configuration session.
.SH rclone config redacted
.PP
Print redacted (decrypted) config file, or the redacted config for a
single remote.
.SH Synopsis
.PP
This prints a redacted copy of the config file, either the whole config
file or for a given remote.
.PP
The config file will be redacted by replacing all passwords and other
sensitive info with XXX.
.PP
This makes the config file suitable for posting online for support.
.PP
It should be double checked before posting as the redaction may not be
perfect.
.IP
.nf
\f[C]
rclone config redacted [<remote>] [flags]
\f[R]
.fi
.SH Options
.IP
.nf
\f[C]
-h, --help help for redacted
\f[R]
.fi
.PP
See the global flags page (https://rclone.org/flags/) for global options
not listed here.
.SH SEE ALSO
.IP \[bu] 2
rclone config (https://rclone.org/commands/rclone_config/) - Enter an
interactive configuration session.
.SH rclone config show
.PP
Print (decrypted) config file, or the config for a single remote.
@@ -14863,7 +14827,7 @@ directory \f[C]dir\f[R] and sub directories.
E.g.
on Microsoft Windows
\f[C]rclone ls remote: --exclude \[dq]*\[rs][{JP,KR,HK}\[rs]]*\[dq]\f[R]
lists the files in \f[C]remote:\f[R] without \f[C][JP]\f[R] or
lists the files in \f[C]remote:\f[R] with \f[C][JP]\f[R] or
\f[C][KR]\f[R] or \f[C][HK]\f[R] in their name.
Quotes prevent the shell from interpreting the \f[C]\[rs]\f[R]
characters.\f[C]\[rs]\f[R] characters escape the \f[C][\f[R] and
@@ -20848,7 +20812,7 @@ These flags are available for every command.
--use-json-log Use json log format
--use-mmap Use mmap allocator (see docs)
--use-server-modtime Use server modified time instead of object metadata
--user-agent string Set the user-agent to a specified string (default \[dq]rclone/v1.63.1\[dq])
--user-agent string Set the user-agent to a specified string (default \[dq]rclone/v1.63.0\[dq])
-v, --verbose count Print lots more stuff (repeat for more)
\f[R]
.fi
@@ -38381,7 +38345,7 @@ Click \f[C]Submit\f[R]
.IP "7." 3
Switch to the \f[C]Settings\f[R] tab.
Fill \f[C]OAuth2 - Redirect URIs\f[R] as
\f[C]http://localhost:53682/\f[R] and click on \f[C]Add\f[R]
\f[C]http://localhost:53682/\f[R]
.IP "8." 3
Find the \f[C]App key\f[R] and \f[C]App secret\f[R] values on the
\f[C]Settings\f[R] tab.
@@ -42488,7 +42452,8 @@ Under \[dq]ENABLE APIS AND SERVICES\[dq] search for \[dq]Drive\[dq], and
enable the \[dq]Google Drive API\[dq].
.IP " 4." 4
Click \[dq]Credentials\[dq] in the left-side panel (not \[dq]Create
credentials\[dq], which opens the wizard).
credentials\[dq], which opens the wizard), then \[dq]Create
credentials\[dq]
.IP " 5." 4
If you already configured an \[dq]Oauth Consent Screen\[dq], then skip
to the next step; if not, click on \[dq]CONFIGURE CONSENT SCREEN\[dq]
@@ -46110,6 +46075,9 @@ Mail.ru Cloud (https://cloud.mail.ru/) is a cloud storage provided by a
Russian internet company Mail.Ru Group (https://mail.ru).
The official desktop client is Disk-O: (https://disk-o.cloud/en),
available on Windows and Mac OS.
.PP
Currently it is recommended to disable 2FA on Mail.ru accounts intended
for rclone until it gets eventually implemented.
.SS Features highlights
.IP \[bu] 2
Paths may be as deep as required, e.g.
@@ -59513,60 +59481,6 @@ Options:
.IP \[bu] 2
\[dq]error\[dq]: return an error based on option value
.SH Changelog
.SS v1.63.1 - 2023-07-17
.PP
See commits (https://github.com/rclone/rclone/compare/v1.63.0...v1.63.1)
.IP \[bu] 2
Bug Fixes
.RS 2
.IP \[bu] 2
build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
.IP \[bu] 2
dirtree: Fix performance with large directories of directories and
\f[C]--fast-list\f[R] (Nick Craig-Wood)
.IP \[bu] 2
operations
.RS 2
.IP \[bu] 2
Fix deadlock when using \f[C]lsd\f[R]/\f[C]ls\f[R] with
\f[C]--progress\f[R] (Nick Craig-Wood)
.IP \[bu] 2
Fix \f[C].rclonelink\f[R] files not being converted back to symlinks
(Nick Craig-Wood)
.RE
.IP \[bu] 2
doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada Tsunayoshi,
Vladislav Vorobev)
.RE
.IP \[bu] 2
Local
.RS 2
.IP \[bu] 2
Fix partial directory read for corrupted filesystem (Nick Craig-Wood)
.RE
.IP \[bu] 2
Box
.RS 2
.IP \[bu] 2
Fix reconnect failing with HTTP 400 Bad Request (albertony)
.RE
.IP \[bu] 2
Smb
.RS 2
.IP \[bu] 2
Fix \[dq]Statfs failed: bucket or container name is needed\[dq] when
mounting (Nick Craig-Wood)
.RE
.IP \[bu] 2
WebDAV
.RS 2
.IP \[bu] 2
Nextcloud: fix must use /dav/files/USER endpoint not /webdav error
(Paul)
.IP \[bu] 2
Nextcloud chunking: add more guidance for the user to check the config
(darix)
.RE
.SS v1.63.0 - 2023-06-30
.PP
See commits (https://github.com/rclone/rclone/compare/v1.62.0...v1.63.0)
@@ -73503,13 +73417,6 @@ mac-15 <usman.ilamdin@phpstudios.com>
Forum for questions and general discussion:
.IP \[bu] 2
https://forum.rclone.org
.SS Business support
.PP
For business support or sponsorship enquiries please see:
.IP \[bu] 2
https://rclone.com/
.IP \[bu] 2
sponsorship\[at]rclone.com
.SS GitHub repository
.PP
The project\[aq]s repository is located at:
@@ -73519,18 +73426,15 @@ https://github.com/rclone/rclone
There you can file bug reports or contribute with pull requests.
.SS Twitter
.PP
You can also follow Nick on twitter for rclone announcements:
You can also follow me on twitter for rclone announcements:
.IP \[bu] 2
[\[at]njcw](https://twitter.com/njcw)
.SS Email
.PP
Or if all else fails or you want to ask something private or
confidential
.IP \[bu] 2
info\[at]rclone.com
.PP
Please don\[aq]t email requests for help to this address - those are
better directed to the forum unless you\[aq]d like to sign up for
business support.
confidential email Nick Craig-Wood (mailto:nick@craig-wood.com).
Please don\[aq]t email me requests for help - those are better directed
to the forum.
Thanks!
.SH AUTHORS
Nick Craig-Wood.