DEV: Remove use of cd in the app (#8337)

`FileUtils.cd` and `Dir.chdir` cause the working directory to change for the entire process. We run sidekiq jobs, hijacked requests and deferred jobs in threads, which can make working directory changes have unintended side-effects.

- Add a rubocop rule to warn about usage of Dir.chdir and FileUtils.cd
- Added rubocop:disable for scripts used outside the app
- Refactored code using cd to use alternative methods
- Temporarily skipped the rubocop check for lib/backup_restore. This will require more complex refactoring, so I will create a separate PR for review
This commit is contained in:
David Taylor
2019-11-13 09:57:39 +00:00
committed by GitHub
parent e4df3792f6
commit 9fea43e46a
7 changed files with 86 additions and 55 deletions

View File

@@ -17,12 +17,10 @@ class ThemeStore::ZipImporter
def import!
FileUtils.mkdir(@temp_folder)
Dir.chdir(@temp_folder) do
available_size = SiteSetting.decompressed_theme_max_file_size_mb
Compression::Engine.engine_for(@original_filename).tap do |engine|
engine.decompress(@temp_folder, @filename, available_size)
engine.strip_directory(@temp_folder, @temp_folder, relative: true)
end
available_size = SiteSetting.decompressed_theme_max_file_size_mb
Compression::Engine.engine_for(@original_filename).tap do |engine|
engine.decompress(@temp_folder, @filename, available_size)
engine.strip_directory(@temp_folder, @temp_folder, relative: true)
end
rescue RuntimeError
raise RemoteTheme::ImportError, I18n.t("themes.import_error.unpack_failed")
@@ -53,9 +51,7 @@ class ThemeStore::ZipImporter
end
def all_files
Dir.chdir(@temp_folder) do
Dir.glob("**/**").reject { |f| File.directory?(f) }
end
Dir.glob("**/**", base: @temp_folder).reject { |f| File.directory?(f) }
end
def [](value)