Improve rb-site's method of checking the site directory on install.
Review Request #11443 — Created Feb. 11, 2021 and submitted
Before walking a user through the installation process,
rb-site
checks
to make sure the directory can be written to and that it's free of
files. The way it would historically do this would be to try to remove
the directory, since installation would re-create it. However, this
approach isn't particularly great, for a few reasons:1) It might have been pre-created with proper ownership, which the
removal would undo.2) If that directory was a mounted filesystem, it couldn't just remove
it.3) When things went wrong, our error message just had to guess at the
cause.This change redoes the logic, explicitly checking first if the path
exists. If it does, it checks for existing files, and bails with a
helpful error if it finds any. If no files exist, it tries to write a
temporary file to it to check permissions.If the path does not exist, it then tries to create and then remove it,
checking permissions on the parent directory.This is far safer, and gives more flexibility when running in a Docker
image or installing to a top-level NFS mount.
Successfully installed in a brand-new directory.
Successfully installed in an empty directory.
Tried installing in a directory with files, and saw a suitable error.
Tried installing in an unwritable empty directory, and saw a suitable error.
Tried installing to a brand-new directory that couldn't be created, and saw
a suitable error.
- Change Summary:
-
Removed two unused variables.
- Commits:
-
Summary ID 6e5440bc197f1b93e1d4fbf1bf90e2c93ebf7f6b 84cb8a1d2a59cdc112f685ce87bf7b2c67df665f - Diff:
-
Revision 2 (+90 -42)