[#44036] [ruby-trunk - Feature #6242][Open] Ruby should support lists — "shugo (Shugo Maeda)" <redmine@...>

20 messages 2012/04/01

[#44084] [ruby-trunk - Bug #6246][Open] 1.9.3-p125 intermittent segfault — "jshow (Jodi Showers)" <jodi@...>

22 messages 2012/04/02

[#44156] [ruby-trunk - Feature #6265][Open] Remove 'useless' 'concatenation' syntax — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

45 messages 2012/04/06

[#44163] [ruby-trunk - Bug #6266][Open] encoding related exception with recent integrated psych — "jonforums (Jon Forums)" <redmine@...>

10 messages 2012/04/06

[#44303] [ruby-trunk - Feature #6284][Open] Add composition for procs — "pabloh (Pablo Herrero)" <pablodherrero@...>

57 messages 2012/04/12

[#44349] [ruby-trunk - Feature #6293][Open] new queue / blocking queues — "tenderlovemaking (Aaron Patterson)" <aaron@...>

10 messages 2012/04/13

[#44402] [ruby-trunk - Feature #6308][Open] Eliminate delegation from WeakRef — "headius (Charles Nutter)" <headius@...>

20 messages 2012/04/17

[#44403] [ruby-trunk - Feature #6309][Open] Add a reference queue for weak references — "headius (Charles Nutter)" <headius@...>

15 messages 2012/04/17

[#44533] [ruby-trunk - Bug #6341][Open] SIGSEGV: Thread.new { fork { GC.start } }.join — "rudolf (r stu3)" <redmine@...>

24 messages 2012/04/22

[#44630] [ruby-trunk - Feature #6361][Open] Bitwise string operations — "MartinBosslet (Martin Bosslet)" <Martin.Bosslet@...>

31 messages 2012/04/26

[#44648] [ruby-trunk - Feature #6367][Open] #same? for Enumerable — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>

16 messages 2012/04/26

[#44704] [ruby-trunk - Feature #6373][Open] public #self — "trans (Thomas Sawyer)" <transfire@...>

61 messages 2012/04/27

[#44748] [ruby-trunk - Feature #6376][Open] Feature lookup and checking if feature is loaded — "trans (Thomas Sawyer)" <transfire@...>

13 messages 2012/04/28

[ruby-core:44524] [ruby-trunk - Feature #6337][Assigned] FileUtils#sync

From: "mame (Yusuke Endoh)" <mame@...>
Date: 2012-04-22 02:19:39 UTC
List: ruby-core #44524
Issue #6337 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to matz (Yukihiro Matsumoto)


----------------------------------------
Feature #6337: FileUtils#sync
https://bugs.ruby-lang.org/issues/6337#change-26077

Author: trans (Thomas Sawyer)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: lib
Target version: 1.9.3


=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



-- 
http://bugs.ruby-lang.org/

In This Thread