chillfile 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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