all: fix spelling across the project

* abcdefghijklmnopqrstuvwxyz
* accounting
* additional
* allowed
* almost
* already
* appropriately
* arise
* bandwidth
* behave
* bidirectional
* brackets
* cached
* characters
* cloud
* committing
* concatenating
* configured
* constructs
* current
* cutoff
* deferred
* different
* directory
* disposition
* dropbox
* either way
* error
* excess
* experiments
* explicitly
* externally
* files
* github
* gzipped
* hierarchies
* huffman
* hyphen
* implicitly
* independent
* insensitive
* integrity
* libraries
* literally
* metadata
* mimics
* missing
* modification
* multipart
* multiple
* nightmare
* nonexistent
* number
* obscure
* ourselves
* overridden
* potatoes
* preexisting
* priority
* received
* remote
* replacement
* represents
* reproducibility
* response
* satisfies
* sensitive
* separately
* separator
* specifying
* string
* successful
* synchronization
* syncing
* šenfeld
* take
* temporarily
* testcontents
* that
* the
* themselves
* throttling
* timeout
* transaction
* transferred
* unnecessary
* using
* webbrowser
* which
* with
* workspace

Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
This commit is contained in:
Josh Soref 2022-08-13 22:56:32 -04:00 committed by albertony
parent 0008cb4934
commit ce3b65e6dc
95 changed files with 160 additions and 160 deletions

View File

@ -77,7 +77,7 @@ Make sure you
* Add [documentation](#writing-documentation) for a new feature. * Add [documentation](#writing-documentation) for a new feature.
* [Commit your changes](#committing-your-changes) using the [message guideline](#commit-messages). * [Commit your changes](#committing-your-changes) using the [message guideline](#commit-messages).
When you are done with that push your changes to Github: When you are done with that push your changes to GitHub:
git push -u origin my-new-feature git push -u origin my-new-feature
@ -88,7 +88,7 @@ Your changes will then get reviewed and you might get asked to fix some stuff. I
You may sometimes be asked to [base your changes on the latest master](#basing-your-changes-on-the-latest-master) or [squash your commits](#squashing-your-commits). You may sometimes be asked to [base your changes on the latest master](#basing-your-changes-on-the-latest-master) or [squash your commits](#squashing-your-commits).
## Using Git and Github ## ## Using Git and GitHub ##
### Committing your changes ### ### Committing your changes ###

View File

@ -239,7 +239,7 @@ type GetFileInfoRequest struct {
// If the original source of the file being uploaded has a last // If the original source of the file being uploaded has a last
// modified time concept, Backblaze recommends using // modified time concept, Backblaze recommends using
// src_last_modified_millis as the name, and a string holding the base // src_last_modified_millis as the name, and a string holding the base
// 10 number number of milliseconds since midnight, January 1, 1970 // 10 number of milliseconds since midnight, January 1, 1970
// UTC. This fits in a 64 bit integer such as the type "long" in the // UTC. This fits in a 64 bit integer such as the type "long" in the
// programming language Java. It is intended to be compatible with // programming language Java. It is intended to be compatible with
// Java's time long. For example, it can be passed directly into the // Java's time long. For example, it can be passed directly into the

View File

@ -14,7 +14,7 @@ const (
timeFormat = `"` + time.RFC3339 + `"` timeFormat = `"` + time.RFC3339 + `"`
) )
// Time represents represents date and time information for the // Time represents date and time information for the
// box API, by using RFC3339 // box API, by using RFC3339
type Time time.Time type Time time.Time

View File

@ -64,7 +64,7 @@ import (
// length of 13 decimals it makes a 7-digit base-36 number. // length of 13 decimals it makes a 7-digit base-36 number.
// //
// When transactions is set to the norename style, data chunks will // When transactions is set to the norename style, data chunks will
// keep their temporary chunk names (with the transacion identifier // keep their temporary chunk names (with the transaction identifier
// suffix). To distinguish them from temporary chunks, the txn field // suffix). To distinguish them from temporary chunks, the txn field
// of the metadata file is set to match the transaction identifier of // of the metadata file is set to match the transaction identifier of
// the data chunks. // the data chunks.
@ -1079,7 +1079,7 @@ func (o *Object) readMetadata(ctx context.Context) error {
// readXactID returns the transaction ID stored in the passed metadata object // readXactID returns the transaction ID stored in the passed metadata object
func (o *Object) readXactID(ctx context.Context) (xactID string, err error) { func (o *Object) readXactID(ctx context.Context) (xactID string, err error) {
// if xactID has already been read and cahced return it now // if xactID has already been read and cached return it now
if o.xIDCached { if o.xIDCached {
return o.xactID, nil return o.xactID, nil
} }

View File

@ -1,4 +1,4 @@
// Package combine implents a backend to combine multipe remotes in a directory tree // Package combine implents a backend to combine multiple remotes in a directory tree
package combine package combine
/* /*

View File

@ -90,7 +90,7 @@ Generally -1 (default, equivalent to 5) is recommended.
Levels 1 to 9 increase compression at the cost of speed. Going past 6 Levels 1 to 9 increase compression at the cost of speed. Going past 6
generally offers very little return. generally offers very little return.
Level -2 uses Huffmann encoding only. Only use if you know what you Level -2 uses Huffman encoding only. Only use if you know what you
are doing. are doing.
Level 0 turns off compression.`, Level 0 turns off compression.`,
Default: sgzip.DefaultCompression, Default: sgzip.DefaultCompression,
@ -130,7 +130,7 @@ type Fs struct {
features *fs.Features // optional features features *fs.Features // optional features
} }
// NewFs contstructs an Fs from the path, container:path // NewFs constructs an Fs from the path, container:path
func NewFs(ctx context.Context, name, rpath string, m configmap.Mapper) (fs.Fs, error) { func NewFs(ctx context.Context, name, rpath string, m configmap.Mapper) (fs.Fs, error) {
// Parse config into Options struct // Parse config into Options struct
opt := new(Options) opt := new(Options)
@ -451,7 +451,7 @@ func (f *Fs) rcat(ctx context.Context, dstFileName string, in io.ReadCloser, mod
return f.Fs.Put(ctx, bytes.NewBuffer(buf[:n]), src, options...) return f.Fs.Put(ctx, bytes.NewBuffer(buf[:n]), src, options...)
} }
// Need to include what we allready read // Need to include what we already read
in = &ReadCloserWrapper{ in = &ReadCloserWrapper{
Reader: io.MultiReader(bytes.NewReader(buf), in), Reader: io.MultiReader(bytes.NewReader(buf), in),
Closer: in, Closer: in,
@ -731,7 +731,7 @@ func (f *Fs) PutStream(ctx context.Context, in io.Reader, src fs.ObjectInfo, opt
} }
// If our new object is compressed we have to rename it with the correct size. // If our new object is compressed we have to rename it with the correct size.
// Uncompressed objects don't store the size in the name so we they'll allready have the correct name. // Uncompressed objects don't store the size in the name so we they'll already have the correct name.
if compressible { if compressible {
wrapObj, err := operations.Move(ctx, f.Fs, nil, f.dataName(src.Remote(), newObj.size, compressible), newObj.Object) wrapObj, err := operations.Move(ctx, f.Fs, nil, f.dataName(src.Remote(), newObj.size, compressible), newObj.Object)
if err != nil { if err != nil {
@ -742,7 +742,7 @@ func (f *Fs) PutStream(ctx context.Context, in io.Reader, src fs.ObjectInfo, opt
return newObj, nil return newObj, nil
} }
// Temporarely disabled. There might be a way to implement this correctly but with the current handling metadata duplicate objects // Temporarily disabled. There might be a way to implement this correctly but with the current handling metadata duplicate objects
// will break stuff. Right no I can't think of a way to make this work. // will break stuff. Right no I can't think of a way to make this work.
// PutUnchecked uploads the object // PutUnchecked uploads the object

View File

@ -125,7 +125,7 @@ names, or for debugging purposes.`,
This option could help with shortening the encrypted filename. The This option could help with shortening the encrypted filename. The
suitable option would depend on the way your remote count the filename suitable option would depend on the way your remote count the filename
length and if it's case sensitve.`, length and if it's case sensitive.`,
Default: "base32", Default: "base32",
Examples: []fs.OptionExample{ Examples: []fs.OptionExample{
{ {

View File

@ -3305,7 +3305,7 @@ drives found and a combined drive.
upstreams = "My Drive=My Drive:" "Test Drive=Test Drive:" upstreams = "My Drive=My Drive:" "Test Drive=Test Drive:"
Adding this to the rclone config file will cause those team drives to Adding this to the rclone config file will cause those team drives to
be accessible with the aliases shown. Any illegal charactes will be be accessible with the aliases shown. Any illegal characters will be
substituted with "_" and duplicate names will have numbers suffixed. substituted with "_" and duplicate names will have numbers suffixed.
It will also add a remote called AllDrives which shows all the shared It will also add a remote called AllDrives which shows all the shared
drives combined into one directory tree. drives combined into one directory tree.

View File

@ -309,7 +309,7 @@ func (b *batcher) Shutdown() {
} }
b.shutOnce.Do(func() { b.shutOnce.Do(func() {
atexit.Unregister(b.atexit) atexit.Unregister(b.atexit)
fs.Infof(b.f, "Commiting uploads - please wait...") fs.Infof(b.f, "Committing uploads - please wait...")
// show that batcher is shutting down // show that batcher is shutting down
close(b.closed) close(b.closed)
// quit the commitLoop by sending a quitRequest message // quit the commitLoop by sending a quitRequest message

View File

@ -268,7 +268,7 @@ default based on the batch_mode in use.
Advanced: true, Advanced: true,
}, { }, {
Name: "batch_commit_timeout", Name: "batch_commit_timeout",
Help: `Max time to wait for a batch to finish comitting`, Help: `Max time to wait for a batch to finish committing`,
Default: fs.Duration(10 * time.Minute), Default: fs.Duration(10 * time.Minute),
Advanced: true, Advanced: true,
}, { }, {
@ -1669,7 +1669,7 @@ func (o *Object) uploadChunked(ctx context.Context, in0 io.Reader, commitInfo *f
correctOffset := uErr.EndpointError.IncorrectOffset.CorrectOffset correctOffset := uErr.EndpointError.IncorrectOffset.CorrectOffset
delta := int64(correctOffset) - int64(cursor.Offset) delta := int64(correctOffset) - int64(cursor.Offset)
skip += delta skip += delta
what := fmt.Sprintf("incorrect offset error receved: sent %d, need %d, skip %d", cursor.Offset, correctOffset, skip) what := fmt.Sprintf("incorrect offset error received: sent %d, need %d, skip %d", cursor.Offset, correctOffset, skip)
if skip < 0 { if skip < 0 {
return false, fmt.Errorf("can't seek backwards to correct offset: %s", what) return false, fmt.Errorf("can't seek backwards to correct offset: %s", what)
} else if skip == chunkSize { } else if skip == chunkSize {

View File

@ -84,7 +84,7 @@ type CopyFileResponse struct {
URLs []FileCopy `json:"urls"` URLs []FileCopy `json:"urls"`
} }
// FileCopy is used in the the CopyFileResponse // FileCopy is used in the CopyFileResponse
type FileCopy struct { type FileCopy struct {
FromURL string `json:"from_url"` FromURL string `json:"from_url"`
ToURL string `json:"to_url"` ToURL string `json:"to_url"`

View File

@ -19,7 +19,7 @@ const (
timeFormatJSON = `"` + timeFormatParameters + `"` timeFormatJSON = `"` + timeFormatParameters + `"`
) )
// Time represents represents date and time information for the // Time represents date and time information for the
// filefabric API // filefabric API
type Time time.Time type Time time.Time
@ -95,7 +95,7 @@ type Status struct {
// Warning string `json:"warning"` // obsolete // Warning string `json:"warning"` // obsolete
} }
// Status statisfies the error interface // Status satisfies the error interface
func (e *Status) Error() string { func (e *Status) Error() string {
return fmt.Sprintf("%s (%s)", e.Message, e.Code) return fmt.Sprintf("%s (%s)", e.Message, e.Code)
} }

View File

@ -843,7 +843,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
return f.purgeCheck(ctx, dir, false) return f.purgeCheck(ctx, dir, false)
} }
// Wait for the the background task to complete if necessary // Wait for the background task to complete if necessary
func (f *Fs) waitForBackgroundTask(ctx context.Context, taskID api.String) (err error) { func (f *Fs) waitForBackgroundTask(ctx context.Context, taskID api.String) (err error) {
if taskID == "" || taskID == "0" { if taskID == "" || taskID == "0" {
// No task to wait for // No task to wait for

View File

@ -311,7 +311,7 @@ rclone does if you know the bucket exists already.
Help: `If set this will decompress gzip encoded objects. Help: `If set this will decompress gzip encoded objects.
It is possible to upload objects to GCS with "Content-Encoding: gzip" It is possible to upload objects to GCS with "Content-Encoding: gzip"
set. Normally rclone will download these files files as compressed objects. set. Normally rclone will download these files as compressed objects.
If this flag is set then rclone will decompress these files with If this flag is set then rclone will decompress these files with
"Content-Encoding: gzip" as they are received. This means that rclone "Content-Encoding: gzip" as they are received. This means that rclone

View File

@ -330,7 +330,7 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e
f.tokenRenewer = oauthutil.NewRenew(f.String(), ts, transaction) f.tokenRenewer = oauthutil.NewRenew(f.String(), ts, transaction)
} }
// Do not allow the root-prefix to be non-existent nor a directory, // Do not allow the root-prefix to be nonexistent nor a directory,
// but it can be empty. // but it can be empty.
if f.opt.RootPrefix != "" { if f.opt.RootPrefix != "" {
item, err := f.fetchMetadataForPath(ctx, f.opt.RootPrefix, api.HiDriveObjectNoMetadataFields) item, err := f.fetchMetadataForPath(ctx, f.opt.RootPrefix, api.HiDriveObjectNoMetadataFields)
@ -623,7 +623,7 @@ func (f *Fs) Purge(ctx context.Context, dir string) error {
// should be retried after the parent-directories of the destination have been created. // should be retried after the parent-directories of the destination have been created.
// If so, it will create the parent-directories. // If so, it will create the parent-directories.
// //
// If any errors arrise while finding the source or // If any errors arise while finding the source or
// creating the parent-directory those will be returned. // creating the parent-directory those will be returned.
// Otherwise returns the originalError. // Otherwise returns the originalError.
func (f *Fs) shouldRetryAndCreateParents(ctx context.Context, destinationPath string, sourcePath string, originalError error) (bool, error) { func (f *Fs) shouldRetryAndCreateParents(ctx context.Context, destinationPath string, sourcePath string, originalError error) (bool, error) {
@ -961,7 +961,7 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
} else { } else {
_, _, err = o.fs.uploadFileChunked(ctx, resolvedPath, in, modTime, int(o.fs.opt.UploadChunkSize), o.fs.opt.UploadConcurrency) _, _, err = o.fs.uploadFileChunked(ctx, resolvedPath, in, modTime, int(o.fs.opt.UploadChunkSize), o.fs.opt.UploadConcurrency)
} }
// Try to check if object was updated, eitherway. // Try to check if object was updated, either way.
// Metadata should be updated even if the upload fails. // Metadata should be updated even if the upload fails.
info, metaErr = o.fs.fetchMetadataForPath(ctx, resolvedPath, api.HiDriveObjectWithMetadataFields) info, metaErr = o.fs.fetchMetadataForPath(ctx, resolvedPath, api.HiDriveObjectWithMetadataFields)
} else { } else {

View File

@ -138,7 +138,7 @@ var testTable = []struct {
// pattern describes how to use data to construct the hash-input. // pattern describes how to use data to construct the hash-input.
// For every entry n at even indices this repeats the data n times. // For every entry n at even indices this repeats the data n times.
// For every entry m at odd indices this repeats a null-byte m times. // For every entry m at odd indices this repeats a null-byte m times.
// The input-data is constructed by concatinating the results in order. // The input-data is constructed by concatenating the results in order.
pattern []int64 pattern []int64
out []byte out []byte
name string name string

View File

@ -227,7 +227,7 @@ type Object struct {
rawData json.RawMessage rawData json.RawMessage
} }
// IAFile reprensents a subset of object in MetadataResponse.Files // IAFile represents a subset of object in MetadataResponse.Files
type IAFile struct { type IAFile struct {
Name string `json:"name"` Name string `json:"name"`
// Source string `json:"source"` // Source string `json:"source"`
@ -243,7 +243,7 @@ type IAFile struct {
rawData json.RawMessage rawData json.RawMessage
} }
// MetadataResponse reprensents subset of the JSON object returned by (frontend)/metadata/ // MetadataResponse represents subset of the JSON object returned by (frontend)/metadata/
type MetadataResponse struct { type MetadataResponse struct {
Files []IAFile `json:"files"` Files []IAFile `json:"files"`
ItemSize int64 `json:"item_size"` ItemSize int64 `json:"item_size"`
@ -1273,7 +1273,7 @@ func trimPathPrefix(s, prefix string, enc encoder.MultiEncoder) string {
return enc.ToStandardPath(strings.TrimPrefix(s, prefix+"/")) return enc.ToStandardPath(strings.TrimPrefix(s, prefix+"/"))
} }
// mimicks urllib.parse.quote() on Python; exclude / from url.PathEscape // mimics urllib.parse.quote() on Python; exclude / from url.PathEscape
func quotePath(s string) string { func quotePath(s string) string {
seg := strings.Split(s, "/") seg := strings.Split(s, "/")
newValues := []string{} newValues := []string{}

View File

@ -1418,7 +1418,7 @@ func (f *Fs) Copy(ctx context.Context, src fs.Object, remote string) (fs.Object,
} }
info, err := f.copyOrMove(ctx, "cp", srcObj.filePath(), remote) info, err := f.copyOrMove(ctx, "cp", srcObj.filePath(), remote)
// if destination was a trashed file then after a successfull copy the copied file is still in trash (bug in api?) // if destination was a trashed file then after a successful copy the copied file is still in trash (bug in api?)
if err == nil && bool(info.Deleted) && !f.opt.TrashedOnly && info.State == "COMPLETED" { if err == nil && bool(info.Deleted) && !f.opt.TrashedOnly && info.State == "COMPLETED" {
fs.Debugf(src, "Server-side copied to trashed destination, restoring") fs.Debugf(src, "Server-side copied to trashed destination, restoring")
info, err = f.createOrUpdate(ctx, remote, srcObj.modTime, srcObj.size, srcObj.md5) info, err = f.createOrUpdate(ctx, remote, srcObj.modTime, srcObj.size, srcObj.md5)

View File

@ -668,7 +668,7 @@ func (f *Fs) PublicLink(ctx context.Context, remote string, expire fs.Duration,
// //
// https://app.koofr.net/content/links/39a6cc01-3b23-477a-8059-c0fb3b0f15de/files/get?path=%2F // https://app.koofr.net/content/links/39a6cc01-3b23-477a-8059-c0fb3b0f15de/files/get?path=%2F
// //
// I am not sure about meaning of "path" parameter; in my expriments // I am not sure about meaning of "path" parameter; in my experiments
// it is always "%2F", and omitting it or putting any other value // it is always "%2F", and omitting it or putting any other value
// results in 404. // results in 404.
// //

View File

@ -192,7 +192,7 @@ func TestHashOnUpdate(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, "9a0364b9e99bb480dd25e1f0284c8555", md5) assert.Equal(t, "9a0364b9e99bb480dd25e1f0284c8555", md5)
// Reupload it with diferent contents but same size and timestamp // Reupload it with different contents but same size and timestamp
var b = bytes.NewBufferString("CONTENT") var b = bytes.NewBufferString("CONTENT")
src := object.NewStaticObjectInfo(filePath, when, int64(b.Len()), true, nil, f) src := object.NewStaticObjectInfo(filePath, when, int64(b.Len()), true, nil, f)
err = o.Update(ctx, b, src) err = o.Update(ctx, b, src)

View File

@ -9,7 +9,7 @@ import (
const haveSetBTime = false const haveSetBTime = false
// setBTime changes the the birth time of the file passed in // setBTime changes the birth time of the file passed in
func setBTime(name string, btime time.Time) error { func setBTime(name string, btime time.Time) error {
// Does nothing // Does nothing
return nil return nil

View File

@ -11,7 +11,7 @@ import (
const haveSetBTime = true const haveSetBTime = true
// setBTime sets the the birth time of the file passed in // setBTime sets the birth time of the file passed in
func setBTime(name string, btime time.Time) (err error) { func setBTime(name string, btime time.Time) (err error) {
h, err := syscall.Open(name, os.O_RDWR, 0755) h, err := syscall.Open(name, os.O_RDWR, 0755)
if err != nil { if err != nil {

View File

@ -347,7 +347,7 @@ func (f *Fs) mkdir(ctx context.Context, rootNode *mega.Node, dir string) (node *
} }
} }
if err != nil { if err != nil {
return nil, fmt.Errorf("internal error: mkdir called with non-existent root node: %w", err) return nil, fmt.Errorf("internal error: mkdir called with nonexistent root node: %w", err)
} }
// i is number of directories to create (may be 0) // i is number of directories to create (may be 0)
// node is directory to create them from // node is directory to create them from
@ -387,7 +387,7 @@ func (f *Fs) findRoot(ctx context.Context, create bool) (*mega.Node, error) {
return f._rootNode, nil return f._rootNode, nil
} }
// Check for pre-existing root // Check for preexisting root
absRoot := f.srv.FS.GetRoot() absRoot := f.srv.FS.GetRoot()
node, err := f.findDir(absRoot, f.root) node, err := f.findDir(absRoot, f.root)
//log.Printf("findRoot findDir %p %v", node, err) //log.Printf("findRoot findDir %p %v", node, err)

View File

@ -118,7 +118,7 @@ type Fs struct {
filetype string // dir, file or symlink filetype string // dir, file or symlink
dirscreated map[string]bool // if implicit dir has been created already dirscreated map[string]bool // if implicit dir has been created already
dirscreatedMutex sync.Mutex // mutex to protect dirscreated dirscreatedMutex sync.Mutex // mutex to protect dirscreated
statcache map[string][]File // cache successfull stat requests statcache map[string][]File // cache successful stat requests
statcacheMutex sync.RWMutex // RWMutex to protect statcache statcacheMutex sync.RWMutex // RWMutex to protect statcache
} }
@ -424,7 +424,7 @@ func (f *Fs) getFileName(file *File) string {
func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err error) { func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err error) {
if f.filetype == "" { if f.filetype == "" {
// This happens in two scenarios. // This happens in two scenarios.
// 1. NewFs is done on a non-existent object, then later rclone attempts to List/ListR this NewFs. // 1. NewFs is done on a nonexistent object, then later rclone attempts to List/ListR this NewFs.
// 2. List/ListR is called from the context of test_all and not the regular rclone binary. // 2. List/ListR is called from the context of test_all and not the regular rclone binary.
err := f.initFs(ctx, dir) err := f.initFs(ctx, dir)
if err != nil { if err != nil {
@ -488,7 +488,7 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e
func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (err error) { func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (err error) {
if f.filetype == "" { if f.filetype == "" {
// This happens in two scenarios. // This happens in two scenarios.
// 1. NewFs is done on a non-existent object, then later rclone attempts to List/ListR this NewFs. // 1. NewFs is done on a nonexistent object, then later rclone attempts to List/ListR this NewFs.
// 2. List/ListR is called from the context of test_all and not the regular rclone binary. // 2. List/ListR is called from the context of test_all and not the regular rclone binary.
err := f.initFs(ctx, dir) err := f.initFs(ctx, dir)
if err != nil { if err != nil {

View File

@ -70,7 +70,7 @@ type Drive struct {
Quota Quota `json:"quota"` Quota Quota `json:"quota"`
} }
// Timestamp represents represents date and time information for the // Timestamp represents date and time information for the
// OneDrive API, by using ISO 8601 and is always in UTC time. // OneDrive API, by using ISO 8601 and is always in UTC time.
type Timestamp time.Time type Timestamp time.Time

View File

@ -13,7 +13,7 @@ const (
timeFormat = `"` + time.RFC1123Z + `"` timeFormat = `"` + time.RFC1123Z + `"`
) )
// Time represents represents date and time information for the // Time represents date and time information for the
// pcloud API, by using RFC1123Z // pcloud API, by using RFC1123Z
type Time time.Time type Time time.Time

View File

@ -2009,7 +2009,7 @@ See [the time option docs](/docs/#time-option) for valid formats.
Help: `If set this will decompress gzip encoded objects. Help: `If set this will decompress gzip encoded objects.
It is possible to upload objects to S3 with "Content-Encoding: gzip" It is possible to upload objects to S3 with "Content-Encoding: gzip"
set. Normally rclone will download these files files as compressed objects. set. Normally rclone will download these files as compressed objects.
If this flag is set then rclone will decompress these files with If this flag is set then rclone will decompress these files with
"Content-Encoding: gzip" as they are received. This means that rclone "Content-Encoding: gzip" as they are received. This means that rclone
@ -5199,7 +5199,7 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
var head s3.HeadObjectOutput var head s3.HeadObjectOutput
//structs.SetFrom(&head, &req) //structs.SetFrom(&head, &req)
setFrom_s3HeadObjectOutput_s3PutObjectInput(&head, &req) setFrom_s3HeadObjectOutput_s3PutObjectInput(&head, &req)
head.ETag = &md5sumHex // doesn't matter quotes are misssing head.ETag = &md5sumHex // doesn't matter quotes are missing
head.ContentLength = &size head.ContentLength = &size
// If we have done a single part PUT request then we can read these // If we have done a single part PUT request then we can read these
if gotEtag != "" { if gotEtag != "" {

View File

@ -78,7 +78,7 @@ func (f *Fs) InternalTestMetadata(t *testing.T) {
} }
t.Run("GzipEncoding", func(t *testing.T) { t.Run("GzipEncoding", func(t *testing.T) {
// Test that the gziped file we uploaded can be // Test that the gzipped file we uploaded can be
// downloaded with and without decompression // downloaded with and without decompression
checkDownload := func(wantContents string, wantSize int64, wantHash string) { checkDownload := func(wantContents string, wantSize int64, wantHash string) {
gotContents := fstests.ReadObject(ctx, t, o, -1) gotContents := fstests.ReadObject(ctx, t, o, -1)
@ -116,7 +116,7 @@ func (f *Fs) InternalTestNoHead(t *testing.T) {
defer func() { defer func() {
assert.NoError(t, obj.Remove(ctx)) assert.NoError(t, obj.Remove(ctx))
}() }()
// PutTestcontests checks the received object // PutTestcontents checks the received object
} }

View File

@ -16,8 +16,8 @@ func TestInternalUrlEncode(t *testing.T) {
want string want string
}{ }{
{"", ""}, {"", ""},
{"abcdefghijklmopqrstuvwxyz", "abcdefghijklmopqrstuvwxyz"}, {"abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz"},
{"ABCDEFGHIJKLMOPQRSTUVWXYZ", "ABCDEFGHIJKLMOPQRSTUVWXYZ"}, {"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"},
{"0123456789", "0123456789"}, {"0123456789", "0123456789"},
{"abc/ABC/123", "abc/ABC/123"}, {"abc/ABC/123", "abc/ABC/123"},
{" ", "%20%20%20"}, {" ", "%20%20%20"},

View File

@ -80,7 +80,7 @@ type UploadInfo struct {
} `json:"data"` } `json:"data"`
} }
// UploadResponse is the respnse to a successful upload // UploadResponse is the response to a successful upload
type UploadResponse struct { type UploadResponse struct {
Files []struct { Files []struct {
Name string `json:"name"` Name string `json:"name"`

View File

@ -163,7 +163,7 @@ func (f *Fs) splitPathFull(pth string) (string, string) {
return "//" + fullPath[:i], fullPath[i+1:] return "//" + fullPath[:i], fullPath[i+1:]
} }
// splitPath is modified splitPath version that doesn't include the seperator // splitPath is modified splitPath version that doesn't include the separator
// in the base path // in the base path
func (f *Fs) splitPath(pth string) (string, string) { func (f *Fs) splitPath(pth string) (string, string) {
// chop of any leading or trailing '/' // chop of any leading or trailing '/'
@ -479,7 +479,7 @@ func (f *Fs) putUnchecked(ctx context.Context, in io.Reader, remote string, size
} else if size == 0 { } else if size == 0 {
return nil, fs.ErrorCantUploadEmptyFiles return nil, fs.ErrorCantUploadEmptyFiles
} }
// yes it does take take 4 requests if we're uploading to root and 6+ if we're uploading to any subdir :( // yes it does take 4 requests if we're uploading to root and 6+ if we're uploading to any subdir :(
// create upload request // create upload request
opts := rest.Opts{ opts := rest.Opts{
@ -757,7 +757,7 @@ func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string
if err != nil { if err != nil {
return fmt.Errorf("dirmove: source not found: %w", err) return fmt.Errorf("dirmove: source not found: %w", err)
} }
// check if the destination allready exists // check if the destination already exists
dstPath := f.dirPath(dstRemote) dstPath := f.dirPath(dstRemote)
_, err = f.readMetaDataForPath(ctx, dstPath, &api.MetadataRequestOptions{Limit: 1}) _, err = f.readMetaDataForPath(ctx, dstPath, &api.MetadataRequestOptions{Limit: 1})
if err == nil { if err == nil {
@ -782,7 +782,7 @@ func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string
needMove := srcBase != dstBase needMove := srcBase != dstBase
// if we have to rename we'll have to use a temporary name since // if we have to rename we'll have to use a temporary name since
// there could allready be a directory with the same name as the src directory // there could already be a directory with the same name as the src directory
if needRename { if needRename {
// rename to a temporary name // rename to a temporary name
tmpName := "rcloneTemp" + random.String(8) tmpName := "rcloneTemp" + random.String(8)

View File

@ -6,7 +6,7 @@ import (
"time" "time"
) )
// Time represents represents date and time information for Zoho // Time represents date and time information for Zoho
// Zoho uses milliseconds since unix epoch (Java currentTimeMillis) // Zoho uses milliseconds since unix epoch (Java currentTimeMillis)
type Time time.Time type Time time.Time

View File

@ -150,8 +150,8 @@ func init() {
return workspace.ID, workspace.Attributes.Name return workspace.ID, workspace.Attributes.Name
}) })
case "workspace_end": case "workspace_end":
worksspaceID := config.Result workspaceID := config.Result
m.Set(configRootID, worksspaceID) m.Set(configRootID, workspaceID)
return nil, nil return nil, nil
} }
return nil, fmt.Errorf("unknown state %q", config.State) return nil, fmt.Errorf("unknown state %q", config.State)
@ -1264,7 +1264,7 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
return err return err
} }
// upload was successfull, need to delete old object before rename // upload was successful, need to delete old object before rename
if err = o.Remove(ctx); err != nil { if err = o.Remove(ctx); err != nil {
return fmt.Errorf("failed to remove old object: %w", err) return fmt.Errorf("failed to remove old object: %w", err)
} }

View File

@ -290,7 +290,7 @@ func (b *bisyncRun) applyDeltas(ctx context.Context, ds1, ds2 *deltaSet) (change
return return
} }
// exccessDeletes checks whether number of deletes is within allowed range // excessDeletes checks whether number of deletes is within allowed range
func (ds *deltaSet) excessDeletes() bool { func (ds *deltaSet) excessDeletes() bool {
maxDelete := ds.opt.MaxDelete maxDelete := ds.opt.MaxDelete
maxRatio := float64(maxDelete) / 100.0 maxRatio := float64(maxDelete) / 100.0

View File

@ -15,7 +15,7 @@ func makeHelp(help string) string {
return replacer.Replace(help) return replacer.Replace(help)
} }
var shortHelp = `Perform bidirectonal synchronization between two paths.` var shortHelp = `Perform bidirectional synchronization between two paths.`
var rcHelp = makeHelp(`This takes the following parameters var rcHelp = makeHelp(`This takes the following parameters

View File

@ -80,7 +80,7 @@ func handleDefaultMountpath() (string, error) {
func handleNetworkShareMountpath(mountpath string, opt *mountlib.Options) (string, error) { func handleNetworkShareMountpath(mountpath string, opt *mountlib.Options) (string, error) {
// Assuming mount path is a valid network share path (UNC format, "\\Server\Share"). // Assuming mount path is a valid network share path (UNC format, "\\Server\Share").
// Always mount as network drive, regardless of the NetworkMode option. // Always mount as network drive, regardless of the NetworkMode option.
// Find an unused drive letter to use as mountpoint, the the supplied path can // Find an unused drive letter to use as mountpoint, the supplied path can
// be used as volume prefix (network share path) instead of mountpoint. // be used as volume prefix (network share path) instead of mountpoint.
if !opt.NetworkMode { if !opt.NetworkMode {
fs.Debugf(nil, "Forcing --network-mode because mountpoint path is network share UNC format") fs.Debugf(nil, "Forcing --network-mode because mountpoint path is network share UNC format")

View File

@ -140,7 +140,7 @@ are 100% certain you are already passing obscured passwords then use
|rclone config password| command. |rclone config password| command.
The flag |--non-interactive| is for use by applications that wish to The flag |--non-interactive| is for use by applications that wish to
configure rclone themeselves, rather than using rclone's text based configure rclone themselves, rather than using rclone's text based
configuration questions. If this flag is set, and rclone needs to ask configuration questions. If this flag is set, and rclone needs to ask
the user a question, a JSON blob will be returned with the question in the user a question, a JSON blob will be returned with the question in
it. it.

View File

@ -99,7 +99,7 @@ For the MD5 and SHA1 algorithms there are also dedicated commands,
This command can also hash data received on standard input (stdin), This command can also hash data received on standard input (stdin),
by not passing a remote:path, or by passing a hyphen as remote:path by not passing a remote:path, or by passing a hyphen as remote:path
when there is data to read (if not, the hypen will be treated literaly, when there is data to read (if not, the hyphen will be treated literally,
as a relative path). as a relative path).
Run without a hash to see the list of all supported hashes, e.g. Run without a hash to see the list of all supported hashes, e.g.

View File

@ -343,7 +343,7 @@ func showBackend(name string) {
defaultValue := opt.GetValue() defaultValue := opt.GetValue()
// Default value and Required are related: Required means option must // Default value and Required are related: Required means option must
// have a value, but if there is a default then a value does not have // have a value, but if there is a default then a value does not have
// to be explicitely set and then Required makes no difference. // to be explicitly set and then Required makes no difference.
if defaultValue != "" { if defaultValue != "" {
fmt.Printf("- Default: %s\n", quoteString(defaultValue)) fmt.Printf("- Default: %s\n", quoteString(defaultValue))
} else { } else {

View File

@ -26,7 +26,7 @@ Note that |ls| and |lsl| recurse by default - use |--max-depth 1| to stop the re
The other list commands |lsd|,|lsf|,|lsjson| do not recurse by default - use |-R| to make them recurse. The other list commands |lsd|,|lsf|,|lsjson| do not recurse by default - use |-R| to make them recurse.
Listing a non-existent directory will produce an error except for Listing a nonexistent directory will produce an error except for
remotes which can't have empty directories (e.g. s3, swift, or gcs - remotes which can't have empty directories (e.g. s3, swift, or gcs -
the bucket-based remotes). the bucket-based remotes).
`, "|", "`") `, "|", "`")

View File

@ -84,7 +84,7 @@ If ` + "`--files-only`" + ` is not specified directories in addition to the file
will be returned. will be returned.
If ` + "`--metadata`" + ` is set then an additional Metadata key will be returned. If ` + "`--metadata`" + ` is set then an additional Metadata key will be returned.
This will have metdata in rclone standard format as a JSON object. This will have metadata in rclone standard format as a JSON object.
if ` + "`--stat`" + ` is set then a single JSON blob will be returned about the if ` + "`--stat`" + ` is set then a single JSON blob will be returned about the
item pointed to. This will return an error if the item isn't found. item pointed to. This will return an error if the item isn't found.

View File

@ -35,7 +35,7 @@ to running ` + "`rclone hashsum MD5 remote:path`" + `.
This command can also hash data received on standard input (stdin), This command can also hash data received on standard input (stdin),
by not passing a remote:path, or by passing a hyphen as remote:path by not passing a remote:path, or by passing a hyphen as remote:path
when there is data to read (if not, the hypen will be treated literaly, when there is data to read (if not, the hyphen will be treated literally,
as a relative path). as a relative path).
`, `,
RunE: func(command *cobra.Command, args []string) error { RunE: func(command *cobra.Command, args []string) error {

View File

@ -88,7 +88,7 @@ and experience unexpected program errors, freezes or other issues, consider moun
as a network drive instead. as a network drive instead.
When mounting as a fixed disk drive you can either mount to an unused drive letter, When mounting as a fixed disk drive you can either mount to an unused drive letter,
or to a path representing a **non-existent** subdirectory of an **existing** parent or to a path representing a **nonexistent** subdirectory of an **existing** parent
directory or drive. Using the special value |*| will tell rclone to directory or drive. Using the special value |*| will tell rclone to
automatically assign the next available drive letter, starting with Z: and moving backward. automatically assign the next available drive letter, starting with Z: and moving backward.
Examples: Examples:
@ -119,7 +119,7 @@ the mapped drive, shown in Windows Explorer etc, while the complete
|\\server\share| will be reported as the remote UNC path by |\\server\share| will be reported as the remote UNC path by
|net use| etc, just like a normal network drive mapping. |net use| etc, just like a normal network drive mapping.
If you specify a full network share UNC path with |--volname|, this will implicitely If you specify a full network share UNC path with |--volname|, this will implicitly
set the |--network-mode| option, so the following two examples have same result: set the |--network-mode| option, so the following two examples have same result:
rclone @ remote:path/to/files X: --network-mode rclone @ remote:path/to/files X: --network-mode
@ -128,7 +128,7 @@ set the |--network-mode| option, so the following two examples have same result:
You may also specify the network share UNC path as the mountpoint itself. Then rclone You may also specify the network share UNC path as the mountpoint itself. Then rclone
will automatically assign a drive letter, same as with |*| and use that as will automatically assign a drive letter, same as with |*| and use that as
mountpoint, and instead use the UNC path specified as the volume name, as if it were mountpoint, and instead use the UNC path specified as the volume name, as if it were
specified with the |--volname| option. This will also implicitely set specified with the |--volname| option. This will also implicitly set
the |--network-mode| option. This means the following two examples have same result: the |--network-mode| option. This means the following two examples have same result:
rclone @ remote:path/to/files \\cloud\remote rclone @ remote:path/to/files \\cloud\remote
@ -164,7 +164,7 @@ The permissions on each entry will be set according to [options](#options)
The default permissions corresponds to |--file-perms 0666 --dir-perms 0777|, The default permissions corresponds to |--file-perms 0666 --dir-perms 0777|,
i.e. read and write permissions to everyone. This means you will not be able i.e. read and write permissions to everyone. This means you will not be able
to start any programs from the the mount. To be able to do that you must add to start any programs from the mount. To be able to do that you must add
execute permissions, e.g. |--file-perms 0777 --dir-perms 0777| to add it execute permissions, e.g. |--file-perms 0777 --dir-perms 0777| to add it
to everyone. If the program needs to write files, chances are you will have to everyone. If the program needs to write files, chances are you will have
to enable [VFS File Caching](#vfs-file-caching) as well (see also [limitations](#limitations)). to enable [VFS File Caching](#vfs-file-caching) as well (see also [limitations](#limitations)).

View File

@ -238,7 +238,7 @@ func (m *MountPoint) Mount() (daemon *os.Process, err error) {
return nil, err return nil, err
} }
if err = m.CheckAllowings(); err != nil { if err = m.CheckAllowed(); err != nil {
return nil, err return nil, err
} }
m.SetVolumeName(m.MountOpt.VolumeName) m.SetVolumeName(m.MountOpt.VolumeName)

View File

@ -62,9 +62,9 @@ func absPath(path string) string {
return path return path
} }
// CheckAllowings informs about ignored flags on Windows. If not on Windows // CheckAllowed informs about ignored flags on Windows. If not on Windows
// and not --allow-non-empty flag is used, verify that mountpoint is empty. // and not --allow-non-empty flag is used, verify that mountpoint is empty.
func (m *MountPoint) CheckAllowings() error { func (m *MountPoint) CheckAllowed() error {
opt := &m.MountOpt opt := &m.MountOpt
if runtime.GOOS == "windows" { if runtime.GOOS == "windows" {
if opt.AllowNonEmpty { if opt.AllowNonEmpty {

View File

@ -48,7 +48,7 @@ press '?' to toggle the help on and off. The supported keys are:
` + strings.Join(helpText()[1:], "\n ") + ` ` + strings.Join(helpText()[1:], "\n ") + `
Listed files/directories may be prefixed by a one-character flag, Listed files/directories may be prefixed by a one-character flag,
some of them combined with a description in brackes at end of line. some of them combined with a description in brackets at end of line.
These flags have the following meaning: These flags have the following meaning:
e means this is an empty directory, i.e. contains no files (but e means this is an empty directory, i.e. contains no files (but

View File

@ -25,7 +25,7 @@ func newUnixListener(path string, gid int) (net.Listener, string, error) {
return nil, "", fmt.Errorf("expected only one socket from systemd, got %d", len(fds)) return nil, "", fmt.Errorf("expected only one socket from systemd, got %d", len(fds))
} }
// create socket outselves // create socket ourselves
if filepath.Ext(path) == "" { if filepath.Ext(path) == "" {
path += ".sock" path += ".sock"
} }

View File

@ -153,7 +153,7 @@ func newServer(ctx context.Context, f fs.Fs, opt *Options) (*server, error) {
} }
s.useTLS = s.opt.TLSKey != "" s.useTLS = s.opt.TLSKey != ""
// Check PassivePorts format since the the server library doesn't! // Check PassivePorts format since the server library doesn't!
if !passivePortsRe.MatchString(opt.PassivePorts) { if !passivePortsRe.MatchString(opt.PassivePorts) {
return nil, fmt.Errorf("invalid format for passive ports %q", opt.PassivePorts) return nil, fmt.Errorf("invalid format for passive ports %q", opt.PassivePorts)
} }

View File

@ -35,7 +35,7 @@ to running ` + "`rclone hashsum SHA1 remote:path`" + `.
This command can also hash data received on standard input (stdin), This command can also hash data received on standard input (stdin),
by not passing a remote:path, or by passing a hyphen as remote:path by not passing a remote:path, or by passing a hyphen as remote:path
when there is data to read (if not, the hypen will be treated literaly, when there is data to read (if not, the hyphen will be treated literally,
as a relative path). as a relative path).
This command can also hash data received on STDIN, if not passing This command can also hash data received on STDIN, if not passing

View File

@ -144,12 +144,12 @@ func Touch(ctx context.Context, f fs.Fs, remote string) error {
return nil return nil
} }
if notCreateNewFile { if notCreateNewFile {
fs.Logf(f, "Not touching non-existent file due to --no-create") fs.Logf(f, "Not touching nonexistent file due to --no-create")
return nil return nil
} }
if recursive { if recursive {
// For consistency, --recursive never creates new files. // For consistency, --recursive never creates new files.
fs.Logf(f, "Not touching non-existent file due to --recursive") fs.Logf(f, "Not touching nonexistent file due to --recursive")
return nil return nil
} }
if operations.SkipDestructive(ctx, f, "touch (create)") { if operations.SkipDestructive(ctx, f, "touch (create)") {

View File

@ -81,7 +81,7 @@ func TestEnvironmentVariables(t *testing.T) {
// Backend flags and remote name // Backend flags and remote name
// - The listremotes command includes names from environment variables, // - The listremotes command includes names from environment variables,
// the part between "RCLONE_CONFIG_" and "_TYPE", converted to lowercase. // the part between "RCLONE_CONFIG_" and "_TYPE", converted to lowercase.
// - When using using a remote created from env, e.g. with lsd command, // - When using a remote created from env, e.g. with lsd command,
// the name is case insensitive in contrast to remotes in config file // the name is case insensitive in contrast to remotes in config file
// (fs.ConfigToEnv converts to uppercase before checking environment). // (fs.ConfigToEnv converts to uppercase before checking environment).
// - Previously using a remote created from env, e.g. with lsd command, // - Previously using a remote created from env, e.g. with lsd command,

View File

@ -323,7 +323,7 @@ Most of these events come up due to a error status from an internal call.
On such a critical error the `{...}.path1.lst` and `{...}.path2.lst` On such a critical error the `{...}.path1.lst` and `{...}.path2.lst`
listing files are renamed to extension `.lst-err`, which blocks any future listing files are renamed to extension `.lst-err`, which blocks any future
bisync runs (since the normal `.lst` files are not found). bisync runs (since the normal `.lst` files are not found).
Bisync keeps them under `bisync` subdirectory of the rclone cache direcory, Bisync keeps them under `bisync` subdirectory of the rclone cache directory,
typically at `${HOME}/.cache/rclone/bisync/` on Linux. typically at `${HOME}/.cache/rclone/bisync/` on Linux.
Some errors are considered temporary and re-running the bisync is not blocked. Some errors are considered temporary and re-running the bisync is not blocked.
@ -421,7 +421,7 @@ don't have spelling case differences (`Smile.jpg` vs. `smile.jpg`).
## Windows support {#windows} ## Windows support {#windows}
Bisync has been tested on Windows 8.1, Windows 10 Pro 64-bit and on Windows Bisync has been tested on Windows 8.1, Windows 10 Pro 64-bit and on Windows
Github runners. GitHub runners.
Drive letters are allowed, including drive letters mapped to network drives Drive letters are allowed, including drive letters mapped to network drives
(`rclone bisync J:\localsync GDrive:`). (`rclone bisync J:\localsync GDrive:`).
@ -929,7 +929,7 @@ test command flags can be equally prefixed by a single `-` or double dash.
synched tree even if there are check file mismatches in the test tree. synched tree even if there are check file mismatches in the test tree.
- Some Dropbox tests can fail, notably printing the following message: - Some Dropbox tests can fail, notably printing the following message:
`src and dst identical but can't set mod time without deleting and re-uploading` `src and dst identical but can't set mod time without deleting and re-uploading`
This is expected and happens due a way Dropbox handles modificaion times. This is expected and happens due a way Dropbox handles modification times.
You should use the `-refresh-times` test flag to make up for this. You should use the `-refresh-times` test flag to make up for this.
- If Dropbox tests hit request limit for you and print error message - If Dropbox tests hit request limit for you and print error message
`too_many_requests/...: Too many requests or write operations.` `too_many_requests/...: Too many requests or write operations.`
@ -939,7 +939,7 @@ test command flags can be equally prefixed by a single `-` or double dash.
### Updating golden results ### Updating golden results
Sometimes even a slight change in the bisync source can cause little changes Sometimes even a slight change in the bisync source can cause little changes
spread around many log files. Updating them manually would be a nighmare. spread around many log files. Updating them manually would be a nightmare.
The `-golden` flag will store the `test.log` and `*.lst` listings from each The `-golden` flag will store the `test.log` and `*.lst` listings from each
test case into respective golden directories. Golden results will test case into respective golden directories. Golden results will

View File

@ -14,7 +14,7 @@ description: "Rclone Changelog"
* build: Fix android build after GitHub actions change (Nick Craig-Wood) * build: Fix android build after GitHub actions change (Nick Craig-Wood)
* dlna: Fix SOAP action header parsing (Joram Schrijver) * dlna: Fix SOAP action header parsing (Joram Schrijver)
* docs: Fix links to mount command from install docs (albertony) * docs: Fix links to mount command from install docs (albertony)
* dropox: Fix ChangeNotify was unable to decrypt errors (Nick Craig-Wood) * dropbox: Fix ChangeNotify was unable to decrypt errors (Nick Craig-Wood)
* fs: Fix parsing of times and durations of the form "YYYY-MM-DD HH:MM:SS" (Nick Craig-Wood) * fs: Fix parsing of times and durations of the form "YYYY-MM-DD HH:MM:SS" (Nick Craig-Wood)
* serve sftp: Fix checksum detection (Nick Craig-Wood) * serve sftp: Fix checksum detection (Nick Craig-Wood)
* sync: Add accidentally missed filter-sensitivity to --backup-dir option (Nick Naumann) * sync: Add accidentally missed filter-sensitivity to --backup-dir option (Nick Naumann)
@ -274,7 +274,7 @@ description: "Rclone Changelog"
* build * build
* Fix ARM architecture version in .deb packages after nfpm change (Nick Craig-Wood) * Fix ARM architecture version in .deb packages after nfpm change (Nick Craig-Wood)
* Hard fork `github.com/jlaffaye/ftp` to fix `go get github.com/rclone/rclone` (Nick Craig-Wood) * Hard fork `github.com/jlaffaye/ftp` to fix `go get github.com/rclone/rclone` (Nick Craig-Wood)
* oauthutil: Fix crash when webrowser requests `/robots.txt` (Nick Craig-Wood) * oauthutil: Fix crash when webbrowser requests `/robots.txt` (Nick Craig-Wood)
* operations: Fix goroutine leak in case of copy retry (Ankur Gupta) * operations: Fix goroutine leak in case of copy retry (Ankur Gupta)
* rc: * rc:
* Fix `operations/publiclink` default for `expires` parameter (Nick Craig-Wood) * Fix `operations/publiclink` default for `expires` parameter (Nick Craig-Wood)
@ -360,7 +360,7 @@ description: "Rclone Changelog"
* Add rclone to list of supported `md5sum`/`sha1sum` commands to look for (albertony) * Add rclone to list of supported `md5sum`/`sha1sum` commands to look for (albertony)
* Refactor so we only have one way of running remote commands (Nick Craig-Wood) * Refactor so we only have one way of running remote commands (Nick Craig-Wood)
* Fix timeout on hashing large files by sending keepalives (Nick Craig-Wood) * Fix timeout on hashing large files by sending keepalives (Nick Craig-Wood)
* Fix unecessary seeking when uploading and downloading files (Nick Craig-Wood) * Fix unnecessary seeking when uploading and downloading files (Nick Craig-Wood)
* Update docs on how to create `known_hosts` file (Nick Craig-Wood) * Update docs on how to create `known_hosts` file (Nick Craig-Wood)
* Storj * Storj
* Rename tardigrade backend to storj backend (Nick Craig-Wood) * Rename tardigrade backend to storj backend (Nick Craig-Wood)
@ -961,8 +961,8 @@ description: "Rclone Changelog"
* Add sort by average size in directory (Adam Plánský) * Add sort by average size in directory (Adam Plánský)
* Add toggle option for average s3ize in directory - key 'a' (Adam Plánský) * Add toggle option for average s3ize in directory - key 'a' (Adam Plánský)
* Add empty folder flag into ncdu browser (Adam Plánský) * Add empty folder flag into ncdu browser (Adam Plánský)
* Add `!` (errror) and `.` (unreadable) file flags to go with `e` (empty) (Nick Craig-Wood) * Add `!` (error) and `.` (unreadable) file flags to go with `e` (empty) (Nick Craig-Wood)
* obscure: Make `rclone osbcure -` ignore newline at end of line (Nick Craig-Wood) * obscure: Make `rclone obscure -` ignore newline at end of line (Nick Craig-Wood)
* operations * operations
* Add logs when need to upload files to set mod times (Nick Craig-Wood) * Add logs when need to upload files to set mod times (Nick Craig-Wood)
* Move and copy log name of the destination object in verbose (Adam Plánský) * Move and copy log name of the destination object in verbose (Adam Plánský)
@ -987,7 +987,7 @@ description: "Rclone Changelog"
* Make the error count match up in the log message (Nick Craig-Wood) * Make the error count match up in the log message (Nick Craig-Wood)
* move: Fix data loss when source and destination are the same object (Nick Craig-Wood) * move: Fix data loss when source and destination are the same object (Nick Craig-Wood)
* operations * operations
* Fix `--cutof-mode` hard not cutting off immediately (Nick Craig-Wood) * Fix `--cutoff-mode` hard not cutting off immediately (Nick Craig-Wood)
* Fix `--immutable` error message (Nick Craig-Wood) * Fix `--immutable` error message (Nick Craig-Wood)
* sync * sync
* Fix `--cutoff-mode` soft & cautious so it doesn't end the transfer early (Nick Craig-Wood) * Fix `--cutoff-mode` soft & cautious so it doesn't end the transfer early (Nick Craig-Wood)
@ -1035,7 +1035,7 @@ description: "Rclone Changelog"
* Fixed crash on an empty file name (lluuaapp) * Fixed crash on an empty file name (lluuaapp)
* Box * Box
* Fix NewObject for files that differ in case (Nick Craig-Wood) * Fix NewObject for files that differ in case (Nick Craig-Wood)
* Fix finding directories in a case insentive way (Nick Craig-Wood) * Fix finding directories in a case insensitive way (Nick Craig-Wood)
* Chunker * Chunker
* Skip long local hashing, hash in-transit (fixes) (Ivan Andreev) * Skip long local hashing, hash in-transit (fixes) (Ivan Andreev)
* Set Features ReadMimeType to false as Object.MimeType not supported (Nick Craig-Wood) * Set Features ReadMimeType to false as Object.MimeType not supported (Nick Craig-Wood)
@ -1116,7 +1116,7 @@ description: "Rclone Changelog"
* Implement `--sftp-use-fstat` for unusual SFTP servers (Nick Craig-Wood) * Implement `--sftp-use-fstat` for unusual SFTP servers (Nick Craig-Wood)
* Sugarsync * Sugarsync
* Fix NewObject for files that differ in case (Nick Craig-Wood) * Fix NewObject for files that differ in case (Nick Craig-Wood)
* Fix finding directories in a case insentive way (Nick Craig-Wood) * Fix finding directories in a case insensitive way (Nick Craig-Wood)
* Swift * Swift
* Fix deletion of parts of Static Large Object (SLO) (Nguyễn Hữu Luân) * Fix deletion of parts of Static Large Object (SLO) (Nguyễn Hữu Luân)
* Ensure partially uploaded large files are uploaded unless `--swift-leave-parts-on-error` (Nguyễn Hữu Luân) * Ensure partially uploaded large files are uploaded unless `--swift-leave-parts-on-error` (Nguyễn Hữu Luân)
@ -1190,7 +1190,7 @@ description: "Rclone Changelog"
[See commits](https://github.com/rclone/rclone/compare/v1.53.1...v1.53.2) [See commits](https://github.com/rclone/rclone/compare/v1.53.1...v1.53.2)
* Bug Fixes * Bug Fixes
* acounting * accounting
* Fix incorrect speed and transferTime in core/stats (Nick Craig-Wood) * Fix incorrect speed and transferTime in core/stats (Nick Craig-Wood)
* Stabilize display order of transfers on Windows (Nick Craig-Wood) * Stabilize display order of transfers on Windows (Nick Craig-Wood)
* operations * operations
@ -2160,7 +2160,7 @@ all the docs and Edward Barker for helping re-write the front page.
* rcat: Fix slowdown on systems with multiple hashes (Nick Craig-Wood) * rcat: Fix slowdown on systems with multiple hashes (Nick Craig-Wood)
* rcd: Fix permissions problems on cache directory with web gui download (Nick Craig-Wood) * rcd: Fix permissions problems on cache directory with web gui download (Nick Craig-Wood)
* Mount * Mount
* Default `--daemon-timout` to 15 minutes on macOS and FreeBSD (Nick Craig-Wood) * Default `--daemon-timeout` to 15 minutes on macOS and FreeBSD (Nick Craig-Wood)
* Update docs to show mounting from root OK for bucket-based (Nick Craig-Wood) * Update docs to show mounting from root OK for bucket-based (Nick Craig-Wood)
* Remove nonseekable flag from write files (Nick Craig-Wood) * Remove nonseekable flag from write files (Nick Craig-Wood)
* VFS * VFS
@ -2468,7 +2468,7 @@ all the docs and Edward Barker for helping re-write the front page.
* Update google cloud storage endpoints (weetmuts) * Update google cloud storage endpoints (weetmuts)
* HTTP * HTTP
* Add an example with username and password which is supported but wasn't documented (Nick Craig-Wood) * Add an example with username and password which is supported but wasn't documented (Nick Craig-Wood)
* Fix backend with `--files-from` and non-existent files (Nick Craig-Wood) * Fix backend with `--files-from` and nonexistent files (Nick Craig-Wood)
* Hubic * Hubic
* Make error message more informative if authentication fails (Nick Craig-Wood) * Make error message more informative if authentication fails (Nick Craig-Wood)
* Jottacloud * Jottacloud
@ -2952,7 +2952,7 @@ Point release to fix hubic and azureblob backends.
* FTP * FTP
* Work around strange response from box FTP server * Work around strange response from box FTP server
* More workarounds for FTP servers to fix mkParentDir error * More workarounds for FTP servers to fix mkParentDir error
* Fix no error on listing non-existent directory * Fix no error on listing nonexistent directory
* Google Cloud Storage * Google Cloud Storage
* Add service_account_credentials (Matt Holt) * Add service_account_credentials (Matt Holt)
* Detect bucket presence by listing it - minimises permissions needed * Detect bucket presence by listing it - minimises permissions needed
@ -3025,7 +3025,7 @@ Point release to fix hubic and azureblob backends.
* Add .deb and .rpm packages as part of the build * Add .deb and .rpm packages as part of the build
* Make a beta release for all branches on the main repo (but not pull requests) * Make a beta release for all branches on the main repo (but not pull requests)
* Bug Fixes * Bug Fixes
* config: fixes errors on non existing config by loading config file only on first access * config: fixes errors on nonexistent config by loading config file only on first access
* config: retry saving the config after failure (Mateusz) * config: retry saving the config after failure (Mateusz)
* sync: when using `--backup-dir` don't delete files if we can't set their modtime * sync: when using `--backup-dir` don't delete files if we can't set their modtime
* this fixes odd behaviour with Dropbox and `--backup-dir` * this fixes odd behaviour with Dropbox and `--backup-dir`
@ -3560,7 +3560,7 @@ Point release to fix hubic and azureblob backends.
* Update B2 docs with Data usage, and Crypt section - thanks Tomasz Mazur * Update B2 docs with Data usage, and Crypt section - thanks Tomasz Mazur
* S3 * S3
* Command line and config file support for * Command line and config file support for
* Setting/overriding ACL - thanks Radek Senfeld * Setting/overriding ACL - thanks Radek Šenfeld
* Setting storage class - thanks Asko Tamm * Setting storage class - thanks Asko Tamm
* Drive * Drive
* Make exponential backoff work exactly as per Google specification * Make exponential backoff work exactly as per Google specification

View File

@ -129,7 +129,7 @@ Generally -1 (default, equivalent to 5) is recommended.
Levels 1 to 9 increase compression at the cost of speed. Going past 6 Levels 1 to 9 increase compression at the cost of speed. Going past 6
generally offers very little return. generally offers very little return.
Level -2 uses Huffmann encoding only. Only use if you know what you Level -2 uses Huffman encoding only. Only use if you know what you
are doing. are doing.
Level 0 turns off compression. Level 0 turns off compression.

View File

@ -241,7 +241,7 @@ the password configured for an existing crypt remote means you will no longer
able to decrypt any of the previously encrypted content. The only possibility able to decrypt any of the previously encrypted content. The only possibility
is to re-upload everything via a crypt remote configured with your new password. is to re-upload everything via a crypt remote configured with your new password.
Depending on the size of your data, your bandwith, storage quota etc, there are Depending on the size of your data, your bandwidth, storage quota etc, there are
different approaches you can take: different approaches you can take:
- If you have everything in a different location, for example on your local system, - If you have everything in a different location, for example on your local system,
you could remove all of the prior encrypted files, change the password for your you could remove all of the prior encrypted files, change the password for your
@ -254,7 +254,7 @@ effectively decrypting everything on the fly using the old password and
re-encrypting using the new password. When done, delete the original crypt re-encrypting using the new password. When done, delete the original crypt
remote directory and finally the rclone crypt configuration with the old password. remote directory and finally the rclone crypt configuration with the old password.
All data will be streamed from the storage system and back, so you will All data will be streamed from the storage system and back, so you will
get half the bandwith and be charged twice if you have upload and download quota get half the bandwidth and be charged twice if you have upload and download quota
on the storage system. on the storage system.
**Note**: A security problem related to the random password generator **Note**: A security problem related to the random password generator
@ -567,7 +567,7 @@ How to encode the encrypted filename to text string.
This option could help with shortening the encrypted filename. The This option could help with shortening the encrypted filename. The
suitable option would depend on the way your remote count the filename suitable option would depend on the way your remote count the filename
length and if it's case sensitve. length and if it's case sensitive.
Properties: Properties:

View File

@ -498,7 +498,7 @@ backends can also store arbitrary user metadata.
Where possible the key names are standardized, so, for example, it is Where possible the key names are standardized, so, for example, it is
possible to copy object metadata from s3 to azureblob for example and possible to copy object metadata from s3 to azureblob for example and
metadata will be translated apropriately. metadata will be translated appropriately.
Some backends have limits on the size of the metadata and rclone will Some backends have limits on the size of the metadata and rclone will
give errors on upload if they are exceeded. give errors on upload if they are exceeded.
@ -641,7 +641,7 @@ would mean limit the upload and download bandwidth to 10 MiB/s.
single limit, specify the desired bandwidth in KiB/s, or use a single limit, specify the desired bandwidth in KiB/s, or use a
suffix B|K|M|G|T|P. The default is `0` which means to not limit bandwidth. suffix B|K|M|G|T|P. The default is `0` which means to not limit bandwidth.
The upload and download bandwidth can be specified seperately, as The upload and download bandwidth can be specified separately, as
`--bwlimit UP:DOWN`, so `--bwlimit UP:DOWN`, so
--bwlimit 10M:100k --bwlimit 10M:100k
@ -2011,7 +2011,7 @@ In all other cases the file will not be updated.
Consider using the `--modify-window` flag to compensate for time skews Consider using the `--modify-window` flag to compensate for time skews
between the source and the backend, for backends that do not support between the source and the backend, for backends that do not support
mod times, and instead use uploaded times. However, if the backend mod times, and instead use uploaded times. However, if the backend
does not support checksums, note that sync'ing or copying within the does not support checksums, note that syncing or copying within the
time skew window may still result in additional transfers for safety. time skew window may still result in additional transfers for safety.
### --use-mmap ### ### --use-mmap ###

View File

@ -1335,7 +1335,7 @@ drives found and a combined drive.
upstreams = "My Drive=My Drive:" "Test Drive=Test Drive:" upstreams = "My Drive=My Drive:" "Test Drive=Test Drive:"
Adding this to the rclone config file will cause those team drives to Adding this to the rclone config file will cause those team drives to
be accessible with the aliases shown. Any illegal charactes will be be accessible with the aliases shown. Any illegal characters will be
substituted with "_" and duplicate names will have numbers suffixed. substituted with "_" and duplicate names will have numbers suffixed.
It will also add a remote called AllDrives which shows all the shared It will also add a remote called AllDrives which shows all the shared
drives combined into one directory tree. drives combined into one directory tree.

View File

@ -409,7 +409,7 @@ Properties:
#### --dropbox-batch-commit-timeout #### --dropbox-batch-commit-timeout
Max time to wait for a batch to finish comitting Max time to wait for a batch to finish committing
Properties: Properties:

View File

@ -13,7 +13,7 @@ through a global file system.
## Configuration ## Configuration
The initial setup for the Enterprise File Fabric backend involves The initial setup for the Enterprise File Fabric backend involves
getting a token from the the Enterprise File Fabric which you need to getting a token from the Enterprise File Fabric which you need to
do in your browser. `rclone config` walks you through it. do in your browser. `rclone config` walks you through it.
Here is an example of how to make a remote called `remote`. First run: Here is an example of how to make a remote called `remote`. First run:

View File

@ -313,7 +313,7 @@ and may be set in the config file.
--drive-use-trash Send files to the trash instead of deleting permanently (default true) --drive-use-trash Send files to the trash instead of deleting permanently (default true)
--drive-v2-download-min-size SizeSuffix If Object's are greater, use drive v2 API to download (default off) --drive-v2-download-min-size SizeSuffix If Object's are greater, use drive v2 API to download (default off)
--dropbox-auth-url string Auth server URL --dropbox-auth-url string Auth server URL
--dropbox-batch-commit-timeout Duration Max time to wait for a batch to finish comitting (default 10m0s) --dropbox-batch-commit-timeout Duration Max time to wait for a batch to finish committing (default 10m0s)
--dropbox-batch-mode string Upload file batching sync|async|off (default "sync") --dropbox-batch-mode string Upload file batching sync|async|off (default "sync")
--dropbox-batch-size int Max number of files in upload batch --dropbox-batch-size int Max number of files in upload batch
--dropbox-batch-timeout Duration Max time to allow an idle upload batch before uploading (default 0s) --dropbox-batch-timeout Duration Max time to allow an idle upload batch before uploading (default 0s)

View File

@ -138,7 +138,7 @@ can be set with [`--ftp-port`](#ftp-port).
In addition to the [default restricted characters set](/overview/#restricted-characters) In addition to the [default restricted characters set](/overview/#restricted-characters)
the following characters are also replaced: the following characters are also replaced:
File names cannot end with the following characters. Repacement is File names cannot end with the following characters. Replacement is
limited to the last character in a file name: limited to the last character in a file name:
| Character | Value | Replacement | | Character | Value | Replacement |

View File

@ -607,7 +607,7 @@ Properties:
If set this will decompress gzip encoded objects. If set this will decompress gzip encoded objects.
It is possible to upload objects to GCS with "Content-Encoding: gzip" It is possible to upload objects to GCS with "Content-Encoding: gzip"
set. Normally rclone will download these files files as compressed objects. set. Normally rclone will download these files as compressed objects.
If this flag is set then rclone will decompress these files with If this flag is set then rclone will decompress these files with
"Content-Encoding: gzip" as they are received. This means that rclone "Content-Encoding: gzip" as they are received. This means that rclone

View File

@ -124,7 +124,7 @@ the process is very similar to the process of initial setup exemplified before.
HiDrive allows modification times to be set on objects accurate to 1 second. HiDrive allows modification times to be set on objects accurate to 1 second.
HiDrive supports [its own hash type](https://static.hidrive.com/dev/0001) HiDrive supports [its own hash type](https://static.hidrive.com/dev/0001)
which is used to verify the integrety of file contents after successful transfers. which is used to verify the integrity of file contents after successful transfers.
### Restricted filename characters ### Restricted filename characters

View File

@ -360,7 +360,7 @@ the system. Both scheduled task and Windows service can be used to achieve this.
NOTE: Remember that when rclone runs as the `SYSTEM` user, the user profile NOTE: Remember that when rclone runs as the `SYSTEM` user, the user profile
that it sees will not be yours. This means that if you normally run rclone with that it sees will not be yours. This means that if you normally run rclone with
configuration file in the default location, to be able to use the same configuration configuration file in the default location, to be able to use the same configuration
when running as the system user you must explicitely tell rclone where to find when running as the system user you must explicitly tell rclone where to find
it with the [`--config`](https://rclone.org/docs/#config-config-file) option, it with the [`--config`](https://rclone.org/docs/#config-config-file) option,
or else it will look in the system users profile path (`C:\Windows\System32\config\systemprofile`). or else it will look in the system users profile path (`C:\Windows\System32\config\systemprofile`).
To test your command manually from a Command Prompt, you can run it with To test your command manually from a Command Prompt, you can run it with
@ -424,7 +424,7 @@ it should be possible through path rewriting as described [here](https://github.
To Windows service running any rclone command, the excellent third-party utility To Windows service running any rclone command, the excellent third-party utility
[NSSM](http://nssm.cc), the "Non-Sucking Service Manager", can be used. [NSSM](http://nssm.cc), the "Non-Sucking Service Manager", can be used.
It includes some advanced features such as adjusting process periority, defining It includes some advanced features such as adjusting process priority, defining
process environment variables, redirect to file anything written to stdout, and process environment variables, redirect to file anything written to stdout, and
customized response to different exit codes, with a GUI to configure everything from customized response to different exit codes, with a GUI to configure everything from
(although it can also be used from command line ). (although it can also be used from command line ).

View File

@ -18,7 +18,7 @@ it also provides white-label solutions to different companies, such as:
* Elgiganten Sweden (cloud.elgiganten.se) * Elgiganten Sweden (cloud.elgiganten.se)
* Elgiganten Denmark (cloud.elgiganten.dk) * Elgiganten Denmark (cloud.elgiganten.dk)
* Giganti Cloud (cloud.gigantti.fi) * Giganti Cloud (cloud.gigantti.fi)
* ELKO Clouud (cloud.elko.is) * ELKO Cloud (cloud.elko.is)
Most of the white-label versions are supported by this backend, although may require different Most of the white-label versions are supported by this backend, although may require different
authentication setup - described below. authentication setup - described below.

View File

@ -110,7 +110,7 @@ Use `rclone dedupe` to fix duplicated files.
#### Object not found #### Object not found
If you are connecting to your Mega remote for the first time, If you are connecting to your Mega remote for the first time,
to test access and syncronisation, you may receive an error such as to test access and synchronization, you may receive an error such as
``` ```
Failed to create file system for "my-mega-remote:": Failed to create file system for "my-mega-remote:":

View File

@ -152,7 +152,7 @@ Individual symlink files on the remote can be used with the commands like "cat"
With NetStorage, directories can exist in one of two forms: With NetStorage, directories can exist in one of two forms:
1. **Explicit Directory**. This is an actual, physical directory that you have created in a storage group. 1. **Explicit Directory**. This is an actual, physical directory that you have created in a storage group.
2. **Implicit Directory**. This refers to a directory within a path that has not been physically created. For example, during upload of a file, non-existent subdirectories can be specified in the target path. NetStorage creates these as "implicit." While the directories aren't physically created, they exist implicitly and the noted path is connected with the uploaded file. 2. **Implicit Directory**. This refers to a directory within a path that has not been physically created. For example, during upload of a file, nonexistent subdirectories can be specified in the target path. NetStorage creates these as "implicit." While the directories aren't physically created, they exist implicitly and the noted path is connected with the uploaded file.
Rclone will intercept all file uploads and mkdir commands for the NetStorage remote and will explicitly issue the mkdir command for each directory in the uploading path. This will help with the interoperability with the other Akamai services such as SFTP and the Content Management Shell (CMShell). Rclone will not guarantee correctness of operations with implicit directories which might have been created as a result of using an upload API directly. Rclone will intercept all file uploads and mkdir commands for the NetStorage remote and will explicitly issue the mkdir command for each directory in the uploading path. This will help with the interoperability with the other Akamai services such as SFTP and the Content Management Shell (CMShell). Rclone will not guarantee correctness of operations with implicit directories which might have been created as a result of using an upload API directly.

View File

@ -568,7 +568,7 @@ An official document about the limitations for different types of OneDrive can b
## Versions ## Versions
Every change in a file OneDrive causes the service to create a new Every change in a file OneDrive causes the service to create a new
version of the the file. This counts against a users quota. For version of the file. This counts against a users quota. For
example changing the modification time of a file creates a second example changing the modification time of a file creates a second
version, so the file apparently uses twice the space. version, so the file apparently uses twice the space.

View File

@ -111,7 +111,7 @@ systems they must support a common hash type.
### ModTime ### ### ModTime ###
Allmost all cloud storage systems store some sort of timestamp Almost all cloud storage systems store some sort of timestamp
on objects, but several of them not something that is appropriate on objects, but several of them not something that is appropriate
to use for syncing. E.g. some backends will only write a timestamp to use for syncing. E.g. some backends will only write a timestamp
that represent the time of the upload. To be relevant for syncing that represent the time of the upload. To be relevant for syncing

View File

@ -397,7 +397,7 @@ The parameters can be a string as per the rest of rclone, eg
`s3:bucket/path` or `:sftp:/my/dir`. They can also be specified as `s3:bucket/path` or `:sftp:/my/dir`. They can also be specified as
JSON blobs. JSON blobs.
If specifyng a JSON blob it should be a object mapping strings to If specifying a JSON blob it should be a object mapping strings to
strings. These values will be used to configure the remote. There are strings. These values will be used to configure the remote. There are
3 special values which may be set: 3 special values which may be set:
@ -1568,7 +1568,7 @@ check that parameter passing is working properly.
**Authentication is required for this call.** **Authentication is required for this call.**
### sync/bisync: Perform bidirectonal synchronization between two paths. {#sync-bisync} ### sync/bisync: Perform bidirectional synchronization between two paths. {#sync-bisync}
This takes the following parameters This takes the following parameters

View File

@ -332,7 +332,7 @@ upload.
Rclone's default directory traversal is to process each directory Rclone's default directory traversal is to process each directory
individually. This takes one API call per directory. Using the individually. This takes one API call per directory. Using the
`--fast-list` flag will read all info about the the objects into `--fast-list` flag will read all info about the objects into
memory first using a smaller number of API calls (one per 1000 memory first using a smaller number of API calls (one per 1000
objects). See the [rclone docs](/docs/#fast-list) for more details. objects). See the [rclone docs](/docs/#fast-list) for more details.

View File

@ -21,7 +21,7 @@ SSH installations.
Paths are specified as `remote:path`. If the path does not begin with Paths are specified as `remote:path`. If the path does not begin with
a `/` it is relative to the home directory of the user. An empty path a `/` it is relative to the home directory of the user. An empty path
`remote:` refers to the user's home directory. For example, `rclone lsd remote:` `remote:` refers to the user's home directory. For example, `rclone lsd remote:`
would list the home directory of the user cofigured in the rclone remote config would list the home directory of the user configured in the rclone remote config
(`i.e /home/sftpuser`). However, `rclone lsd remote:/` would list the root (`i.e /home/sftpuser`). However, `rclone lsd remote:/` would list the root
directory for remote machine (i.e. `/`) directory for remote machine (i.e. `/`)
@ -264,7 +264,7 @@ can also run a SSH server, which is a port of OpenSSH (see official
[installation guide](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse)). On a Windows server the shell handling is different: Although it can also [installation guide](https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse)). On a Windows server the shell handling is different: Although it can also
be set up to use a Unix type shell, e.g. Cygwin bash, the default is to be set up to use a Unix type shell, e.g. Cygwin bash, the default is to
use Windows Command Prompt (cmd.exe), and PowerShell is a recommended use Windows Command Prompt (cmd.exe), and PowerShell is a recommended
alternative. All of these have bahave differently, which rclone must handle. alternative. All of these have behave differently, which rclone must handle.
Rclone tries to auto-detect what type of shell is used on the server, Rclone tries to auto-detect what type of shell is used on the server,
first time you access the SFTP remote. If a remote shell session is first time you access the SFTP remote. If a remote shell session is
@ -296,7 +296,7 @@ a new sftp remote is accessed. If you configure a sftp remote
without a config file, e.g. an [on the fly](/docs/#backend-path-to-dir]) without a config file, e.g. an [on the fly](/docs/#backend-path-to-dir])
remote, rclone will have nowhere to store the result, and it remote, rclone will have nowhere to store the result, and it
will re-run the command on every access. To avoid this you should will re-run the command on every access. To avoid this you should
explicitely set the `shell_type` option to the correct value, explicitly set the `shell_type` option to the correct value,
or to `none` if you want to prevent rclone from executing any or to `none` if you want to prevent rclone from executing any
remote shell commands. remote shell commands.
@ -304,7 +304,7 @@ It is also important to note that, since the shell type decides
how quoting and escaping of file paths used as command-line arguments how quoting and escaping of file paths used as command-line arguments
are performed, configuring the wrong shell type may leave you exposed are performed, configuring the wrong shell type may leave you exposed
to command injection exploits. Make sure to confirm the auto-detected to command injection exploits. Make sure to confirm the auto-detected
shell type, or explicitely set the shell type you know is correct, shell type, or explicitly set the shell type you know is correct,
or disable shell access until you know. or disable shell access until you know.
### Checksum ### Checksum

View File

@ -278,7 +278,7 @@ type transferStats struct {
speed float64 speed float64
} }
// calculateTransferStats calculates some addtional transfer stats not // calculateTransferStats calculates some additional transfer stats not
// stored directly in StatsInfo // stored directly in StatsInfo
func (s *StatsInfo) calculateTransferStats() (ts transferStats) { func (s *StatsInfo) calculateTransferStats() (ts transferStats) {
// checking and transferring have their own locking so read // checking and transferring have their own locking so read

View File

@ -154,7 +154,7 @@ func TestPin(t *testing.T) {
cleanup, create := mockNewFs(t) cleanup, create := mockNewFs(t)
defer cleanup() defer cleanup()
// Test pinning and unpinning non-existent // Test pinning and unpinning nonexistent
f := mockfs.NewFs(context.Background(), "mock", "/alien") f := mockfs.NewFs(context.Background(), "mock", "/alien")
Pin(f) Pin(f)
Unpin(f) Unpin(f)

View File

@ -40,7 +40,7 @@ func (s *Storage) check() {
if err == nil { if err == nil {
// check to see if config file has changed and if it has, reload it // check to see if config file has changed and if it has, reload it
if s.fi == nil || !fi.ModTime().Equal(s.fi.ModTime()) || fi.Size() != s.fi.Size() { if s.fi == nil || !fi.ModTime().Equal(s.fi.ModTime()) || fi.Size() != s.fi.Size() {
fs.Debugf(nil, "Config file has changed externaly - reloading") fs.Debugf(nil, "Config file has changed externally - reloading")
err := s._load() err := s._load()
if err != nil { if err != nil {
fs.Errorf(nil, "Failed to read config file - using previous config: %v", err) fs.Errorf(nil, "Failed to read config file - using previous config: %v", err)

View File

@ -137,7 +137,7 @@ func (c Simple) Set(key, value string) {
} }
// String the map value the same way the config parser does, but with // String the map value the same way the config parser does, but with
// sorted keys for reproducability. // sorted keys for reproducibility.
func (c Simple) String() string { func (c Simple) String() string {
var ks = make([]string, 0, len(c)) var ks = make([]string, 0, len(c))
for k := range c { for k := range c {

View File

@ -1,5 +1,5 @@
// Package dirtree contains the DirTree type which is used for // Package dirtree contains the DirTree type which is used for
// building filesystem heirachies in memory. // building filesystem hierarchies in memory.
package dirtree package dirtree
import ( import (

View File

@ -33,7 +33,7 @@ func NewFs(ctx context.Context, path string) (Fs, error) {
overridden := fsInfo.Options.Overridden(config) overridden := fsInfo.Options.Overridden(config)
if len(overridden) > 0 { if len(overridden) > 0 {
extraConfig := overridden.String() extraConfig := overridden.String()
//Debugf(nil, "detected overriden config %q", extraConfig) //Debugf(nil, "detected overridden config %q", extraConfig)
md5sumBinary := md5.Sum([]byte(extraConfig)) md5sumBinary := md5.Sum([]byte(extraConfig))
suffix := base64.RawURLEncoding.EncodeToString(md5sumBinary[:]) suffix := base64.RawURLEncoding.EncodeToString(md5sumBinary[:])
// 5 characters length is 5*6 = 30 bits of base64 // 5 characters length is 5*6 = 30 bits of base64

View File

@ -186,11 +186,11 @@ func TestCheck(t *testing.T) {
func TestCheckFsError(t *testing.T) { func TestCheckFsError(t *testing.T) {
ctx := context.Background() ctx := context.Background()
dstFs, err := fs.NewFs(ctx, "non-existent") dstFs, err := fs.NewFs(ctx, "nonexistent")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
srcFs, err := fs.NewFs(ctx, "non-existent") srcFs, err := fs.NewFs(ctx, "nonexistent")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@ -13,7 +13,7 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
// Compare a and b in a file system idependent way // Compare a and b in a file system independent way
func compareListJSONItem(t *testing.T, a, b *operations.ListJSONItem, precision time.Duration) { func compareListJSONItem(t *testing.T, a, b *operations.ListJSONItem, precision time.Duration) {
assert.Equal(t, a.Path, b.Path, "Path") assert.Equal(t, a.Path, b.Path, "Path")
assert.Equal(t, a.Name, b.Name, "Name") assert.Equal(t, a.Name, b.Name, "Name")

View File

@ -1787,7 +1787,7 @@ func copyURLFn(ctx context.Context, dstFileName string, url string, autoFilename
_, params, err := mime.ParseMediaType(resp.Header.Get("Content-Disposition")) _, params, err := mime.ParseMediaType(resp.Header.Get("Content-Disposition"))
headerFilename := path.Base(strings.Replace(params["filename"], "\\", "/", -1)) headerFilename := path.Base(strings.Replace(params["filename"], "\\", "/", -1))
if err != nil || headerFilename == "" { if err != nil || headerFilename == "" {
return fmt.Errorf("CopyURL failed: filename not found in the Content-Dispoition header") return fmt.Errorf("CopyURL failed: filename not found in the Content-Disposition header")
} }
fs.Debugf(headerFilename, "filename found in Content-Disposition header.") fs.Debugf(headerFilename, "filename found in Content-Disposition header.")
return fn(ctx, headerFilename, resp.Body, resp.ContentLength, modTime) return fn(ctx, headerFilename, resp.Body, resp.ContentLength, modTime)

View File

@ -227,14 +227,14 @@ func (p *Plugins) GetPluginByName(name string) (out *PackageJSON, err error) {
} }
// getAuthorRepoBranchGithub gives author, repoName and branch from a github.com url // getAuthorRepoBranchGitHub gives author, repoName and branch from a github.com url
// //
// url examples: // url examples:
// https://github.com/rclone/rclone-webui-react/ // https://github.com/rclone/rclone-webui-react/
// http://github.com/rclone/rclone-webui-react // http://github.com/rclone/rclone-webui-react
// https://github.com/rclone/rclone-webui-react/tree/caman-js // https://github.com/rclone/rclone-webui-react/tree/caman-js
// github.com/rclone/rclone-webui-react // github.com/rclone/rclone-webui-react
func getAuthorRepoBranchGithub(url string) (author string, repoName string, branch string, err error) { func getAuthorRepoBranchGitHub(url string) (author string, repoName string, branch string, err error) {
repoURL := url repoURL := url
repoURL = strings.Replace(repoURL, "https://", "", 1) repoURL = strings.Replace(repoURL, "https://", "", 1)
repoURL = strings.Replace(repoURL, "http://", "", 1) repoURL = strings.Replace(repoURL, "http://", "", 1)

View File

@ -102,7 +102,7 @@ func rcAddPlugin(_ context.Context, in rc.Params) (out rc.Params, err error) {
return nil, err return nil, err
} }
author, repoName, repoBranch, err := getAuthorRepoBranchGithub(pluginURL) author, repoName, repoBranch, err := getAuthorRepoBranchGitHub(pluginURL)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -28,7 +28,7 @@ type RegInfo struct {
// Prefix for command line flags for this fs - defaults to Name if not set // Prefix for command line flags for this fs - defaults to Name if not set
Prefix string Prefix string
// Create a new file system. If root refers to an existing // Create a new file system. If root refers to an existing
// object, then it should return an Fs which which points to // object, then it should return an Fs which points to
// the parent of that object and ErrorIsFile. // the parent of that object and ErrorIsFile.
NewFs func(ctx context.Context, name string, root string, config configmap.Mapper) (Fs, error) `json:"-"` NewFs func(ctx context.Context, name string, root string, config configmap.Mapper) (Fs, error) `json:"-"`
// Function to call to help with config - see docs for ConfigIn for more info // Function to call to help with config - see docs for ConfigIn for more info
@ -179,7 +179,7 @@ func (o *Option) MarshalJSON() ([]byte, error) {
}) })
} }
// GetValue gets the current current value which is the default if not set // GetValue gets the current value which is the default if not set
func (o *Option) GetValue() interface{} { func (o *Option) GetValue() interface{} {
val := o.Value val := o.Value
if val == nil { if val == nil {

View File

@ -531,14 +531,14 @@ func Run(t *testing.T, opt *Opt) {
assert.True(t, len(fsInfo.CommandHelp) > 0, "Command is declared, must return some help in CommandHelp") assert.True(t, len(fsInfo.CommandHelp) > 0, "Command is declared, must return some help in CommandHelp")
}) })
// TestFsRmdirNotFound tests deleting a non-existent directory // TestFsRmdirNotFound tests deleting a nonexistent directory
t.Run("FsRmdirNotFound", func(t *testing.T) { t.Run("FsRmdirNotFound", func(t *testing.T) {
skipIfNotOk(t) skipIfNotOk(t)
if isBucketBasedButNotRoot(f) { if isBucketBasedButNotRoot(f) {
t.Skip("Skipping test as non root bucket-based remote") t.Skip("Skipping test as non root bucket-based remote")
} }
err := f.Rmdir(ctx, "") err := f.Rmdir(ctx, "")
assert.Error(t, err, "Expecting error on Rmdir non-existent") assert.Error(t, err, "Expecting error on Rmdir nonexistent")
}) })
// Make the directory // Make the directory
@ -729,7 +729,7 @@ func Run(t *testing.T, opt *Opt) {
o, err := f.NewObject(ctx, "potato") o, err := f.NewObject(ctx, "potato")
assert.Nil(t, o) assert.Nil(t, o)
assert.Equal(t, fs.ErrorObjectNotFound, err) assert.Equal(t, fs.ErrorObjectNotFound, err)
// Now try an object in a non existing directory // Now try an object in a nonexistent directory
o, err = f.NewObject(ctx, "directory/not/found/potato") o, err = f.NewObject(ctx, "directory/not/found/potato")
assert.Nil(t, o) assert.Nil(t, o)
assert.Equal(t, fs.ErrorObjectNotFound, err) assert.Equal(t, fs.ErrorObjectNotFound, err)
@ -1632,7 +1632,7 @@ func Run(t *testing.T, opt *Opt) {
fstest.CheckListingWithRoot(t, rootRemote, configLeaf, []fstest.Item{file1Root, file2Root}, dirs, rootRemote.Precision()) fstest.CheckListingWithRoot(t, rootRemote, configLeaf, []fstest.Item{file1Root, file2Root}, dirs, rootRemote.Precision())
}) })
// Check that that listing the entries is OK // Check that listing the entries is OK
t.Run("ListEntries", func(t *testing.T) { t.Run("ListEntries", func(t *testing.T) {
entries, err := rootRemote.List(context.Background(), configLeaf) entries, err := rootRemote.List(context.Background(), configLeaf)
require.NoError(t, err) require.NoError(t, err)
@ -2068,7 +2068,7 @@ func Run(t *testing.T, opt *Opt) {
// TestFsRootCollapse tests if the root of an fs "collapses" to the // TestFsRootCollapse tests if the root of an fs "collapses" to the
// absolute root. It creates a new fs of the same backend type with its // absolute root. It creates a new fs of the same backend type with its
// root set to a *non-existent* folder, and attempts to read the info of // root set to a *nonexistent* folder, and attempts to read the info of
// an object in that folder, whose name is taken from a directory that // an object in that folder, whose name is taken from a directory that
// exists in the absolute root. // exists in the absolute root.
// This test is added after // This test is added after

View File

@ -17,7 +17,7 @@ func TestMkdir(t *testing.T) {
// test stuff // test stuff
} }
This will make r.Fremote and r.Flocal for a remote remote and a local This will make r.Fremote and r.Flocal for a remote and a local
remote. The remote is determined by the -remote flag passed in. remote. The remote is determined by the -remote flag passed in.
*/ */

View File

@ -158,7 +158,7 @@ func TestCachePin(t *testing.T) {
_, err := c.Get("/", create) _, err := c.Get("/", create)
require.NoError(t, err) require.NoError(t, err)
// Pin a non-existent item to show nothing happens // Pin a nonexistent item to show nothing happens
c.Pin("notfound") c.Pin("notfound")
c.mu.Lock() c.mu.Lock()
@ -312,7 +312,7 @@ func TestCacheRename(t *testing.T) {
assert.Equal(t, 2, c.Entries()) assert.Equal(t, 2, c.Entries())
// rename to non-existent // rename to nonexistent
value, found := c.Rename("existing1", "EXISTING1") value, found := c.Rename("existing1", "EXISTING1")
assert.Equal(t, true, found) assert.Equal(t, true, found)
assert.Equal(t, existing1, value) assert.Equal(t, existing1, value)
@ -326,7 +326,7 @@ func TestCacheRename(t *testing.T) {
assert.Equal(t, 1, c.Entries()) assert.Equal(t, 1, c.Entries())
// rename non-existent // rename nonexistent
value, found = c.Rename("notfound", "NOTFOUND") value, found = c.Rename("notfound", "NOTFOUND")
assert.Equal(t, false, found) assert.Equal(t, false, found)
assert.Nil(t, value) assert.Nil(t, value)

View File

@ -140,7 +140,7 @@ func (dc *DirCache) SetRootIDAlias(rootID string) {
dc.Put("", dc.rootID) dc.Put("", dc.rootID)
} }
// FlushDir flushes the map of all data starting with with the path // FlushDir flushes the map of all data starting with the path
// dir. // dir.
// //
// If dir is empty string then this is equivalent to calling ResetRoot // If dir is empty string then this is equivalent to calling ResetRoot

View File

@ -70,8 +70,8 @@ func Config(id, name string, claims *jws.ClaimSet, header *jws.Header, queryPara
return fmt.Errorf("jwtutil: failed making auth request: %w", err) return fmt.Errorf("jwtutil: failed making auth request: %w", err)
} }
defer func() { defer func() {
deferedErr := resp.Body.Close() deferredErr := resp.Body.Close()
if deferedErr != nil { if deferredErr != nil {
err = fmt.Errorf("jwtutil: failed to close resp.Body: %w", err) err = fmt.Errorf("jwtutil: failed to close resp.Body: %w", err)
} }
}() }()

View File

@ -419,7 +419,7 @@ func MultipartUpload(ctx context.Context, in io.Reader, params url.Values, conte
// opts.Body are set then CallJSON will do a multipart upload with a // opts.Body are set then CallJSON will do a multipart upload with a
// file attached. opts.MultipartContentName is the name of the // file attached. opts.MultipartContentName is the name of the
// parameter and opts.MultipartFileName is the name of the file. If // parameter and opts.MultipartFileName is the name of the file. If
// MultpartContentName is set, and request != nil is supplied, then // MultipartContentName is set, and request != nil is supplied, then
// the request will be marshalled into JSON and added to the form with // the request will be marshalled into JSON and added to the form with
// parameter name MultipartMetadataName. // parameter name MultipartMetadataName.
// //

View File

@ -1,7 +1,7 @@
// Package librclone exports shims for library use // Package librclone exports shims for library use
// //
// This is the internal implementation which is used for C and // This is the internal implementation which is used for C and
// Gomobile libaries which need slightly different export styles. // Gomobile libraries which need slightly different export styles.
// //
// The shims are a thin wrapper over the rclone RPC. // The shims are a thin wrapper over the rclone RPC.
package librclone package librclone

View File

@ -186,7 +186,7 @@ func (d *Dir) ForgetAll() (hasVirtual bool) {
} }
} }
} }
// Purge any unecessary virtual entries // Purge any unnecessary virtual entries
d._purgeVirtual() d._purgeVirtual()
d.read = time.Time{} d.read = time.Time{}

View File

@ -450,7 +450,7 @@ func TestCachePurgeClean(t *testing.T) {
_, err = os.Stat(potato1.c.toOSPath(potato1.name)) _, err = os.Stat(potato1.c.toOSPath(potato1.name))
require.NoError(t, err) require.NoError(t, err)
// Add some potatos // Add some potatoes
potato2 := c.Item("sub/dir/potato2") potato2 := c.Item("sub/dir/potato2")
require.NoError(t, potato2.Open(nil)) require.NoError(t, potato2.Open(nil))
require.NoError(t, potato2.Truncate(5)) require.NoError(t, potato2.Truncate(5))
@ -603,7 +603,7 @@ func TestCacheRename(t *testing.T) {
assertPathNotExist(t, osPathMeta) assertPathNotExist(t, osPathMeta)
assert.False(t, c.Exists("sub/newPotato")) assert.False(t, c.Exists("sub/newPotato"))
// non-existent file - is ignored // nonexistent file - is ignored
assert.NoError(t, c.Rename("nonexist", "nonexist2", nil)) assert.NoError(t, c.Rename("nonexist", "nonexist2", nil))
} }

View File

@ -1152,7 +1152,7 @@ func (item *Item) _ensure(offset, size int64) (err error) {
// This is called by the downloader downloading file segments and the // This is called by the downloader downloading file segments and the
// vfs layer writing to the file. // vfs layer writing to the file.
// //
// This doesn't mark the item as Dirty - that the the responsibility // This doesn't mark the item as Dirty - that the responsibility
// of the caller as we don't know here whether we are adding reads or // of the caller as we don't know here whether we are adding reads or
// writes to the cache file. // writes to the cache file.
// //

View File

@ -408,7 +408,7 @@ func TestWriteBackAddUpdateNotModified(t *testing.T) {
pi2 := newPutItem(t) pi2 := newPutItem(t)
id2 := wb.Add(id, "one", false, pi2.put) id2 := wb.Add(id, "one", false, pi2.put)
assert.Equal(t, id, id2) assert.Equal(t, id, id2)
checkNotOnHeap(t, wb, wbItem) // object still being transfered checkNotOnHeap(t, wb, wbItem) // object still being transferred
checkInLookup(t, wb, wbItem) checkInLookup(t, wb, wbItem)
// Because modified was false above this should not cancel the // Because modified was false above this should not cancel the
@ -525,7 +525,7 @@ func TestWriteBackMaxQueue(t *testing.T) {
assert.Equal(t, toTransfer-maxTransfers, queued) assert.Equal(t, toTransfer-maxTransfers, queued)
assert.Equal(t, maxTransfers, inProgress) assert.Equal(t, maxTransfers, inProgress)
// now finish the the first maxTransfers // now finish the first maxTransfers
for i := 0; i < maxTransfers; i++ { for i := 0; i < maxTransfers; i++ {
pis[i].finish(nil) pis[i].finish(nil)
} }