public
Description: Syncs one directory to another (example: a git project to an svn repo)
Clone URL: git://github.com/technoweenie/duplikate.git
actually copy files...
technoweenie (author)
Fri Jan 25 14:34:46 -0800 2008
commit  caa75cbdd91a21a71f19ecbdb74c75e1bf88294d
tree    51fc355c849e005e2d565b78d95112f009af60ff
parent  e43118fe92a4ee45605cdc25507b1adaf1306a5b
...
1
 
 
...
1
2
3
0
@@ -1 +1,3 @@
0
 .DS_Store
0
+spec/dest-copy
0
+spec/source-copy
...
48
49
50
 
 
 
 
 
 
51
52
53
...
56
57
58
59
60
61
62
63
 
64
65
66
 
 
 
 
67
68
69
...
48
49
50
51
52
53
54
55
56
57
58
59
...
62
63
64
 
 
 
 
 
65
66
67
68
69
70
71
72
73
74
75
0
@@ -48,6 +48,12 @@ class Duplikate
0
   
0
   def execute(message, test_mode = false)
0
     process if @existing_files.nil?
0
+ unless test_mode
0
+ (@added_files + @added_directories + @existing_files).each do |file|
0
+ FileUtils.cp_r(@source + file, @destination + File.dirname(file))
0
+ end
0
+ FileUtils.rm_rf((@deleted_files + @deleted_directories).collect! { |f| @destination + f })
0
+ end
0
     @commands = []
0
     (@added_files + @added_directories).each do |added|
0
       @commands << "add #{added}"
0
@@ -56,14 +62,14 @@ class Duplikate
0
       @commands << "rm #{deleted}"
0
     end
0
     @commands << "ci -m '#{message}'"
0
- if test_mode
0
- true
0
- else
0
- @commands.each { |c| %x[svn #{c}] }
0
- end
0
+ test_mode || execute_commands
0
   end
0
 
0
 protected
0
+ def execute_commands
0
+ @commands.each { |c| %x[svn #{c}] }
0
+ end
0
+
0
   def process_path(path = nil)
0
     unless path.nil?
0
       dest_entry = @destination + path
...
54
55
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
58
...
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
0
@@ -54,4 +54,42 @@ describe Duplikate do
0
     @duplikate.commands.should include("rm foo/deleteme")
0
     @duplikate.commands.should include("ci -m 'running spec'")
0
   end
0
+end
0
+
0
+describe Duplikate, "syncing two directories" do
0
+ before do
0
+ @source = File.join(File.dirname(__FILE__), 'source')
0
+ @dest = File.join(File.dirname(__FILE__), 'dest')
0
+ FileUtils.rm_rf @source + '-copy'
0
+ FileUtils.rm_rf @dest + '-copy'
0
+ FileUtils.cp_r @source, @source + '-copy'
0
+ FileUtils.cp_r @dest, @dest + '-copy'
0
+ @source = Pathname.new(@source + '-copy')
0
+ @dest = Pathname.new(@dest + '-copy')
0
+ @duplikate = Duplikate.new @source, @dest
0
+ def @duplikate.execute_commands() end
0
+ @duplikate.execute("running spec")
0
+ end
0
+
0
+ it "creates added directories" do
0
+ (@dest + 'foo/addme').should be_directory
0
+ end
0
+
0
+ it "creates added files" do
0
+ (@dest + 'addme.txt').should be_file
0
+ end
0
+
0
+ it "deletes deleted directories" do
0
+ (@dest + 'deleteme').should_not be_directory
0
+ (@dest + 'foo/deleteme').should_not be_directory
0
+ end
0
+
0
+ it "deletes deleted files" do
0
+ (@dest + 'deleteme.txt').should_not be_file
0
+ end
0
+
0
+ it "updates changed files" do
0
+ file = 'foo/same/changed.txt'
0
+ IO.read(@source + file).should == IO.read(@dest + file)
0
+ end
0
 end
0
\ No newline at end of file

Comments

    No one has commented yet.