Copy copies a file or folder from one place to another.
(afs afero.Fs, src, dst string, fileMode, dirMode fs.FileMode)
| 10 | |
| 11 | // Copy copies a file or folder from one place to another. |
| 12 | func Copy(afs afero.Fs, src, dst string, fileMode, dirMode fs.FileMode) error { |
| 13 | if src = path.Clean("/" + src); src == "" { |
| 14 | return os.ErrNotExist |
| 15 | } |
| 16 | |
| 17 | if dst = path.Clean("/" + dst); dst == "" { |
| 18 | return os.ErrNotExist |
| 19 | } |
| 20 | |
| 21 | if src == "/" || dst == "/" { |
| 22 | // Prohibit copying from or to the virtual root directory. |
| 23 | return os.ErrInvalid |
| 24 | } |
| 25 | |
| 26 | if dst == src { |
| 27 | return os.ErrInvalid |
| 28 | } |
| 29 | |
| 30 | info, err := afs.Stat(src) |
| 31 | if err != nil { |
| 32 | return err |
| 33 | } |
| 34 | |
| 35 | if info.IsDir() { |
| 36 | return CopyDir(afs, src, dst, fileMode, dirMode) |
| 37 | } |
| 38 | |
| 39 | return CopyFile(afs, src, dst, fileMode, dirMode) |
| 40 | } |