epdiff 1.0.3 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a04e2cdb0bb85d84195582a0e4791b9d1ed2338312829d67c0f477cfb156dea
4
- data.tar.gz: 305b919a6d3612489581c05fbe41fcc18e646bbdff38dac06fbf99ff002d9a09
3
+ metadata.gz: eafa093559fc567ce2560dbfd67aa6f9b712374167063319a0270002c1b0fcd7
4
+ data.tar.gz: 0a83e2294ad9e7058f9e386c16150141357596065455a08918d8d534cde40f3e
5
5
  SHA512:
6
- metadata.gz: a3c12f092c348f65d384e87ad32d4b757760255041c7e87751c0a8c39e030e3024f3cca8a5077be97d3e6f89d891d3a7edf2bae4767668bf57a506611231c0ac
7
- data.tar.gz: 2d3b836de8a987bf8da2fb3d6e3d25d3258fa846d8bb2e2a031dafdf3630ef0f5df75826a85e86d0bb74056d95890c8efcebca931ec355255510faaf2a3d94d0
6
+ metadata.gz: 49e7e7a25ae0ba32eb883f7e97b5d21ebffbd254c28ccee7527026be7ba68cf59a31e0b974acd4d75e10a465cbe55e17fae63a71e58129602f7f802c9486a4ce
7
+ data.tar.gz: 487381af5949d9f08889dc2a5f09c0974f277113368fd72aa2dc245bef4cc894583ce13842e0fe28773c055fe08cc42f6f4b0baa0e70ba7ad68dba915f8d3615
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Masayoshi Takahashi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,24 @@
1
+ # epdiff
2
+
3
+ `epdiff` is a CLI tool to show diff of EPUB files.
4
+
5
+ ## usage
6
+
7
+ $ epdiff <file1> <file2>
8
+
9
+ 'file1' and 'file2' are EPUB files.
10
+
11
+
12
+ ## Note on Patches/Pull Requests
13
+
14
+ * Fork the project.
15
+ * Make your feature addition or bug fix.
16
+ * Add tests for it. This is important so I don't break it in a
17
+ future version unintentionally.
18
+ * Commit, do not mess with rakefile, version, or history.
19
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
20
+ * Send me a pull request. Bonus points for topic branches.
21
+
22
+ ## Copyright
23
+
24
+ Copyright (c) 2010 Masayoshi Takahashi. See LICENSE for details.
data/bin/epdiff CHANGED
@@ -1,2 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
1
3
  require 'epdiff'
2
4
  Epdiff.execute(*ARGV)
@@ -16,4 +16,6 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  s.require_paths = ["lib"]
18
18
  s.add_runtime_dependency "rubyzip", "~> 2.3.0"
19
+ s.add_runtime_dependency "pastel"
20
+ s.add_runtime_dependency "tty-file"
19
21
  end
@@ -3,30 +3,89 @@ require 'optparse'
3
3
  require 'tmpdir'
4
4
  require 'fileutils'
5
5
  require 'zip'
6
+ require 'pastel'
7
+ require 'tty/file'
6
8
 
7
- module Epdiff
8
- extend self
9
+
10
+ class Epdiff
11
+ TEXT_EXT = %w(xhtml html xml opf css txt)
12
+
13
+ def self.execute(*args)
14
+ new.execute(*args)
15
+ end
16
+
17
+ def initialize
18
+ @pastel = Pastel.new(enabled: true)
19
+ @green = @pastel.green.detach
20
+ @red = @pastel.red.detach
21
+ @cyan = @pastel.cyan.detach
22
+ end
9
23
 
10
24
  def unzip(filename, dir)
11
25
  Zip::InputStream.open(filename) do |zio|
12
26
  while entry = zio.get_next_entry
13
- entry_filename = File.join(dir, entry.name)
14
- if entry.name_is_directory?
15
- FileUtils.mkdir_p File.dirname(entry_filename)
16
- elsif entry.file?
27
+ if entry.file?
28
+ entry_filename = File.join(dir, entry.name)
17
29
  FileUtils.mkdir_p File.dirname(entry_filename)
18
- File.open(entry_filename, "wb") do |f|
19
- f.write zio.read
30
+ File.binwrite(entry_filename, zio.read)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ def show_diff(file1, file2, work_dir)
37
+ Dir.chdir(work_dir) do
38
+ files1 = Dir.glob("file1/**/*")
39
+ files2 = Dir.glob("file2/**/*")
40
+ files1_s = files1.map{|d| d.sub(%r{^file1/}, '')}
41
+ files2_s = files2.map{|d| d.sub(%r{^file2/}, '')}
42
+ files_common = files1_s & files2_s
43
+ files_common.each do |path|
44
+ if File.file?("file1/#{path}")
45
+ if text_file?("file1/#{path}")
46
+ text_diff(path, "file1/#{path}", "file2/#{path}")
47
+ else
48
+ binary_diff(path, "file1/#{path}", "file2/#{path}")
20
49
  end
21
50
  end
22
51
  end
52
+ (files1_s - files2_s).each do |diff1|
53
+ print @red.call("DIFF: #{diff1} only exists in 1st.\n")
54
+ end
55
+ (files2_s - files1_s).each do |diff2|
56
+ print @green.call("DIFF: #{diff2} only exists in 2nd.\n")
57
+ end
58
+ end
59
+ end
60
+
61
+ def text_file?(path)
62
+ extname = File.extname(path).sub(/\A\./, '')
63
+ if TEXT_EXT.include?(extname)
64
+ extname
65
+ else
66
+ nil
67
+ end
68
+ end
69
+
70
+ def text_diff(_path, path1, path2)
71
+ diff = TTY::File.diff(path1, path2, verbose: false)
72
+ if diff != "No differences found\n"
73
+ print diff
74
+ end
75
+ end
76
+
77
+ def binary_diff(path, path1, path2)
78
+ content1 = File.binread(path1)
79
+ content2 = File.binread(path2)
80
+ if content1 != content2
81
+ print @cyan.call("DIFF: #{path} has some differences.\n")
23
82
  end
24
83
  end
25
84
 
26
85
  def execute(*args)
27
86
 
28
- tmpdir = Dir.mktmpdir
29
- diff_path = "diff"
87
+ tmpdir = work_dir = nil
88
+ diff_path = nil
30
89
  unzip_path = nil
31
90
 
32
91
  opts = OptionParser.new do |opts|
@@ -65,25 +124,35 @@ module Epdiff
65
124
  exit
66
125
  end
67
126
 
127
+ work_dir = tmpdir || Dir.mktmpdir
128
+
68
129
  file1, file2 = *args
69
- FileUtils.mkdir_p(tmpdir+"/file1")
70
- FileUtils.mkdir_p(tmpdir+"/file2")
130
+ FileUtils.mkdir_p(work_dir+"/file1")
131
+ FileUtils.mkdir_p(work_dir+"/file2")
71
132
 
72
133
  if unzip_path
73
- %x("#{unzip_path}" "#{file1}" -d "#{tmpdir}/file1")
74
- %x("#{unzip_path}" "#{file2}" -d "#{tmpdir}/file2")
134
+ %x("#{unzip_path}" "#{file1}" -d "#{work_dir}/file1")
135
+ %x("#{unzip_path}" "#{file2}" -d "#{work_dir}/file2")
75
136
  else
76
- unzip(file1, "#{tmpdir}/file1")
77
- unzip(file2, "#{tmpdir}/file2")
137
+ unzip(file1, "#{work_dir}/file1")
138
+ unzip(file2, "#{work_dir}/file2")
78
139
  end
79
140
 
80
- IO.popen("'#{diff_path}' -r -u '#{tmpdir}/file1' '#{tmpdir}/file2'") do |io|
81
- print io.read.gsub(/#{Regexp.escape(tmpdir)}/, "")
141
+ if diff_path
142
+ IO.popen("'#{diff_path}' -r -u '#{work_dir}/file1' '#{work_dir}/file2'") do |io|
143
+ print io.read.gsub(/#{Regexp.escape(work_dir)}/, "")
144
+ end
145
+ else
146
+ show_diff(file1, file2, work_dir)
82
147
  end
83
148
 
84
149
  rescue => e
85
150
  warn e
86
151
  puts opts
152
+ ensure
153
+ if work_dir && !tmpdir
154
+ FileUtils.rm_rf(work_dir)
155
+ end
87
156
  end
88
157
  end
89
158
 
@@ -1,3 +1,3 @@
1
- module Epdiff
2
- VERSION = "1.0.3"
1
+ class Epdiff
2
+ VERSION = "2.0.0.rc1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epdiff
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - takahashim
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-07 00:00:00.000000000 Z
11
+ date: 2021-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.3.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: pastel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-file
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  description: diff command for EPUB files.
28
56
  email:
29
57
  - maki@rubycolor.org
@@ -34,6 +62,8 @@ extra_rdoc_files: []
34
62
  files:
35
63
  - ".gitignore"
36
64
  - Gemfile
65
+ - LICENSE
66
+ - README.md
37
67
  - Rakefile
38
68
  - bin/epdiff
39
69
  - epdiff.gemspec
@@ -53,9 +83,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
83
  version: '0'
54
84
  required_rubygems_version: !ruby/object:Gem::Requirement
55
85
  requirements:
56
- - - ">="
86
+ - - ">"
57
87
  - !ruby/object:Gem::Version
58
- version: '0'
88
+ version: 1.3.1
59
89
  requirements: []
60
90
  rubygems_version: 3.1.2
61
91
  signing_key: