Skip to content

Commit 5ef5923

Browse files
committed
Revert "CopyMethod" since it's not ready
Revert "ci: Allow triggering Go workflow manually" This reverts commit f530620. Revert "refactor: Split common code out of CopyBytes" This reverts commit b4dd789. Revert "feat: Add FileCopyMethod option / API" This reverts commit 9205813.
1 parent 49b0b59 commit 5ef5923

File tree

4 files changed

+39
-96
lines changed

4 files changed

+39
-96
lines changed

.github/workflows/go.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ on:
55
branches: [ main, develop ]
66
pull_request:
77
branches: [ main, develop ]
8-
workflow_dispatch:
98

109
jobs:
1110

copy.go

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,38 +86,66 @@ func copyNextOrSkip(src, dest string, info os.FileInfo, opt Options) error {
8686
// with considering existence of parent directory
8787
// and file permission.
8888
func fcopy(src, dest string, info os.FileInfo, opt Options) (err error) {
89-
if err = os.MkdirAll(filepath.Dir(dest), os.ModePerm); err != nil {
89+
90+
var readcloser io.ReadCloser
91+
if opt.FS != nil {
92+
readcloser, err = opt.FS.Open(src)
93+
} else {
94+
readcloser, err = os.Open(src)
95+
}
96+
if err != nil {
97+
if os.IsNotExist(err) {
98+
return nil
99+
}
90100
return
91101
}
102+
defer fclose(readcloser, &err)
92103

93-
// Use FileCopyMethod to do copy.
94-
err, skipFile := opt.FileCopyMethod.fcopy(src, dest, info, opt)
95-
if skipFile {
96-
return nil
104+
if err = os.MkdirAll(filepath.Dir(dest), os.ModePerm); err != nil {
105+
return
97106
}
98107

108+
f, err := os.Create(dest)
99109
if err != nil {
100-
return err
110+
return
101111
}
112+
defer fclose(f, &err)
102113

103-
// Change file permissions.
104114
chmodfunc, err := opt.PermissionControl(info, dest)
105115
if err != nil {
106116
return err
107117
}
108-
109118
chmodfunc(&err)
110-
if err != nil {
119+
120+
var buf []byte = nil
121+
var w io.Writer = f
122+
var r io.Reader = readcloser
123+
124+
if opt.WrapReader != nil {
125+
r = opt.WrapReader(r)
126+
}
127+
128+
if opt.CopyBufferSize != 0 {
129+
buf = make([]byte, opt.CopyBufferSize)
130+
// Disable using `ReadFrom` by io.CopyBuffer.
131+
// See https://github.com/otiai10/copy/pull/60#discussion_r627320811 for more details.
132+
w = struct{ io.Writer }{f}
133+
// r = struct{ io.Reader }{s}
134+
}
135+
136+
if _, err = io.CopyBuffer(w, r, buf); err != nil {
111137
return err
112138
}
113139

114-
// Preserve file ownership and times.
140+
if opt.Sync {
141+
err = f.Sync()
142+
}
143+
115144
if opt.PreserveOwner {
116145
if err := preserveOwner(src, dest, info); err != nil {
117146
return err
118147
}
119148
}
120-
121149
if opt.PreserveTimes {
122150
if err := preserveTimes(info, dest); err != nil {
123151
return err

copy_methods.go

Lines changed: 0 additions & 65 deletions
This file was deleted.

options.go

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,6 @@ type Options struct {
2727
// RenameDestination can specify the destination file or dir name if needed to rename.
2828
RenameDestination func(src, dest string) (string, error)
2929

30-
// FileCopyMethod specifies the method by which a regular file is copied.
31-
// The default is CopyBytes.
32-
//
33-
// Available implementations:
34-
// - CopyBytes (best compatibility)
35-
//
36-
// Some implementations may not be supported on the target GOOS, or on
37-
// the user's filesystem. When these fail, an error will be returned.
38-
FileCopyMethod FileCopyMethod
39-
4030
// Specials includes special files to be copied. default false.
4131
Specials bool
4232

@@ -129,11 +119,6 @@ const (
129119
Untouchable
130120
)
131121

132-
// FileCopyMethod represents one of the ways that a regular file can be copied.
133-
type FileCopyMethod struct {
134-
fcopy func(src, dest string, info os.FileInfo, opt Options) (err error, skipFile bool)
135-
}
136-
137122
// getDefaultOptions provides default options,
138123
// which would be modified by usage-side.
139124
func getDefaultOptions(src, dest string) Options {
@@ -149,7 +134,6 @@ func getDefaultOptions(src, dest string) Options {
149134
Sync: false, // Do not sync
150135
Specials: false, // Do not copy special files
151136
PreserveTimes: false, // Do not preserve the modification time
152-
FileCopyMethod: CopyBytes, // Copy by bytes
153137
CopyBufferSize: 0, // Do not specify, use default bufsize (32*1024)
154138
WrapReader: nil, // Do not wrap src files, use them as they are.
155139
intent: intent{src, dest, nil, nil},
@@ -174,9 +158,6 @@ func assureOptions(src, dest string, opts ...Options) Options {
174158
} else if opts[0].PermissionControl == nil {
175159
opts[0].PermissionControl = PerservePermission
176160
}
177-
if opts[0].FileCopyMethod.fcopy == nil {
178-
opts[0].FileCopyMethod = defopt.FileCopyMethod
179-
}
180161
opts[0].intent.src = defopt.intent.src
181162
opts[0].intent.dest = defopt.intent.dest
182163
return opts[0]

0 commit comments

Comments
 (0)