[ruby-core:117247] [Ruby master Feature#6337] FileUtils#sync
From:
"matheusrich (Matheus Richard) via ruby-core" <ruby-core@...>
Date:
2024-03-20 00:38:22 UTC
List:
ruby-core #117247
Issue #6337 has been updated by matheusrich (Matheus Richard).
@trans I'm not sure I understand the proposal. Is this basically cloning the source dir with a different name? could that be the name you want `clone_dir`?
----------------------------------------
Feature #6337: FileUtils#sync
https://bugs.ruby-lang.org/issues/6337#change-107334
* Author: trans (Thomas Sawyer)
* Status: Assigned
* Assignee: matz (Yukihiro Matsumoto)
----------------------------------------
=begin
I'd like to see some sort of FileUtils#sync method to sync the contents of one directory with another.
Here is a prototype definition:
#
# Synchronize a destination directory with a source directory.
#
def sync(src, dst, options={})
src_files = Dir[File.join(src, '**', '*')].map{ |f| f.sub(src+'/', '') }
dst_files = Dir[File.join(dst, '**', '*')].map{ |f| f.sub(dst+'/', '') }
removal = dst_files - src_files
rm_dirs, rm_files = [], []
removal.each do |f|
path = File.join(dst, f)
if File.directory?(path)
rm_dirs << path
else
rm_files << path
end
end
rm_files.each { |f| rm(f) }
rm_dirs.each { |d| rmdir(d) }
src_files.each do |f|
src_path = File.join(src, f)
dst_path = File.join(dst, f)
if File.directory?(src_path)
mkdir_p(dst_path)
else
parent = File.dirname(dst_path)
mkdir_p(parent) unless File.directory?(parent)
install(src_path, dst_path)
end
end
end
I haven't tested this beyond a simple trial. It needs improvement. For one, it probably should be able to handle regular files as arguments too. It also needs to handle verbose and dryrun options properly. Nonetheless, with improvements, would be okay for such to become new feature for FileUtils?
=end
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/