Skip to content

Commit

Permalink
Merge pull request #6164 from MikeMcQuaid/better-permissions-errors
Browse files Browse the repository at this point in the history
Improve permissions errors
  • Loading branch information
MikeMcQuaid authored May 24, 2019
2 parents 6806887 + 4759ffb commit 7091898
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 7 deletions.
2 changes: 1 addition & 1 deletion Library/Homebrew/cask/cmd/doctor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def check_staging_location

if path.exist? && !path.writable?
add_error "The staging path #{user_tilde(path.to_s)} is not writable by the current user."
add_error "To fix, run \'sudo chown -R ${USER}:staff #{user_tilde(path.to_s)}'"
add_error "To fix, run \'sudo chown -R $(whoami):staff #{user_tilde(path.to_s)}'"
end

puts user_tilde(path.to_s)
Expand Down
9 changes: 8 additions & 1 deletion Library/Homebrew/formula_installer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,14 @@ def install
rescue Exception => e # rubocop:disable Lint/RescueException
# any exceptions must leave us with nothing installed
ignore_interrupts do
formula.prefix.rmtree if formula.prefix.directory?
begin
formula.prefix.rmtree if formula.prefix.directory?
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS
Could not remove #{formula.prefix.basename} keg! Do so manually:
sudo rm -rf #{formula.prefix}
EOS
end
formula.rack.rmdir_if_possible
end
raise if ARGV.homebrew_developer? ||
Expand Down
7 changes: 5 additions & 2 deletions Library/Homebrew/keg.rb
Original file line number Diff line number Diff line change
Expand Up @@ -310,8 +310,11 @@ def uninstall
remove_opt_record if optlinked?
remove_old_aliases
remove_oldname_opt_record
rescue Errno::ENOTEMPTY
ofail "Could not remove #{path}! Check its permissions."
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS
Could not remove #{name} keg! Do so manually:
sudo rm -rf #{path}
EOS
end

def unlink(mode = OpenStruct.new)
Expand Down
18 changes: 16 additions & 2 deletions Library/Homebrew/reinstall.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,26 @@ def reinstall_formula(f, build_from_source: false)
ignore_interrupts { restore_backup(keg, keg_was_linked) }
raise
else
backup_path(keg).rmtree if backup_path(keg).exist?
begin
backup_path(keg).rmtree if backup_path(keg).exist?
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS
Could not remove #{backup_path(keg).parent.basename} backup keg! Do so manually:
sudo rm -rf #{backup_path(keg)}
EOS
end
end

def backup(keg)
keg.unlink
keg.rename backup_path(keg)
begin
keg.rename backup_path(keg)
rescue Errno::EACCES, Errno::ENOTEMPTY
odie <<~EOS
Could not rename #{keg.name} keg! Check/fix its permissions:
sudo chown -R $(whoami) #{keg}
EOS
end
end

def restore_backup(keg, keg_was_linked)
Expand Down
2 changes: 1 addition & 1 deletion docs/Gems,-Eggs-and-Perl-Modules.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ If you ever did a `sudo gem`, etc. before then a lot of files will have
been created owned by root. Fix with:

```sh
sudo chown -R $USER /Library/Ruby /Library/Perl /Library/Python
sudo chown -R $(whoami) /Library/Ruby /Library/Perl /Library/Python
```

## Perl CPAN modules without sudo
Expand Down

0 comments on commit 7091898

Please sign in to comment.