melon 0.4.0 → 0.5.0

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/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ === 0.5.0 2011-02-09
2
+ * Major improvements:
3
+ * Added --recursive option to 'check' subcommand
4
+ * Added --update option to 'add' subcommand
5
+
1
6
  === 0.4.0 2011-01-31
2
7
  * Major improvements:
3
8
  * Updated hashing strategy to be more robust against collisions
data/features/add.feature CHANGED
@@ -60,3 +60,13 @@ Feature: Adding files to the database
60
60
  And the output should contain "dir/test2"
61
61
  And the output should contain "dir/test/test3"
62
62
  And the output should contain "test_file"
63
+
64
+ Scenario: Adding as an update
65
+ Given a file named "test2" with:
66
+ """
67
+ Also a test file
68
+ """
69
+ And I run "melon -d test.db add -q test_file"
70
+ When I run "melon -d test.db add -u test_file test2"
71
+ Then the output should contain "test2"
72
+ And the output should not contain "test_file"
@@ -25,3 +25,16 @@ Feature: Check
25
25
  """
26
26
  melon: no such file: nonexistant_file
27
27
  """
28
+
29
+ Scenario: Checking recursively
30
+ Given a file named "dir/test2" with:
31
+ """
32
+ Another test file
33
+ """
34
+ And a file named "dir/sub/test3" with:
35
+ """
36
+ Nothing to see here, folks
37
+ """
38
+ When I run "melon -d test.db check -r dir"
39
+ Then the output should contain "dir/test2"
40
+ And the output should contain "dir/sub/test3"
@@ -21,17 +21,21 @@ module Melon
21
21
 
22
22
 
23
23
  # 1.0 list
24
- # TODO: needs a 'verify' command to check integrity of database
25
- # both internal 2-hash consistency (consistency) and db<->filesystem
26
- # matching up (integrity) [file exists, hashes match]
24
+ # TODO: check needs -r
27
25
  # TODO: needs a 'remove' command, or some way to deal with deletes/renames
28
26
  # remove: given a tracked file, removes it
29
27
  # given an untracked file, it hashes it
30
- # and removes it by hash
28
+ # and attempts to remove it by hash
31
29
  # TODO: list needs --paths(only) and --hashes(only)
32
- # --count
33
- # TODO: check needs -r
34
30
  # TODO: update- a function of add, ignore files that are already present in the db
35
31
  # TODO: handle moving a file somehow -- hopefully a function of update
32
+ # could be:
33
+ # 1. move file
34
+ # 2. add new path to db
35
+ # 3. some sort of cull cmd that removes untracked paths
36
+ # post-1.0
37
+ # TODO: needs a 'verify' command to check integrity of database
38
+ # both internal 2-hash consistency (consistency) and db<->filesystem
39
+ # matching up (integrity) [file exists, hashes match]
36
40
  end
37
41
  end
@@ -16,6 +16,11 @@ module Melon
16
16
  parser.on("-r", "--recursive", "Recursively add directory contents") do
17
17
  options.recursive = true
18
18
  end
19
+
20
+ parser.on("-u" "--update",
21
+ "Skip paths already present in the database") do
22
+ options.update = true
23
+ end
19
24
  end
20
25
 
21
26
  def run
@@ -34,6 +39,7 @@ module Melon
34
39
  end
35
40
 
36
41
  if options.database[:by_path][filename]
42
+ next if options.update
37
43
  error "path already present in database: #{arg}"
38
44
  end
39
45
 
@@ -18,11 +18,25 @@ EOS
18
18
  "file [file [file ...]"
19
19
  end
20
20
 
21
+ def parser_options(parser)
22
+ parser.on("-r", "--recursive", "Recursively check directory contents") do
23
+ options.recursive = true
24
+ end
25
+ end
26
+
21
27
  def run
22
28
  parse_options!
23
29
 
30
+ if options.recursive
31
+ self.args = recursively_expand(args)
32
+ end
33
+
24
34
  options.database.transaction do
25
35
  args.each do |filename|
36
+ if File.directory?(filename)
37
+ error "argument is a directory: #{arg}"
38
+ end
39
+
26
40
  hash = Hasher.digest(filename)
27
41
  unless options.database[:by_hash][hash]
28
42
  puts File.expand_path(filename)
data/lib/melon/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Melon
2
2
  def self.version
3
- "0.4.0"
3
+ "0.5.0"
4
4
  end
5
5
 
6
6
  def self.version_string
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: melon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 4
8
+ - 5
9
9
  - 0
10
- version: 0.4.0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew Roberts
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-31 00:00:00 -05:00
18
+ date: 2011-02-09 00:00:00 -05:00
19
19
  default_executable: melon
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency