diff --git a/cmd/archive/archive.go b/cmd/archive/archive.go index 61cff4ff8..b761cad75 100644 --- a/cmd/archive/archive.go +++ b/cmd/archive/archive.go @@ -164,22 +164,22 @@ the contents of the archive will be: }, Run: func(command *cobra.Command, args []string) { var src, dst fs.Fs - var srcFile, dstFile string + var dstFile string if len(args) == 1 { // source only, archive to stdout - src, srcFile = cmd.NewFsFile(args[0]) + src = cmd.NewFsSrc(args) } else if len(args) == 2 { - src, srcFile = cmd.NewFsFile(args[0]) + src = cmd.NewFsSrc(args) dst, dstFile = cmd.NewFsFile(args[1]) } else { cmd.CheckArgs(1, 2, command, args) } cmd.Run(false, false, command, func() error { if prefix != "" { - return create.ArchiveCreate(context.Background(), src, srcFile, dst, dstFile, format, prefix) + return create.ArchiveCreate(context.Background(), src, dst, dstFile, format, prefix) } else if fullpath { - return create.ArchiveCreate(context.Background(), src, srcFile, dst, dstFile, format, src.Root()) + return create.ArchiveCreate(context.Background(), src, dst, dstFile, format, src.Root()) } - return create.ArchiveCreate(context.Background(), src, srcFile, dst, dstFile, format, "") + return create.ArchiveCreate(context.Background(), src, dst, dstFile, format, "") }) }, } diff --git a/cmd/archive/archive_test.go b/cmd/archive/archive_test.go index 5909d3f9a..71a47f1c8 100644 --- a/cmd/archive/archive_test.go +++ b/cmd/archive/archive_test.go @@ -57,7 +57,7 @@ func TestArchiveFunctions(t *testing.T) { f2 := r.WriteFile("dir1/sub1.txt", "sub content 1", t1) f3 := r.WriteFile("dir2/sub2.txt", "sub content 2", t1) // create archive - err = create.ArchiveCreate(ctx, r.Flocal, "", r.Flocal, "test.zip", "", "") + err = create.ArchiveCreate(ctx, r.Flocal, r.Flocal, "test.zip", "", "") require.NoError(t, err) // list archive err = list.ArchiveList(ctx, r.Flocal, "test.zip", false) diff --git a/cmd/archive/create/create.go b/cmd/archive/create/create.go index 5e1b60a9a..62cc272b1 100644 --- a/cmd/archive/create/create.go +++ b/cmd/archive/create/create.go @@ -17,6 +17,7 @@ import ( "github.com/rclone/rclone/cmd/archive/files" "github.com/rclone/rclone/fs" "github.com/rclone/rclone/fs/accounting" + "github.com/rclone/rclone/fs/filter" "github.com/rclone/rclone/fs/operations" "github.com/rclone/rclone/fs/walk" ) @@ -206,8 +207,16 @@ func onProgress(snapshot accounting.TransferSnapshot, action int) { } } +func loadMetadata(ctx context.Context, o fs.DirEntry) fs.Metadata { + meta, err := fs.GetMetadata(ctx, o) + if err != nil { + meta = make(fs.Metadata, 0) + } + return meta +} + // ArchiveCreate - compresses/archive source to destination -func ArchiveCreate(ctx context.Context, src fs.Fs, srcFile string, dst fs.Fs, dstFile string, format string, prefix string) error { +func ArchiveCreate(ctx context.Context, src fs.Fs, dst fs.Fs, dstFile string, format string, prefix string) error { var err error var list archivesFileInfoList var compArchive archives.CompressedArchive @@ -218,6 +227,8 @@ func ArchiveCreate(ctx context.Context, src fs.Fs, srcFile string, dst fs.Fs, ds return err } } + // + fi := filter.GetConfig(ctx) // get archive format compArchive, err = getCompressor(format, dstFile) if err != nil { @@ -227,13 +238,17 @@ func ArchiveCreate(ctx context.Context, src fs.Fs, srcFile string, dst fs.Fs, ds err = walk.Walk(ctx, src, "", false, -1, func(path string, entries fs.DirEntries, err error) error { // get directories entries.ForDir(func(o fs.Directory) { - fi := files.NewArchiveFileInfo(ctx, o, prefix, onProgress) - list = append(list, fi) + if fi.Include(o.Remote(), o.Size(), o.ModTime(ctx), loadMetadata(ctx, o)) { + info := files.NewArchiveFileInfo(ctx, o, prefix, onProgress) + list = append(list, info) + } }) // get files entries.ForObject(func(o fs.Object) { - fi := files.NewArchiveFileInfo(ctx, o, prefix, onProgress) - list = append(list, fi) + if fi.Include(o.Remote(), o.Size(), o.ModTime(ctx), loadMetadata(ctx, o)) { + info := files.NewArchiveFileInfo(ctx, o, prefix, onProgress) + list = append(list, info) + } }) return nil })