dircat 0.0.5 → 0.1.4

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.
Files changed (46) hide show
  1. data/LICENSE +1 -1
  2. data/README.rdoc +1 -1
  3. data/Rakefile +9 -0
  4. data/VERSION.yml +5 -0
  5. data/bin/dircat-build +6 -0
  6. data/bin/dircat-diff +6 -0
  7. data/bin/dircat-query +6 -0
  8. data/dircat.gemspec +88 -0
  9. data/examples/example.rb +10 -0
  10. data/lib/dircat/cat.rb +192 -0
  11. data/lib/dircat/cli/dircat_build.rb +92 -83
  12. data/lib/dircat/cli/dircat_diff.rb +85 -0
  13. data/lib/dircat/cli/dircat_query.rb +53 -43
  14. data/lib/dircat/entry.rb +60 -0
  15. data/lib/dircat/extension_md5.rb +24 -0
  16. data/lib/dircat/extension_numeric.rb +17 -0
  17. data/lib/dircat/report.rb +61 -0
  18. data/lib/dircat.rb +29 -2
  19. data/spec/dircat/cat_spec.rb +71 -0
  20. data/spec/dircat/cli/dircat_build_spec.rb +59 -0
  21. data/spec/dircat/cli/dircat_query_diff_spec.rb +26 -0
  22. data/spec/dircat/cli/dircat_query_spec.rb +35 -0
  23. data/spec/dircat/md5_spec.rb +12 -0
  24. data/spec/dircat/numeric_spec.rb +11 -0
  25. data/spec/spec_helper.rb +25 -0
  26. metadata +136 -40
  27. data/bin/dircat-build.rb +0 -8
  28. data/bin/dircat-cfr.rb +0 -8
  29. data/bin/dircat-cmp.rb +0 -8
  30. data/bin/dircat-query.rb +0 -8
  31. data/lib/dircat/cli/dircat_cfr.rb +0 -69
  32. data/lib/dircat/cli/dircat_cmp.rb +0 -65
  33. data/lib/dircat/dircat.rb +0 -263
  34. data/test/dircat/tc_dircat.rb +0 -83
  35. data/test/dircat/tc_dircat_build.rb +0 -43
  36. data/test/test_dircat.rb +0 -6
  37. /data/{test_data/dircat/data → spec/fixtures}/certified_output/dircat1.yaml +0 -0
  38. /data/{test_data/dircat/data → spec/fixtures}/certified_output/dircat2.yaml +0 -0
  39. /data/{test_data/dircat/data → spec/fixtures}/dir1/file1.txt +0 -0
  40. /data/{test_data/dircat/data → spec/fixtures}/dir1/subdir/file3.txt +0 -0
  41. /data/{test_data/dircat/data → spec/fixtures}/dir2/file1.txt +0 -0
  42. /data/{test_data/dircat/data → spec/fixtures}/dir2/file2.txt +0 -0
  43. /data/{test_data/dircat/data → spec/fixtures}/dir2/subdir/file3.txt +0 -0
  44. /data/{test_data/dircat/data → spec/fixtures}/dir3/file1.txt +0 -0
  45. /data/{test_data/dircat/data → spec/fixtures}/dir3/subdir/file1.txt +0 -0
  46. /data/{test_data/dircat/data → spec/fixtures}/tmp/dummy.txt +0 -0
metadata CHANGED
@@ -1,85 +1,181 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dircat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 4
9
+ version: 0.1.4
5
10
  platform: ruby
6
11
  authors:
7
- - gf
12
+ - Tokiro
8
13
  autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-05-25 00:00:00 +02:00
17
+ date: 2010-12-17 00:00:00 +01:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: tree_visitor
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
21
+ name: jeweler
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
23
29
  version: "0"
24
- version:
25
- description:
26
- email: giovanni.ferro@gmail.com
30
+ type: :development
31
+ prerelease: false
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 0
42
+ version: "0"
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: yard
48
+ requirement: &id003 !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id003
59
+ - !ruby/object:Gem::Dependency
60
+ name: bundler
61
+ requirement: &id004 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: *id004
72
+ - !ruby/object:Gem::Dependency
73
+ name: rspec
74
+ requirement: &id005 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: *id005
85
+ description: "\n command line utilites to manage catalogs of directory\n "
86
+ email: tokiro.oyama@gmail.com
27
87
  executables:
28
- - dircat-cfr.rb
29
- - dircat-query.rb
30
- - dircat-cmp.rb
31
- - dircat-build.rb
88
+ - dircat-build
89
+ - dircat-diff
90
+ - dircat-query
32
91
  extensions: []
33
92
 
34
93
  extra_rdoc_files:
35
94
  - LICENSE
36
95
  - README.rdoc
37
96
  files:
97
+ - LICENSE
98
+ - README.rdoc
99
+ - Rakefile
100
+ - VERSION.yml
101
+ - dircat.gemspec
102
+ - examples/example.rb
38
103
  - lib/dircat.rb
104
+ - lib/dircat/cat.rb
39
105
  - lib/dircat/cli/dircat_build.rb
40
- - lib/dircat/cli/dircat_cfr.rb
41
- - lib/dircat/cli/dircat_cmp.rb
106
+ - lib/dircat/cli/dircat_diff.rb
42
107
  - lib/dircat/cli/dircat_query.rb
43
- - lib/dircat/dircat.rb
44
- - test_data/dircat/data/certified_output/dircat1.yaml
45
- - test_data/dircat/data/certified_output/dircat2.yaml
46
- - test_data/dircat/data/dir1/file1.txt
47
- - test_data/dircat/data/dir1/subdir/file3.txt
48
- - test_data/dircat/data/dir2/file1.txt
49
- - test_data/dircat/data/dir2/file2.txt
50
- - test_data/dircat/data/dir2/subdir/file3.txt
51
- - test_data/dircat/data/dir3/file1.txt
52
- - test_data/dircat/data/dir3/subdir/file1.txt
53
- - test_data/dircat/data/tmp/dummy.txt
54
- - LICENSE
55
- - README.rdoc
108
+ - lib/dircat/entry.rb
109
+ - lib/dircat/extension_md5.rb
110
+ - lib/dircat/extension_numeric.rb
111
+ - lib/dircat/report.rb
112
+ - spec/dircat/cat_spec.rb
113
+ - spec/dircat/cli/dircat_build_spec.rb
114
+ - spec/dircat/cli/dircat_query_diff_spec.rb
115
+ - spec/dircat/cli/dircat_query_spec.rb
116
+ - spec/dircat/md5_spec.rb
117
+ - spec/dircat/numeric_spec.rb
118
+ - spec/fixtures/certified_output/dircat1.yaml
119
+ - spec/fixtures/certified_output/dircat2.yaml
120
+ - spec/fixtures/dir1/file1.txt
121
+ - spec/fixtures/dir1/subdir/file3.txt
122
+ - spec/fixtures/dir2/file1.txt
123
+ - spec/fixtures/dir2/file2.txt
124
+ - spec/fixtures/dir2/subdir/file3.txt
125
+ - spec/fixtures/dir3/file1.txt
126
+ - spec/fixtures/dir3/subdir/file1.txt
127
+ - spec/fixtures/tmp/dummy.txt
128
+ - spec/spec_helper.rb
129
+ - bin/dircat-build
130
+ - bin/dircat-diff
131
+ - bin/dircat-query
56
132
  has_rdoc: true
57
- homepage: http://github.com/gf/dircat
133
+ homepage: http://github.com/tokiro/dircat
134
+ licenses: []
135
+
58
136
  post_install_message:
59
- rdoc_options:
60
- - --charset=UTF-8
137
+ rdoc_options: []
138
+
61
139
  require_paths:
62
140
  - lib
63
141
  required_ruby_version: !ruby/object:Gem::Requirement
142
+ none: false
64
143
  requirements:
65
144
  - - ">="
66
145
  - !ruby/object:Gem::Version
146
+ segments:
147
+ - 0
67
148
  version: "0"
68
- version:
69
149
  required_rubygems_version: !ruby/object:Gem::Requirement
150
+ none: false
70
151
  requirements:
71
152
  - - ">="
72
153
  - !ruby/object:Gem::Version
154
+ segments:
155
+ - 0
73
156
  version: "0"
74
- version:
75
157
  requirements: []
76
158
 
77
- rubyforge_project: ralbum
78
- rubygems_version: 1.3.1
159
+ rubyforge_project:
160
+ rubygems_version: 1.3.7
79
161
  signing_key:
80
- specification_version: 2
162
+ specification_version: 3
81
163
  summary: command line utilites to manage catalogs of directory
82
164
  test_files:
83
- - test/dircat/tc_dircat.rb
84
- - test/dircat/tc_dircat_build.rb
85
- - test/test_dircat.rb
165
+ - spec/dircat/cat_spec.rb
166
+ - spec/dircat/cli/dircat_build_spec.rb
167
+ - spec/dircat/cli/dircat_query_diff_spec.rb
168
+ - spec/dircat/cli/dircat_query_spec.rb
169
+ - spec/dircat/md5_spec.rb
170
+ - spec/dircat/numeric_spec.rb
171
+ - spec/fixtures/certified_output/dircat1.yaml
172
+ - spec/fixtures/certified_output/dircat2.yaml
173
+ - spec/fixtures/dir1/file1.txt
174
+ - spec/fixtures/dir1/subdir/file3.txt
175
+ - spec/fixtures/dir2/file1.txt
176
+ - spec/fixtures/dir2/file2.txt
177
+ - spec/fixtures/dir2/subdir/file3.txt
178
+ - spec/fixtures/dir3/file1.txt
179
+ - spec/fixtures/dir3/subdir/file1.txt
180
+ - spec/fixtures/tmp/dummy.txt
181
+ - spec/spec_helper.rb
data/bin/dircat-build.rb DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $DIRCAT_HOME = File.expand_path( File.join( File.dirname( __FILE__), "..") )
4
- $:.unshift( File.join($DIRCAT_HOME, "lib" ) )
5
-
6
- require 'dircat/cli/dircat_build.rb'
7
-
8
- DirCatBuild.run
data/bin/dircat-cfr.rb DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $DIRCAT_HOME = File.expand_path( File.join( File.dirname( __FILE__), "..") )
4
- $:.unshift( File.join($DIRCAT_HOME, "lib" ) )
5
-
6
- require 'dircat/cli/dircat_cfr.rb'
7
-
8
- DirCatCfr.run
data/bin/dircat-cmp.rb DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $DIRCAT_HOME = File.expand_path( File.join( File.dirname( __FILE__), "..") )
4
- $:.unshift( File.join($DIRCAT_HOME, "lib" ) )
5
-
6
- require 'dircat/cli/dircat_cmp.rb'
7
-
8
- DirCatCmp.run
data/bin/dircat-query.rb DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $DIRCAT_HOME = File.expand_path( File.join( File.dirname( __FILE__), "..") )
4
- $:.unshift( File.join($DIRCAT_HOME, "lib" ) )
5
-
6
- require 'dircat/cli/dircat_query.rb'
7
-
8
- DirCatQuery.run
@@ -1,69 +0,0 @@
1
- # stdlib
2
- require 'optparse'
3
-
4
- # dircat
5
- require 'dircat/dircat.rb'
6
-
7
- #
8
- #
9
- #
10
- class DirCatCfr
11
-
12
- def self.run
13
- self.new.parse_args( ARGV )
14
- end
15
-
16
- def parse_args( args )
17
- options = {}
18
- opts = OptionParser.new
19
- opts.banner =
20
- "Usage: dircat_cfr.rb [options] <filedircat1> <filedircat2>\n\n" +
21
- "fa la differenza fra il primo catalog e il secondo\n" +
22
- "<filedircat1> - <filedircat2>\n" +
23
- "e stampa sull'output con un formato\n"
24
-
25
- opts.on("-h", "--help", "Print this message") do
26
- puts opts
27
- return
28
- end
29
-
30
- opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
31
- options[:verbose] = v
32
- end
33
-
34
- opts.on("-f FORMAT", "--fmt FORMAT", "formato") do |v|
35
- options[:fmt] = v
36
- end
37
- rest = opts.parse( args )
38
-
39
- # p options
40
- # p ARGV
41
-
42
- if rest.length < 2
43
- puts "inserire il nome di due cataloghi da confrontare"
44
- puts "dircat_cfr -h to print help"
45
- exit
46
- end
47
-
48
- cat_filename1 = rest[0]
49
- cat_filename2 = rest[1]
50
-
51
- puts "build first set"
52
- s1 = DirCat.loadfromfile(cat_filename1)
53
-
54
- puts "build second set"
55
- s2 = DirCat.loadfromfile(cat_filename2)
56
-
57
- puts "build difference"
58
- s3 = s1 - s2
59
-
60
- case options[:fmt]
61
- when "simple"
62
- s3.fmt_simple
63
- when "ruby"
64
- s3.fmt_ruby( "." )
65
- else
66
- s3.fmt_simple
67
- end
68
- end
69
- end
@@ -1,65 +0,0 @@
1
- require 'optparse'
2
- require 'dircat/dircat.rb'
3
-
4
- #
5
- # MAIN
6
- #
7
-
8
- class DirCatCmp
9
-
10
- def self.run
11
- self.new.parse_args( ARGV )
12
- end
13
-
14
- def parse_args(args)
15
- options = {}
16
- opts = OptionParser.new
17
- opts.banner = "Usage: example.rb [options]"
18
-
19
- opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
20
- options[:verbose] = v
21
- end
22
- rest = opts.parse( args )
23
-
24
- # p options
25
- # p ARGV
26
-
27
- if rest.length < 1
28
- puts "inserire il nome di due directory da confrontare"
29
- return
30
- end
31
-
32
- dirname1 = rest[0]
33
- dirname2 = rest[1] if rest[1]
34
-
35
- if dirname2
36
- twoset( dirname1, dirname2 )
37
- return
38
- end
39
-
40
- if dirname1
41
- oneset( dirname1 )
42
- return
43
- end
44
- end
45
-
46
- def oneset( dirname )
47
- puts "build set"
48
- s = DirCat.loadfromdir(dirname)
49
- # s.pr
50
- puts s.to_yaml
51
- end
52
-
53
- def twoset( dirname1, dirname2 )
54
- puts "build first set"
55
- s1 = DirCat.loadfromdir(dirname1)
56
-
57
- puts "build second set"
58
- s2 = DirCat.loadfromdir(dirname2)
59
-
60
- puts "build difference"
61
- s3 = s1 - s2
62
-
63
- s3.pr
64
- end
65
- end
data/lib/dircat/dircat.rb DELETED
@@ -1,263 +0,0 @@
1
- # stdlib
2
- require 'fileutils'
3
- require 'tmpdir'
4
- require 'yaml'
5
- require 'ostruct'
6
-
7
- # dircat
8
- require 'rubygems'
9
- require 'gf_utility/md5'
10
- require 'gf_utility/numeric'
11
-
12
- #
13
- # GLOBAL VAR
14
- #
15
-
16
- $VERBOSE_LEVEL = 0
17
-
18
- class EntrySer < OpenStruct
19
- end
20
-
21
- #
22
- # Entry
23
- #
24
- class Entry
25
-
26
- attr_reader :md5
27
- attr_reader :name
28
- attr_reader :path
29
- attr_reader :size
30
- attr_reader :mtime
31
-
32
- def from_filename( filename )
33
- # puts "Entry::initialize #f"
34
- if $VERBOSE_LEVEL > 0
35
- cr = "\r"
36
- clear = "\e[K"
37
- print "#{cr}#{filename}#{clear}"
38
- end
39
- @name = File.basename(filename)
40
- @path = File.dirname(filename)
41
- stat = File.stat(filename)
42
- @size = stat.size
43
- @mtime = stat.mtime
44
- # self.md5 = Digest::MD5.hexdigest(File.read( f ))
45
- @md5 = MD5.file( filename ).hexdigest
46
- self
47
- end
48
-
49
- def from_ser( entry_ser )
50
- @md5 = entry_ser.md5
51
- @name = entry_ser.name
52
- @path = entry_ser.path
53
- @size = entry_ser.size
54
- @mtime = entry_ser.mtime
55
- self
56
- end
57
-
58
- def to_ser
59
- entry_ser = EntrySer.new
60
- entry_ser.md5 = @md5
61
- entry_ser.name = @name
62
- entry_ser.path = @path
63
- entry_ser.size = @size
64
- entry_ser.mtime = @mtime
65
- entry_ser
66
- end
67
-
68
- def to_s
69
- @md5 + " " + @name + "\t " + @path + "\n"
70
- end
71
-
72
- end
73
-
74
- class DirCatSer < OpenStruct
75
- end
76
-
77
-
78
- class DirCatException < RuntimeError
79
-
80
- end
81
-
82
- #
83
- # DirCat
84
- #
85
- class DirCat
86
-
87
- attr_reader :dirname
88
- # data di creazione
89
- attr_reader :ctime
90
- attr_writer :ctime
91
- # attr_reader :entries
92
-
93
- def from_dirname( dirname )
94
- # puts "#{self.class.name}#initialize"
95
- @dirname = dirname
96
- @ctime = DateTime.now
97
- @entries = Array.new
98
- @md5ToEntries = Hash.new
99
- self
100
- end
101
-
102
- def from_ser( dircat_ser )
103
- @dirname = dircat_ser.dirname
104
- @ctime = dircat_ser.ctime
105
- @entries = Array.new
106
- @md5ToEntries = Hash.new
107
- dircat_ser.entries.each{ |entry_ser|
108
- add_entry( Entry.new.from_ser( entry_ser ) )
109
- }
110
- self
111
- end
112
-
113
- def to_ser
114
- dircat_ser = DirCatSer.new
115
- dircat_ser.version = 0.1
116
- dircat_ser.dirname = @dirname
117
- dircat_ser.ctime = @ctime
118
- dircat_ser.entries = []
119
- @entries.each { |entry|
120
- dircat_ser.entries << entry.to_ser
121
- }
122
- dircat_ser
123
- end
124
-
125
- def self.loadfromdir( dirname )
126
- # puts "#{self.class.name}#loadfromdir( #{dirname} )"
127
- if not File.directory?( dirname )
128
- raise "'#{dirname}' non e' una directory o non esiste"
129
- end
130
-
131
- s = self.new
132
- s.from_dirname( File.expand_path( dirname ) )
133
- s._loadfromdir
134
- end
135
-
136
- def _loadfromdir()
137
- old_dirname = Dir.pwd
138
- Dir.chdir( @dirname )
139
- Dir["**/*"].each { |f|
140
- # puts "#{self.class.name}#loadfromdir #{f}"
141
- next if File.directory?( f )
142
- add_entry( Entry.new.from_filename( f ) )
143
- }
144
- if $VERBOSE_LEVEL > 0
145
- print "\n"
146
- end
147
- Dir.chdir( old_dirname )
148
- self
149
- end
150
-
151
- def self.loadfromfile( filename )
152
- if not File.exist?( filename )
153
- raise DirCatException.new, "'#{filename}' not exists"
154
- end
155
- dircat_ser = YAML::load( File.open( filename ) )
156
- DirCat.new.from_ser( dircat_ser )
157
- end
158
-
159
- def savetofile( file )
160
- if file.kind_of?(String)
161
- begin
162
- File.open( file, "w" ) do |f|
163
- f.puts to_ser.to_yaml
164
- end
165
- rescue Errno::ENOENT
166
- raise DirCatException.new, "DirCat: cannot write into '#{file}'", caller
167
- end
168
- else
169
- file.puts to_ser.to_yaml
170
- end
171
- end
172
-
173
- def size
174
- @entries.size
175
- end
176
-
177
- def bytes
178
- @entries.inject(0) {|sum, entry| sum + entry.size }
179
- end
180
-
181
- def report
182
- dups = duplicates
183
- s = "Directory base: #@dirname\n" +
184
- "Nr. file #{size}\n" +
185
- "Bytes #{bytes.with_separator}"
186
- if duplicates.size > 0
187
- s+= "\n duplicates #{dups.size}"
188
- end
189
- s
190
- end
191
-
192
- def add_entry( e )
193
- @entries.push( e )
194
- if @md5ToEntries.has_key?( e.md5 )
195
- # puts "Entry duplicata!!!"
196
- @md5ToEntries[ e.md5 ].push( e )
197
- else
198
- @md5ToEntries[ e.md5 ] = [ e ]
199
- end
200
- end
201
-
202
- def contains( e )
203
- @md5ToEntries.has_key?( e.md5 )
204
- end
205
-
206
- def -(s)
207
- result = DirCat.new.from_dirname( @dirname )
208
- @entries.each { |e|
209
- result.add_entry(e) unless s.contains(e)
210
- }
211
- result
212
- end
213
-
214
- def duplicates
215
- list = []
216
- @md5ToEntries.each_value do |ee|
217
- next if ee.size < 2
218
- list.push( ee )
219
- end
220
- list
221
- end
222
-
223
- def fmt_simple
224
- @entries.each { |e|
225
- print e.to_s
226
- }
227
- end
228
-
229
- def fmt_ruby( dst )
230
- puts "require 'fileutils'"
231
- @entries.each { |entry|
232
- src = File.join( @dirname, entry.path, entry.name );
233
- puts "FileUtils.cp( \"#{src}\", \"#{dst}\" )"
234
- }
235
- end
236
-
237
- def list_dup
238
- r = ""
239
- duplicates.flatten.each { |e|
240
- r += e.to_s + "\n"
241
- }
242
- r
243
- end
244
-
245
- def script_dup
246
- r = "require 'fileutils'\n"
247
- duplicates.each { |entries|
248
- flg_first = true
249
- r += "\n"
250
- entries.each{ |entry|
251
- src = File.join( @dirname, entry.path, entry.name );
252
- if flg_first
253
- flg_first = false
254
- r += "# FileUtils.mv( \"#{src}\", \"#{Dir.tmpdir}\" )\n"
255
- else
256
- r += "FileUtils.mv( \"#{src}\", \"#{Dir.tmpdir}\" )\n"
257
- end
258
- }
259
- }
260
- r
261
- end
262
-
263
- end