1
0
mirror of https://github.com/golang/go synced 2024-11-25 19:07:57 -07:00

os: document CopyFS behavior for symlinks in destination

Also clarify the permissions of created files,
and note that CopyFS will not overwrite files.

Update a few places in documentation to use 0oXXX for octal consts.

For #62484

Change-Id: I208ed2bde250304bc7fac2b93963ba57037e791e
Reviewed-on: https://go-review.googlesource.com/c/go/+/600775
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Damien Neil 2024-07-24 10:29:13 -07:00
parent 074f2761b5
commit 910e6b5fae
3 changed files with 15 additions and 13 deletions

View File

@ -132,15 +132,17 @@ func ReadDir(name string) ([]DirEntry, error) {
// CopyFS copies the file system fsys into the directory dir, // CopyFS copies the file system fsys into the directory dir,
// creating dir if necessary. // creating dir if necessary.
// //
// Newly created directories and files have their default modes // Files are created with mode 0o666 plus any execute permissions
// where any bits from the file in fsys that are not part of the // from the source, and directories are created with mode 0o777
// standard read, write, and execute permissions will be zeroed // (before umask).
// out, and standard read and write permissions are set for owner,
// group, and others while retaining any existing execute bits from
// the file in fsys.
// //
// Symbolic links in fsys are not supported, a *PathError with Err set // CopyFS will not overwrite existing files, and returns an error
// to ErrInvalid is returned on symlink. // if a file name in fsys already exists in the destination.
//
// Symbolic links in fsys are not supported. A *PathError with Err set
// to ErrInvalid is returned when copying from a symbolic link.
//
// Symbolic links in dir are followed.
// //
// Copying stops at and returns the first error encountered. // Copying stops at and returns the first error encountered.
func CopyFS(dir string, fsys fs.FS) error { func CopyFS(dir string, fsys fs.FS) error {

View File

@ -61,7 +61,7 @@ func ExampleFileMode() {
log.Fatal(err) log.Fatal(err)
} }
fmt.Printf("permissions: %#o\n", fi.Mode().Perm()) // 0400, 0777, etc. fmt.Printf("permissions: %#o\n", fi.Mode().Perm()) // 0o400, 0o777, etc.
switch mode := fi.Mode(); { switch mode := fi.Mode(); {
case mode.IsRegular(): case mode.IsRegular():
fmt.Println("regular file") fmt.Println("regular file")

View File

@ -366,7 +366,7 @@ func Open(name string) (*File, error) {
} }
// Create creates or truncates the named file. If the file already exists, // Create creates or truncates the named file. If the file already exists,
// it is truncated. If the file does not exist, it is created with mode 0666 // it is truncated. If the file does not exist, it is created with mode 0o666
// (before umask). If successful, methods on the returned File can // (before umask). If successful, methods on the returned File can
// be used for I/O; the associated file descriptor has mode O_RDWR. // be used for I/O; the associated file descriptor has mode O_RDWR.
// If there is an error, it will be of type *PathError. // If there is an error, it will be of type *PathError.
@ -606,11 +606,11 @@ func UserHomeDir() (string, error) {
// On Unix, the mode's permission bits, ModeSetuid, ModeSetgid, and // On Unix, the mode's permission bits, ModeSetuid, ModeSetgid, and
// ModeSticky are used. // ModeSticky are used.
// //
// On Windows, only the 0200 bit (owner writable) of mode is used; it // On Windows, only the 0o200 bit (owner writable) of mode is used; it
// controls whether the file's read-only attribute is set or cleared. // controls whether the file's read-only attribute is set or cleared.
// The other bits are currently unused. For compatibility with Go 1.12 // The other bits are currently unused. For compatibility with Go 1.12
// and earlier, use a non-zero mode. Use mode 0400 for a read-only // and earlier, use a non-zero mode. Use mode 0o400 for a read-only
// file and 0600 for a readable+writable file. // file and 0o600 for a readable+writable file.
// //
// On Plan 9, the mode's permission bits, ModeAppend, ModeExclusive, // On Plan 9, the mode's permission bits, ModeAppend, ModeExclusive,
// and ModeTemporary are used. // and ModeTemporary are used.