checksummer 0.2.0 → 0.2.1

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/checksummer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{checksummer}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tobias Schwab"]
12
- s.date = %q{2011-03-21}
12
+ s.date = %q{2011-04-04}
13
13
  s.default_executable = %q{checksummer}
14
14
  s.description = %q{Replace files with links to md5 files}
15
15
  s.email = %q{tobias.schwab@dynport.de}
@@ -78,3 +78,18 @@ Feature: Checksum
78
78
  | symlink | path | content |
79
79
  | src/file10.txt | dst/a/9/e/3/a9e3737bb4cf960ff521c4ad4c8275e7 | file 10 |
80
80
  | src/file20.txt | dst/0/6/7/f/067f81212cf0fb2e982bd628a8606f97 | file 20 |
81
+
82
+ Scenario: Checksum single files
83
+ Given I clear tmp
84
+ And the following files exists:
85
+ | path | content |
86
+ | src/file10.txt | file 10 |
87
+ | src/file11.txt | file 11 |
88
+ | src/file20.txt | file 20 |
89
+ | src/file21.txt | file 21 |
90
+ And the directory "dst" exists
91
+ When I call "checksummer tmp/src/file11.txt tmp/dst"
92
+ Then I should see 1 files in "tmp/dst"
93
+ Then I should see the following files
94
+ | symlink | path | content |
95
+ | src/file11.txt | dst/7/1/5/0/715081268e5e053a7e89daf6c155244a | file 11 |
data/lib/checksummer.rb CHANGED
@@ -8,6 +8,10 @@ class Checksummer
8
8
  end
9
9
 
10
10
  def self.run_for_args(args)
11
+ if args.include?("--version")
12
+ puts File.read(File.expand_path("../VERSION", File.dirname(__FILE__)))
13
+ return
14
+ end
11
15
  directory, checksum_to = args[0,2]
12
16
  sleep = 0.1
13
17
  if idx = args.index("--sleep")
@@ -15,14 +19,18 @@ class Checksummer
15
19
  sleep = args.delete_at(idx).to_i / 1000.0
16
20
  end
17
21
  if directory && checksum_to && File.directory?(checksum_to)
18
- started_at = Time.now
19
- lines = directory == "--stdin" ? $stdin.readlines : find(directory, args[2..-1].join(" "))
20
- total = lines.count
21
- lines.each_with_index do |line, index|
22
- extra = { :index => index + 1, :total => lines.count, :started_at => started_at.iso8601 }
23
- puts ChecksummerFile.from_line(line).checksum_to!(checksum_to).merge(extra).to_json
24
- $stdout.flush
25
- sleep sleep if !Range.new(0,7).include?(Time.now.hour)
22
+ if File.file?(directory)
23
+ puts ChecksummerFile.from_line(directory).checksum_to!(checksum_to).to_json
24
+ else
25
+ started_at = Time.now
26
+ lines = directory == "--stdin" ? $stdin.readlines : find(directory, args[2..-1].join(" "))
27
+ total = lines.count
28
+ lines.each_with_index do |line, index|
29
+ extra = { :index => index + 1, :total => lines.count, :started_at => started_at.iso8601 }
30
+ puts ChecksummerFile.from_line(line).checksum_to!(checksum_to).merge(extra).to_json
31
+ $stdout.flush
32
+ sleep sleep if !Range.new(0,7).include?(Time.now.hour)
33
+ end
26
34
  end
27
35
  return true
28
36
  end
@@ -62,6 +62,7 @@ class ChecksummerFile
62
62
  FileUtils.touch(path, :mtime => mtime)
63
63
  else
64
64
  status[:status] = :was_symlink
65
+ status.merge!(:status => :was_symlink, :realpath => File.realpath(path))
65
66
  end
66
67
  status
67
68
  end
@@ -164,6 +164,7 @@ describe ChecksummerFile do
164
164
  describe "with the file being a symlink" do
165
165
  before(:each) do
166
166
  File.stub(:symlink?).with("/some/text.csv").and_return true
167
+ File.stub!(:realpath).and_return "/some/real/path"
167
168
  end
168
169
 
169
170
  it "does not copy the file when already exists" do
@@ -181,6 +182,15 @@ describe ChecksummerFile do
181
182
  file.checksum_to!("/tmp/data")
182
183
  end
183
184
 
185
+ it "calls File.realpath with path" do
186
+ File.should_receive(:realpath).with("/some/text.csv").and_return "/real_path"
187
+ file.checksum_to!("/tmp/data")
188
+ end
189
+
190
+ it "sets the realpath" do
191
+ file.checksum_to!("/tmp/data")[:realpath].should == "/some/real/path"
192
+ end
193
+
184
194
  it "returns :exists" do
185
195
  file.checksum_to!("/tmp/data")[:status].should == :was_symlink
186
196
  end
@@ -47,6 +47,11 @@ describe "Checksummer" do
47
47
  Checksummer.stub!(:puts)
48
48
  end
49
49
 
50
+ it "prints the version when --version given" do
51
+ Checksummer.should_receive(:puts).with(/\d+\.\d+.\d+/)
52
+ Checksummer.run_for_args("--version")
53
+ end
54
+
50
55
  it "prints usage when no checksum_to found" do
51
56
  Checksummer.should_receive(:puts).with Checksummer.usage
52
57
  Checksummer.run_for_args([])
@@ -133,6 +138,36 @@ describe "Checksummer" do
133
138
  Checksummer.run_for_args(["/tmp", "/tmp"])
134
139
  end
135
140
  end
141
+
142
+ describe "with a direct file given" do
143
+ let(:checksum_file) { double("checksummer_file", :checksum_to! => true)}
144
+
145
+ before(:each) do
146
+ File.stub!(:file?).and_return true
147
+ ChecksummerFile.stub!(:from_line).and_return(checksum_file)
148
+ end
149
+
150
+ it "calls File.file? on src" do
151
+ File.should_receive(:file?).with("/some/path").and_return true
152
+ Checksummer.run_for_args(["/some/path", "/tmp"])
153
+ end
154
+
155
+ it "calls ChecksummerFile.from_line with file" do
156
+ ChecksummerFile.should_receive(:from_line).with("/some/path").and_return(checksum_file)
157
+ Checksummer.run_for_args(["/some/path", "/tmp"])
158
+ end
159
+
160
+ it "calls checksum_to! with dst" do
161
+ checksum_file.should_receive(:checksum_to!).with("/tmp")
162
+ Checksummer.run_for_args(["/some/path", "/tmp"])
163
+ end
164
+
165
+ it "puts result of checksum_to!" do
166
+ checksum_file.stub!(:checksum_to!).and_return(:some => "result")
167
+ Checksummer.should_receive(:puts).with("{\"some\":\"result\"}")
168
+ Checksummer.run_for_args(["/some/path", "/tmp"])
169
+ end
170
+ end
136
171
  end
137
172
 
138
173
  describe "#integration" do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tobias Schwab
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-03-21 00:00:00 +01:00
17
+ date: 2011-04-04 00:00:00 +02:00
18
18
  default_executable: checksummer
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -184,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
186
186
  - !ruby/object:Gem::Version
187
- hash: 555043968334052607
187
+ hash: 1489982257138281223
188
188
  segments:
189
189
  - 0
190
190
  version: "0"