chillfile 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -7,6 +7,7 @@ group :default do
7
7
  gem "treedisha", "~> 0.0.2", :git => 'git://github.com/dpree/treedisha.git'
8
8
  gem "json"
9
9
  gem "thor"
10
+ gem "ruby-progressbar"
10
11
  end
11
12
 
12
13
  group :test do
data/Gemfile.lock CHANGED
@@ -11,9 +11,9 @@ GIT
11
11
 
12
12
  GIT
13
13
  remote: git://github.com/dpree/treedisha.git
14
- revision: 926c6bb92b24972da1cad1b8cf27c32c13096674
14
+ revision: bce76bfcb419b7308d6d1b062c607ecbcf9f8e37
15
15
  specs:
16
- treedisha (0.0.1)
16
+ treedisha (0.0.2)
17
17
 
18
18
  GEM
19
19
  remote: http://rubygems.org/
@@ -72,6 +72,7 @@ GEM
72
72
  rspec-expectations (2.3.0)
73
73
  diff-lcs (~> 1.1.2)
74
74
  rspec-mocks (2.3.0)
75
+ ruby-progressbar (0.0.9)
75
76
  thor (0.14.6)
76
77
  tzinfo (0.3.23)
77
78
 
@@ -84,5 +85,6 @@ DEPENDENCIES
84
85
  jeweler
85
86
  json
86
87
  rspec
88
+ ruby-progressbar
87
89
  thor
88
- treedisha!
90
+ treedisha (~> 0.0.2)!
data/bin/chillfile CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "rubygems"
4
- require "chillfile"
3
+ #require "rubygems"
4
+ #require "chillfile"
5
5
 
6
- #require File.join(File.dirname(__FILE__), "../lib/chillfile")
6
+ require File.join(File.dirname(__FILE__), "../lib/chillfile")
7
7
 
8
8
  Chillfile::CLI.start
data/chillfile.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{chillfile}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dpree"]
@@ -39,13 +39,18 @@ Gem::Specification.new do |s|
39
39
  "spec/filesystem_after/bar.1.moved.untouched",
40
40
  "spec/filesystem_after/bar.2.moved.copy",
41
41
  "spec/filesystem_after/bar.3.moved.copy",
42
+ "spec/filesystem_after/baz.modified.single",
42
43
  "spec/filesystem_after/foo.fx.copy",
43
44
  "spec/filesystem_after/foo.untouched",
45
+ "spec/filesystem_after/modified/biz.0.modified.multi",
46
+ "spec/filesystem_after/modified/biz.1.modified.multi",
44
47
  "spec/filesystem_after/moo.new",
45
48
  "spec/filesystem_after/subdir_b/bar.4.moved.copy",
46
49
  "spec/filesystem_before/bar.0.moved.deleted",
47
50
  "spec/filesystem_before/bar.1.moved.untouched",
51
+ "spec/filesystem_before/baz.modified.single",
48
52
  "spec/filesystem_before/foo.untouched",
53
+ "spec/filesystem_before/modified/biz.0.modified.multi",
49
54
  "spec/filesystem_before/subdir/mii.deleted",
50
55
  "spec/filesystem_before/wuu.deleted",
51
56
  "spec/fixtures/filesystem_after.json",
@@ -83,6 +88,7 @@ Gem::Specification.new do |s|
83
88
  s.add_runtime_dependency(%q<treedisha>, ["~> 0.0.2"])
84
89
  s.add_runtime_dependency(%q<json>, [">= 0"])
85
90
  s.add_runtime_dependency(%q<thor>, [">= 0"])
91
+ s.add_runtime_dependency(%q<ruby-progressbar>, [">= 0"])
86
92
  s.add_runtime_dependency(%q<thor>, ["~> 0.14.6"])
87
93
  s.add_runtime_dependency(%q<couchrest>, ["~> 1.0.1"])
88
94
  s.add_runtime_dependency(%q<treedisha>, ["~> 0.0.2"])
@@ -93,6 +99,7 @@ Gem::Specification.new do |s|
93
99
  s.add_dependency(%q<treedisha>, ["~> 0.0.2"])
94
100
  s.add_dependency(%q<json>, [">= 0"])
95
101
  s.add_dependency(%q<thor>, [">= 0"])
102
+ s.add_dependency(%q<ruby-progressbar>, [">= 0"])
96
103
  s.add_dependency(%q<thor>, ["~> 0.14.6"])
97
104
  s.add_dependency(%q<couchrest>, ["~> 1.0.1"])
98
105
  s.add_dependency(%q<treedisha>, ["~> 0.0.2"])
@@ -104,6 +111,7 @@ Gem::Specification.new do |s|
104
111
  s.add_dependency(%q<treedisha>, ["~> 0.0.2"])
105
112
  s.add_dependency(%q<json>, [">= 0"])
106
113
  s.add_dependency(%q<thor>, [">= 0"])
114
+ s.add_dependency(%q<ruby-progressbar>, [">= 0"])
107
115
  s.add_dependency(%q<thor>, ["~> 0.14.6"])
108
116
  s.add_dependency(%q<couchrest>, ["~> 1.0.1"])
109
117
  s.add_dependency(%q<treedisha>, ["~> 0.0.2"])
data/lib/chillfile/cli.rb CHANGED
@@ -14,12 +14,12 @@ module Chillfile
14
14
 
15
15
  class_option "couchdb_database",
16
16
  :default => "chillfile",
17
- :aliases => '-db',
17
+ :aliases => '-d',
18
18
  :banner => "CouchDB Database name"
19
19
 
20
20
  class_option "couchdb_type_key",
21
21
  :default => "type",
22
- :aliases => '-tk',
22
+ :aliases => '-k',
23
23
  :banner => "Attribute name of a CouchDB doc to describe its type"
24
24
 
25
25
  class_option "version",
@@ -47,7 +47,12 @@ module Chillfile
47
47
 
48
48
  desc 'sync', 'sync filesystem into db'
49
49
  def sync
50
- Chillfile.sync!
50
+ progressbar = lambda do |info, notifier|
51
+ pbar = ::ProgressBar.new("#{info[:name]} (#{info[:size]})", info[:size])
52
+ notifier.call(lambda{ pbar.inc })
53
+ pbar.finish
54
+ end
55
+ Chillfile.sync!(progressbar)
51
56
  end
52
57
 
53
58
  desc 'fslist', 'json list of files in the filesystem'
@@ -1,49 +1,54 @@
1
1
  module Chillfile
2
2
  module Sync
3
3
  class << self
4
- def process!(comparator)
4
+ def process!(comparator, progressbar = nil)
5
+ @progressbar = progressbar
5
6
 
6
- # created files
7
- comparator.created.each do |checksum, path|
7
+ # deleted
8
+ process_list(comparator.deleted, "Delete") do |checksum, path|
8
9
  for_doc_with(checksum) do |doc|
9
- if doc
10
- update_doc_add_path(doc, path)
10
+ if doc.paths.size > 1
11
+ update_doc_paths(doc, [path])
11
12
  else
12
- create_doc(checksum, path)
13
+ delete_doc(doc)
13
14
  end
14
15
  end
15
16
  end
16
-
17
+
17
18
  # moved files
18
- comparator.moved.each do |checksum, paths|
19
+ process_list(comparator.moved, "Move") do |checksum, paths|
19
20
  for_doc_with(checksum) do |doc|
20
21
  update_doc_paths(doc, paths[:old_paths], paths[:new_paths])
21
22
  end
22
23
  end
23
24
 
24
25
  # modified files
25
- comparator.modified.each do |path, checksums|
26
+ process_list(comparator.modified, "Modify") do |path, checksums|
26
27
  for_doc_with(checksums[:old_checksum]) do |doc|
27
-
28
+
28
29
  # split it up if there is more than one path
29
30
  if doc.paths.size > 1
30
- base_doc = update_doc_paths(doc, [path]),
31
- forked_doc = create_doc(checksums[:new_checksum], path)
32
-
33
- [base_doc, forked_doc]
31
+
32
+ # remove the old path from the list
33
+ base_doc = update_doc_paths(doc, [path])
34
+
35
+ # new forked doc
36
+ fork_doc = create_doc(checksums[:new_checksum], path)
37
+
38
+ [base_doc, fork_doc]
34
39
  else
35
- update_doc_attachment(doc)
40
+ update_doc_attachment(doc, checksums[:new_checksum])
36
41
  end
37
42
  end
38
43
  end
39
-
40
- # deleted
41
- comparator.deleted.each do |checksum, path|
44
+
45
+ # created files
46
+ process_list(comparator.created, "Create") do |checksum, path|
42
47
  for_doc_with(checksum) do |doc|
43
- if doc.paths.size > 1
44
- update_doc_paths(doc, [path])
48
+ if doc
49
+ update_doc_add_path(doc, path)
45
50
  else
46
- delete_doc(doc)
51
+ create_doc(checksum, path)
47
52
  end
48
53
  end
49
54
  end
@@ -66,12 +71,10 @@ module Chillfile
66
71
 
67
72
  # COPIED
68
73
  def update_doc_add_path(doc, path)
69
- doc.paths << path
70
-
71
- doc
74
+ update_doc_paths(doc, [], [path])
72
75
  end
73
76
 
74
- # MOVED
77
+ # MOVED/COPIED
75
78
  def update_doc_paths(doc, del_paths = [], add_paths = [])
76
79
  # del old paths
77
80
  del_paths.each do |path|
@@ -85,8 +88,8 @@ module Chillfile
85
88
  end
86
89
 
87
90
  # MODIFIED
88
- def update_doc_attachment(doc)
89
- doc.checksum = checksums[:new_checksum]
91
+ def update_doc_attachment(doc, new_checksum)
92
+ doc.checksum = new_checksum
90
93
  begin
91
94
  file = File.open(doc.paths.first)
92
95
  doc.update_attachment(:file => file, :name => "master")
@@ -101,7 +104,25 @@ module Chillfile
101
104
  doc.deleted = true
102
105
  doc.paths = []
103
106
  doc
104
- end
107
+ end
108
+
109
+ # wrapper outer
110
+ def process_list(list, title, &block)
111
+ return true if list.empty?
112
+
113
+ list_iterator = lambda do |notifier|
114
+ list.each do |args|
115
+ block.call(*args)
116
+ end
117
+ notifier.call if notifier
118
+ end
119
+
120
+ if @progressbar
121
+ @progressbar.call({:name => title, :size => list.size}, list_iterator)
122
+ else
123
+ list_iterator.call(nil)
124
+ end
125
+ end
105
126
 
106
127
  # wrapper
107
128
  def for_doc_with(checksum, &block)
data/lib/chillfile.rb CHANGED
@@ -1,11 +1,16 @@
1
1
  require "yaml"
2
2
 
3
3
  require 'rubygems'
4
+
5
+ # LIB
4
6
  require "couchrest"
5
7
  require 'couchrest_model'
6
8
  require "treedisha"
7
9
  require "json"
10
+
11
+ # CLI
8
12
  require "thor"
13
+ require "progressbar"
9
14
 
10
15
  require File.join(File.dirname(__FILE__), "chillfile/config")
11
16
  require File.join(File.dirname(__FILE__), "chillfile/cli")
@@ -27,7 +32,7 @@ module Chillfile
27
32
  Chillfile::Model.load!
28
33
  true
29
34
  end
30
-
35
+
31
36
  def config
32
37
  @@config
33
38
  end
@@ -35,12 +40,12 @@ module Chillfile
35
40
  @@dbserver.default_database
36
41
  end
37
42
 
38
- def sync!
43
+ def sync!(progressbar = nil)
39
44
  fs = fs_list
40
45
  db = db_list
41
46
  comparator = Treedisha::Comparator.new(fs_list, db_list)
42
47
 
43
- Chillfile::Sync.process!(comparator)
48
+ Chillfile::Sync.process!(comparator, progressbar)
44
49
  end
45
50
 
46
51
  # filesystem
@@ -0,0 +1,2 @@
1
+ i am a file to be modified
2
+ AFTER
@@ -0,0 +1,2 @@
1
+ i am part of several files modified
2
+ AFTER
@@ -0,0 +1,2 @@
1
+ i am part of several files modified
2
+ AFTER
@@ -0,0 +1,2 @@
1
+ i am a file to be modified
2
+ BEFORE
@@ -0,0 +1,2 @@
1
+ i am part of several files modified
2
+ BEFORE
@@ -1 +1,10 @@
1
- [["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./bar.1.moved.untouched"], ["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./bar.2.moved.copy"], ["da39a3ee5e6b4b0d3255bfef95601890afd80709", "./bar.3.moved.copy"], ["83a4f6db0964dd03480be5f781eec6c5c2f7f5f2", "./foo.fx.copy"], ["83a4f6db0964dd03480be5f781eec6c5c2f7f5f2", "./foo.untouched"], ["cd84598b6fcb747a2b1954934b964e5a5c27836e", "./moo.new"], ["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./subdir_b/bar.4.moved.copy"]]
1
+ [["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./bar.1.moved.untouched"],
2
+ ["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./bar.2.moved.copy"],
3
+ ["da39a3ee5e6b4b0d3255bfef95601890afd80709", "./bar.3.moved.copy"],
4
+ ["83a4f6db0964dd03480be5f781eec6c5c2f7f5f2", "./foo.fx.copy"],
5
+ ["83a4f6db0964dd03480be5f781eec6c5c2f7f5f2", "./foo.untouched"],
6
+ ["cd84598b6fcb747a2b1954934b964e5a5c27836e", "./moo.new"],
7
+ ["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./subdir_b/bar.4.moved.copy"],
8
+ ["33772e8f45b1afd7b0cefa5bc39912a1e782c343", "./baz.modified.single"],
9
+ ["08a7dd9727c92398f3259a677c2b7e821606db4c", "./modified/biz.0.modified.multi"],
10
+ ["08a7dd9727c92398f3259a677c2b7e821606db4c", "./modified/biz.1.modified.multi"]]
@@ -1 +1,7 @@
1
- [["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./bar.0.moved.deleted"], ["da39a3ee5e6b4b0d3255bfef95601890afd80709", "./bar.1.moved.untouched"], ["83a4f6db0964dd03480be5f781eec6c5c2f7f5f2", "./foo.untouched"], ["5ab7aa2b4aaa458fd89089ce4384102a33bf7765", "./subdir/mii.deleted"], ["c0ae0100acd4b0063535dd8fbbdf87919741e320", "./wuu.deleted"]]
1
+ [["ab4b262b83ad979d10a2c3c633242bb222ba74e7", "./bar.0.moved.deleted"],
2
+ ["da39a3ee5e6b4b0d3255bfef95601890afd80709", "./bar.1.moved.untouched"],
3
+ ["83a4f6db0964dd03480be5f781eec6c5c2f7f5f2", "./foo.untouched"],
4
+ ["5ab7aa2b4aaa458fd89089ce4384102a33bf7765", "./subdir/mii.deleted"],
5
+ ["c0ae0100acd4b0063535dd8fbbdf87919741e320", "./wuu.deleted"],
6
+ ["236788602d9b00710e4ece24dc202165c28b7dc4", "./baz.modified.single"],
7
+ ["4e719bc39c20b4c2633265406a1074db39e88c65", "./modified/biz.0.modified.multi"]]
data/version.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 0
4
- :patch: 1
4
+ :patch: 2
5
5
  :build:
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - dpree
@@ -85,8 +85,21 @@ dependencies:
85
85
  prerelease: false
86
86
  version_requirements: *id005
87
87
  - !ruby/object:Gem::Dependency
88
- name: thor
88
+ name: ruby-progressbar
89
89
  requirement: &id006 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ segments:
95
+ - 0
96
+ version: "0"
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: *id006
100
+ - !ruby/object:Gem::Dependency
101
+ name: thor
102
+ requirement: &id007 !ruby/object:Gem::Requirement
90
103
  none: false
91
104
  requirements:
92
105
  - - ~>
@@ -98,10 +111,10 @@ dependencies:
98
111
  version: 0.14.6
99
112
  type: :runtime
100
113
  prerelease: false
101
- version_requirements: *id006
114
+ version_requirements: *id007
102
115
  - !ruby/object:Gem::Dependency
103
116
  name: couchrest
104
- requirement: &id007 !ruby/object:Gem::Requirement
117
+ requirement: &id008 !ruby/object:Gem::Requirement
105
118
  none: false
106
119
  requirements:
107
120
  - - ~>
@@ -113,10 +126,10 @@ dependencies:
113
126
  version: 1.0.1
114
127
  type: :runtime
115
128
  prerelease: false
116
- version_requirements: *id007
129
+ version_requirements: *id008
117
130
  - !ruby/object:Gem::Dependency
118
131
  name: treedisha
119
- requirement: &id008 !ruby/object:Gem::Requirement
132
+ requirement: &id009 !ruby/object:Gem::Requirement
120
133
  none: false
121
134
  requirements:
122
135
  - - ~>
@@ -128,10 +141,10 @@ dependencies:
128
141
  version: 0.0.2
129
142
  type: :runtime
130
143
  prerelease: false
131
- version_requirements: *id008
144
+ version_requirements: *id009
132
145
  - !ruby/object:Gem::Dependency
133
146
  name: rspec
134
- requirement: &id009 !ruby/object:Gem::Requirement
147
+ requirement: &id010 !ruby/object:Gem::Requirement
135
148
  none: false
136
149
  requirements:
137
150
  - - ~>
@@ -143,7 +156,7 @@ dependencies:
143
156
  version: 2.0.0
144
157
  type: :development
145
158
  prerelease: false
146
- version_requirements: *id009
159
+ version_requirements: *id010
147
160
  description: Let your files chill on the couch
148
161
  email: whiterabbit.init@gmail.com
149
162
  executables:
@@ -174,13 +187,18 @@ files:
174
187
  - spec/filesystem_after/bar.1.moved.untouched
175
188
  - spec/filesystem_after/bar.2.moved.copy
176
189
  - spec/filesystem_after/bar.3.moved.copy
190
+ - spec/filesystem_after/baz.modified.single
177
191
  - spec/filesystem_after/foo.fx.copy
178
192
  - spec/filesystem_after/foo.untouched
193
+ - spec/filesystem_after/modified/biz.0.modified.multi
194
+ - spec/filesystem_after/modified/biz.1.modified.multi
179
195
  - spec/filesystem_after/moo.new
180
196
  - spec/filesystem_after/subdir_b/bar.4.moved.copy
181
197
  - spec/filesystem_before/bar.0.moved.deleted
182
198
  - spec/filesystem_before/bar.1.moved.untouched
199
+ - spec/filesystem_before/baz.modified.single
183
200
  - spec/filesystem_before/foo.untouched
201
+ - spec/filesystem_before/modified/biz.0.modified.multi
184
202
  - spec/filesystem_before/subdir/mii.deleted
185
203
  - spec/filesystem_before/wuu.deleted
186
204
  - spec/fixtures/filesystem_after.json