aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drive/sync_download.go21
-rw-r--r--drive/sync_upload.go39
-rw-r--r--gdrive.go12
-rw-r--r--handlers_drive.go2
4 files changed, 66 insertions, 8 deletions
diff --git a/drive/sync_download.go b/drive/sync_download.go
index 37c78cb..ba86aae 100644
--- a/drive/sync_download.go
+++ b/drive/sync_download.go
@@ -16,6 +16,7 @@ type DownloadSyncArgs struct {
Progress io.Writer
RootId string
Path string
+ DryRun bool
DeleteExtraneous bool
}
@@ -104,6 +105,11 @@ func (self *Drive) createMissingLocalDirs(files *syncFiles, args DownloadSyncArg
return nil, fmt.Errorf("Failed to determine local absolute path: %s", err)
}
fmt.Fprintf(args.Out, "[%04d/%04d] Creating directory: %s\n", i + 1, missingCount, path)
+
+ if args.DryRun {
+ continue
+ }
+
mkdir(path)
}
@@ -125,6 +131,11 @@ func (self *Drive) downloadMissingFiles(files *syncFiles, args DownloadSyncArgs)
return fmt.Errorf("Failed to determine local absolute path: %s", err)
}
fmt.Fprintf(args.Out, "[%04d/%04d] Downloading %s -> %s\n", i + 1, missingCount, remotePath, localPath)
+
+ if args.DryRun {
+ continue
+ }
+
err = self.downloadRemoteFile(rf.file.Id, localPath, args)
if err != nil {
return err
@@ -149,6 +160,11 @@ func (self *Drive) downloadChangedFiles(files *syncFiles, args DownloadSyncArgs)
return fmt.Errorf("Failed to determine local absolute path: %s", err)
}
fmt.Fprintf(args.Out, "[%04d/%04d] Downloading %s -> %s\n", i + 1, changedCount, remotePath, localPath)
+
+ if args.DryRun {
+ continue
+ }
+
err = self.downloadRemoteFile(cf.remote.file.Id, localPath, args)
if err != nil {
return err
@@ -206,6 +222,11 @@ func (self *Drive) deleteExtraneousLocalFiles(files *syncFiles, args DownloadSyn
for i, lf := range extraneousFiles {
fmt.Fprintf(args.Out, "[%04d/%04d] Deleting %s\n", i + 1, extraneousCount, lf.absPath)
+
+ if args.DryRun {
+ continue
+ }
+
err := os.Remove(lf.absPath)
if err != nil {
return fmt.Errorf("Failed to delete local file: %s", err)
diff --git a/drive/sync_upload.go b/drive/sync_upload.go
index d1c155d..151a9f8 100644
--- a/drive/sync_upload.go
+++ b/drive/sync_upload.go
@@ -16,6 +16,7 @@ type UploadSyncArgs struct {
Progress io.Writer
Path string
RootId string
+ DryRun bool
DeleteExtraneous bool
ChunkSize int64
}
@@ -141,15 +142,22 @@ func (self *Drive) createMissingRemoteDirs(files *syncFiles, args UploadSyncArgs
fmt.Fprintf(args.Out, "[%04d/%04d] Creating directory: %s\n", i + 1, missingCount, filepath.Join(files.root.file.Name, lf.relPath))
- f, err := self.service.Files.Create(dstFile).Do()
- if err != nil {
- return nil, fmt.Errorf("Failed to create directory: %s", err)
+ if args.DryRun {
+ files.remote = append(files.remote, &remoteFile{
+ relPath: lf.relPath,
+ file: dstFile,
+ })
+ } else {
+ f, err := self.service.Files.Create(dstFile).Do()
+ if err != nil {
+ return nil, fmt.Errorf("Failed to create directory: %s", err)
+ }
+
+ files.remote = append(files.remote, &remoteFile{
+ relPath: lf.relPath,
+ file: f,
+ })
}
-
- files.remote = append(files.remote, &remoteFile{
- relPath: lf.relPath,
- file: f,
- })
}
return files, nil
@@ -171,6 +179,11 @@ func (self *Drive) uploadMissingFiles(files *syncFiles, args UploadSyncArgs) err
}
fmt.Fprintf(args.Out, "[%04d/%04d] Uploading %s -> %s\n", i + 1, missingCount, lf.absPath, filepath.Join(files.root.file.Name, lf.relPath))
+
+ if args.DryRun {
+ continue
+ }
+
err := self.uploadMissingFile(parent.file.Id, lf, args)
if err != nil {
return err
@@ -190,6 +203,11 @@ func (self *Drive) updateChangedFiles(files *syncFiles, args UploadSyncArgs) err
for i, cf := range changedFiles {
fmt.Fprintf(args.Out, "[%04d/%04d] Updating %s -> %s\n", i + 1, changedCount, cf.local.absPath, filepath.Join(files.root.file.Name, cf.local.relPath))
+
+ if args.DryRun {
+ continue
+ }
+
err := self.updateChangedFile(cf, args)
if err != nil {
return err
@@ -212,6 +230,11 @@ func (self *Drive) deleteExtraneousRemoteFiles(files *syncFiles, args UploadSync
for i, rf := range extraneousFiles {
fmt.Fprintf(args.Out, "[%04d/%04d] Deleting %s\n", i + 1, extraneousCount, filepath.Join(files.root.file.Name, rf.relPath))
+
+ if args.DryRun {
+ continue
+ }
+
err := self.deleteRemoteFile(rf, args)
if err != nil {
return err
diff --git a/gdrive.go b/gdrive.go
index ba8e53a..6714748 100644
--- a/gdrive.go
+++ b/gdrive.go
@@ -342,6 +342,12 @@ func main() {
OmitValue: true,
},
cli.BoolFlag{
+ Name: "dryRun",
+ Patterns: []string{"--dry-run"},
+ Description: "Show what would have been transferred",
+ OmitValue: true,
+ },
+ cli.BoolFlag{
Name: "deleteExtraneous",
Patterns: []string{"--delete-extraneous"},
Description: "Delete extraneous local files",
@@ -358,6 +364,12 @@ func main() {
"global": globalFlags,
"options": []cli.Flag{
cli.BoolFlag{
+ Name: "dryRun",
+ Patterns: []string{"--dry-run"},
+ Description: "Show what would have been transferred",
+ OmitValue: true,
+ },
+ cli.BoolFlag{
Name: "noProgress",
Patterns: []string{"--no-progress"},
Description: "Hide progress",
diff --git a/handlers_drive.go b/handlers_drive.go
index 2b6d61e..8e7540c 100644
--- a/handlers_drive.go
+++ b/handlers_drive.go
@@ -63,6 +63,7 @@ func downloadSyncHandler(ctx cli.Context) {
Progress: progressWriter(args.Bool("noProgress")),
Path: args.String("path"),
RootId: args.String("id"),
+ DryRun: args.Bool("dryRun"),
DeleteExtraneous: args.Bool("deleteExtraneous"),
})
checkErr(err)
@@ -118,6 +119,7 @@ func uploadSyncHandler(ctx cli.Context) {
Progress: progressWriter(args.Bool("noProgress")),
Path: args.String("path"),
RootId: args.String("id"),
+ DryRun: args.Bool("dryRun"),
DeleteExtraneous: args.Bool("deleteExtraneous"),
ChunkSize: args.Int64("chunksize"),
})