mirror of
https://github.com/rclone/rclone
synced 2024-12-10 22:33:56 +01:00
mountlib: check if directory is not empty before mounting - fixes #1386
Signed-off-by: Ernest Borowski <er.borowski@gmail.com>
This commit is contained in:
parent
413faa99cf
commit
9fbff7bcab
@ -1,11 +1,14 @@
|
|||||||
package mountlib
|
package mountlib
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/ncw/rclone/cmd"
|
"github.com/ncw/rclone/cmd"
|
||||||
"github.com/ncw/rclone/fs"
|
"github.com/ncw/rclone/fs"
|
||||||
"github.com/ncw/rclone/vfs/vfsflags"
|
"github.com/ncw/rclone/vfs/vfsflags"
|
||||||
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -22,6 +25,31 @@ var (
|
|||||||
ExtraFlags *[]string
|
ExtraFlags *[]string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Check is folder is empty
|
||||||
|
func checkMountEmpty(mountpoint string) error {
|
||||||
|
fp, fpErr := os.Open(mountpoint)
|
||||||
|
|
||||||
|
if fpErr != nil {
|
||||||
|
return errors.Wrap(fpErr, "Can not open: "+mountpoint)
|
||||||
|
}
|
||||||
|
defer fs.CheckClose(fp, &fpErr)
|
||||||
|
|
||||||
|
_, fpErr = fp.Readdirnames(1)
|
||||||
|
|
||||||
|
// directory is not empty
|
||||||
|
if fpErr != io.EOF {
|
||||||
|
var e error
|
||||||
|
var errorMsg = "Directory is not empty: " + mountpoint + " If you want to mount it anyway use: --allow-non-empty option"
|
||||||
|
if fpErr == nil {
|
||||||
|
e = errors.New(errorMsg)
|
||||||
|
} else {
|
||||||
|
e = errors.Wrap(fpErr, errorMsg)
|
||||||
|
}
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// NewMountCommand makes a mount command with the given name and Mount function
|
// NewMountCommand makes a mount command with the given name and Mount function
|
||||||
func NewMountCommand(commandName string, Mount func(f fs.Fs, mountpoint string) error) *cobra.Command {
|
func NewMountCommand(commandName string, Mount func(f fs.Fs, mountpoint string) error) *cobra.Command {
|
||||||
var commandDefintion = &cobra.Command{
|
var commandDefintion = &cobra.Command{
|
||||||
@ -138,6 +166,13 @@ like this:
|
|||||||
defer close(stopStats)
|
defer close(stopStats)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !AllowNonEmpty {
|
||||||
|
err := checkMountEmpty(args[1])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Fatal error: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err := Mount(fdst, args[1])
|
err := Mount(fdst, args[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Fatal error: %v", err)
|
log.Fatalf("Fatal error: %v", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user