fe45bb6d4d
TL;DR: check for IsExist(err) after a failed MkdirAll() is both redundant and wrong -- so two reasons to remove it. Quoting MkdirAll documentation: > MkdirAll creates a directory named path, along with any necessary > parents, and returns nil, or else returns an error. If path > is already a directory, MkdirAll does nothing and returns nil. This means two things: 1. If a directory to be created already exists, no error is returned. 2. If the error returned is IsExist (EEXIST), it means there exists a non-directory with the same name as MkdirAll need to use for directory. Example: we want to MkdirAll("a/b"), but file "a" (or "a/b") already exists, so MkdirAll fails. The above is a theory, based on quoted documentation and my UNIX knowledge. 3. In practice, though, current MkdirAll implementation [1] returns ENOTDIR in most of cases described in #2, with the exception when there is a race between MkdirAll and someone else creating the last component of MkdirAll argument as a file. In this very case MkdirAll() will indeed return EEXIST. Because of #1, IsExist check after MkdirAll is not needed. Because of #2 and #3, ignoring IsExist error is just plain wrong, as directory we require is not created. It's cleaner to report the error now. Note this error is all over the tree, I guess due to copy-paste, or trying to follow the same usage pattern as for Mkdir(), or some not quite correct examples on the Internet. [v2: a separate aufs commit is merged into this one] [1] https://github.com/golang/go/blob/f9ed2f75/src/os/path.go Signed-off-by: Kir Kolyshkin <kir@openvz.org> |
||
---|---|---|
.. | ||
testdata | ||
archive.go | ||
archive_test.go | ||
archive_unix.go | ||
archive_unix_test.go | ||
archive_windows.go | ||
archive_windows_test.go | ||
changes.go | ||
changes_linux.go | ||
changes_other.go | ||
changes_posix_test.go | ||
changes_test.go | ||
changes_unix.go | ||
changes_windows.go | ||
copy.go | ||
copy_test.go | ||
diff.go | ||
diff_test.go | ||
example_changes.go | ||
README.md | ||
time_linux.go | ||
time_unsupported.go | ||
utils_test.go | ||
wrap.go | ||
wrap_test.go |
This code provides helper functions for dealing with archive files.