riffdiff 0.9.8 → 0.9.22
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +1 -4
- data/README.md +18 -6
- data/Rakefile +6 -3
- data/lib/refiner.rb +29 -1
- data/lib/version.rb +12 -3
- data/riffdiff.gemspec +11 -2
- data/spec/refiner_spec.rb +32 -0
- data/spec/version_spec.rb +1 -1
- metadata +47 -11
- data/.bundle/config +0 -2
- data/Gemfile.lock +0 -26
- data/bin/bundler +0 -16
- data/bin/htmldiff +0 -16
- data/bin/ldiff +0 -16
- data/bin/rspec +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b5b2351ff935d40977928f7b2801b10d671aae4
|
4
|
+
data.tar.gz: 04dedc13f58a3c7a47f3c0e413aa5303f0c17e4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6eb0d6cf89082c982896513fc25531f4cbcced1c07c8d61a7aead5bb66a3d60b50662ee0f7e9c2a92425ca2a72e70cf9db1e47935cc75be646349606e7ff66ed
|
7
|
+
data.tar.gz: 560d7da69123f98f074164d0ca1981dd0cba57c7047f93df24da26997f3d4a07f3497be0ebac09dc0c4e7750cc4a12dd32ccff55ea8f954395725b735a756ed2
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -23,9 +23,9 @@ Optionally followed by...
|
|
23
23
|
... to make git show refined diffs by default.
|
24
24
|
|
25
25
|
# TODO
|
26
|
-
*
|
27
|
-
|
28
|
-
|
26
|
+
* When highlighting an added comma at the end of a line, followed by some added
|
27
|
+
lines, remove the leading + from the first line and don't color it. We should
|
28
|
+
still show the comma in reverse video though.
|
29
29
|
* Think about highlighting whitespace errors like Git does
|
30
30
|
* Think about how to visualize an added line break together with some
|
31
31
|
indentation on the following line.
|
@@ -33,9 +33,6 @@ indentation on the following line.
|
|
33
33
|
the REVERSE vs reversed() lines highlighted.
|
34
34
|
* Do "git show 2ac5b06" and think about what rule we should use to
|
35
35
|
highlight all of both "some" and "one or".
|
36
|
-
* Do "git show -b 77c8f77" and think about what rule we should use to
|
37
|
-
highlight the leading spaces of the "+ refined" and "+ page" lines
|
38
|
-
at the end of the file.
|
39
36
|
* Make sure we highlight the output of "git log -p" properly. If we
|
40
37
|
get something unexpected, maybe just go back to :initial?
|
41
38
|
* Make sure we highlight the output of "git show --stat" properly
|
@@ -108,3 +105,18 @@ optionally deploy as well.
|
|
108
105
|
* Make a first public release
|
109
106
|
* Running from a git clone should work even if Riff is installed
|
110
107
|
globally on the system.
|
108
|
+
* Do `git show 0f5dd84` and think about how to visualize one line
|
109
|
+
changing to itself with a comma at the end plus a bunch of entirely
|
110
|
+
new lines. Think of a constant array getting one or more extra
|
111
|
+
members.
|
112
|
+
* Do "git show -b 77c8f77" and think about what rule we should use to
|
113
|
+
highlight the leading spaces of the "+ refined" and "+ page" lines
|
114
|
+
at the end of the file.
|
115
|
+
* Don't use --dirty for the gemspec version
|
116
|
+
* Rakefile: Refuse to package dirty sources
|
117
|
+
* Remove .bundler/config from git
|
118
|
+
* Remove bundler binstubs from Git
|
119
|
+
* Make sure we can:
|
120
|
+
* test dirty sources
|
121
|
+
* not package dirty sources
|
122
|
+
* package clean sources, dependencies not verified
|
data/Rakefile
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
require 'rspec/core/rake_task'
|
2
2
|
|
3
|
+
$LOAD_PATH.unshift File.join(__dir__, 'lib')
|
4
|
+
require 'version'
|
5
|
+
|
6
|
+
include Version
|
7
|
+
|
3
8
|
task default: :spec
|
4
9
|
desc 'Run the unit tests (default)'
|
5
10
|
task spec: [:deps]
|
@@ -9,9 +14,7 @@ end
|
|
9
14
|
|
10
15
|
desc 'Create a .gem package'
|
11
16
|
task package: [:spec] do
|
12
|
-
|
13
|
-
fail 'Cannot package when there are uncommitted sources' if
|
14
|
-
git_description.end_with? 'dirty'
|
17
|
+
fail 'Cannot package when there are uncommitted sources' if dirty?
|
15
18
|
|
16
19
|
system('rm -f *.gem ; gem build riffdiff.gemspec') || fail
|
17
20
|
end
|
data/lib/refiner.rb
CHANGED
@@ -62,7 +62,7 @@ class Refiner
|
|
62
62
|
return true
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
65
|
+
def try_highlight(old, new)
|
66
66
|
old_highlights = Set.new
|
67
67
|
new_highlights = Set.new
|
68
68
|
if should_highlight?(old, new)
|
@@ -73,6 +73,34 @@ class Refiner
|
|
73
73
|
censor_highlights(old, new, old_highlights, new_highlights)
|
74
74
|
end
|
75
75
|
|
76
|
+
return old_highlights, new_highlights
|
77
|
+
end
|
78
|
+
|
79
|
+
def try_highlight_initial_lines(old, new)
|
80
|
+
old_line_count = old.lines.count
|
81
|
+
new_line_count = new.lines.count
|
82
|
+
if old_line_count == new_line_count
|
83
|
+
return Set.new, Set.new
|
84
|
+
end
|
85
|
+
|
86
|
+
min_line_count = [old_line_count, new_line_count].min
|
87
|
+
if min_line_count == 0
|
88
|
+
return Set.new, Set.new
|
89
|
+
end
|
90
|
+
|
91
|
+
# Truncate old and new so they have the same number of lines
|
92
|
+
old = old.lines[0..(min_line_count - 1)].join
|
93
|
+
new = new.lines[0..(min_line_count - 1)].join
|
94
|
+
|
95
|
+
return try_highlight(old, new)
|
96
|
+
end
|
97
|
+
|
98
|
+
def initialize(old, new)
|
99
|
+
old_highlights, new_highlights = try_highlight(old, new)
|
100
|
+
if old_highlights.size == 0 && new_highlights.size == 0
|
101
|
+
old_highlights, new_highlights = try_highlight_initial_lines(old, new)
|
102
|
+
end
|
103
|
+
|
76
104
|
@refined_old = DiffString.new('-', RED)
|
77
105
|
old.each_char.with_index do |char, index|
|
78
106
|
@refined_old.add(char, old_highlights.include?(index))
|
data/lib/version.rb
CHANGED
@@ -2,8 +2,9 @@ require 'English'
|
|
2
2
|
|
3
3
|
# Methods for finding out the Riff version
|
4
4
|
module Version
|
5
|
-
def git_version
|
6
|
-
|
5
|
+
def git_version(dirty)
|
6
|
+
dirty_flag = dirty ? '--dirty' : ''
|
7
|
+
version = `cd #{__dir__} ; git describe #{dirty_flag} 2> /dev/null`.chomp
|
7
8
|
if $CHILD_STATUS.success?
|
8
9
|
return version
|
9
10
|
else
|
@@ -31,9 +32,17 @@ module Version
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def version
|
34
|
-
semantic_git_version = semantify_git_version(git_version)
|
35
|
+
semantic_git_version = semantify_git_version(git_version(false))
|
35
36
|
return semantic_git_version unless semantic_git_version.nil?
|
36
37
|
|
37
38
|
return rubygems_version
|
38
39
|
end
|
40
|
+
|
41
|
+
def semantic_version
|
42
|
+
return semantify_git_version(git_version(false))
|
43
|
+
end
|
44
|
+
|
45
|
+
def dirty?
|
46
|
+
return git_version(true).include?('-dirty')
|
47
|
+
end
|
39
48
|
end
|
data/riffdiff.gemspec
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
$LOAD_PATH.unshift File.join(
|
1
|
+
$LOAD_PATH.unshift File.join(__dir__, 'lib')
|
2
2
|
require 'version'
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
extend Version
|
6
6
|
|
7
7
|
s.name = 'riffdiff'
|
8
|
-
s.version =
|
8
|
+
s.version = semantic_version
|
9
9
|
s.summary = 'A diff highlighter showing what parts of lines have changed'
|
10
10
|
s.description = %{== Riff
|
11
11
|
Riff is a wrapper around diff that highlights not only which lines have changed,
|
@@ -33,4 +33,13 @@ refined.
|
|
33
33
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
34
34
|
s.executables = ['riff']
|
35
35
|
s.require_paths = ['lib']
|
36
|
+
|
37
|
+
# Development is done on 2.0, and we're using at least __dir__ which requires
|
38
|
+
# Ruby 2.0.
|
39
|
+
s.required_ruby_version = '~> 2.0'
|
40
|
+
|
41
|
+
s.add_development_dependency 'rspec', '~> 3.0'
|
42
|
+
|
43
|
+
s.add_runtime_dependency 'diff-lcs', '~> 1.2.5'
|
44
|
+
s.add_runtime_dependency 'slop', '~> 4.1.0'
|
36
45
|
end
|
data/spec/refiner_spec.rb
CHANGED
@@ -99,6 +99,38 @@ RSpec.describe Refiner, '#new' do
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
+
context %(with one line turning into many) do
|
103
|
+
refiner = Refiner.new("abcde\n",
|
104
|
+
"abcde,\n" \
|
105
|
+
"fffff,\n" \
|
106
|
+
"ggggg\n")
|
107
|
+
|
108
|
+
it %(highlights the comma on the first line, but not the two extra lines) do
|
109
|
+
expect(refiner.refined_old.to_s).to eq(
|
110
|
+
%(#{RED}-abcde#{RESET}\n))
|
111
|
+
expect(refiner.refined_new.to_s).to eq(
|
112
|
+
%(#{GREEN}+abcde#{reversed(',')}\n) +
|
113
|
+
%(#{GREEN}+fffff,\n) +
|
114
|
+
%(#{GREEN}+ggggg#{RESET}\n))
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context %(with many lines turning into one) do
|
119
|
+
refiner = Refiner.new("abcde,\n" \
|
120
|
+
"fffff,\n" \
|
121
|
+
"ggggg\n",
|
122
|
+
"abcde\n")
|
123
|
+
|
124
|
+
it %(highlights the first removed comma, but not the two removed lines) do
|
125
|
+
expect(refiner.refined_old.to_s).to eq(
|
126
|
+
%(#{RED}-abcde#{reversed(',')}\n) +
|
127
|
+
%(#{RED}-fffff,\n) +
|
128
|
+
%(#{RED}-ggggg#{RESET}\n))
|
129
|
+
expect(refiner.refined_new.to_s).to eq(
|
130
|
+
%(#{GREEN}+abcde#{RESET}\n))
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
102
134
|
context %(with large input) do
|
103
135
|
# A Refiner that fails if trying to collect highlights
|
104
136
|
class NonHighlightingRefiner < Refiner
|
data/spec/version_spec.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riffdiff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Johan Walles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
-
dependencies:
|
11
|
+
date: 2015-06-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: diff-lcs
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.5
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.2.5
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: slop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 4.1.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 4.1.0
|
13
55
|
description: |
|
14
56
|
== Riff
|
15
57
|
Riff is a wrapper around diff that highlights not only which lines have changed,
|
@@ -33,20 +75,14 @@ executables:
|
|
33
75
|
extensions: []
|
34
76
|
extra_rdoc_files: []
|
35
77
|
files:
|
36
|
-
- ".bundle/config"
|
37
78
|
- ".gitignore"
|
38
79
|
- ".rubocop.yml"
|
39
80
|
- Gemfile
|
40
|
-
- Gemfile.lock
|
41
81
|
- LICENSE
|
42
82
|
- README.md
|
43
83
|
- Rakefile
|
44
84
|
- bin/benchmark
|
45
|
-
- bin/bundler
|
46
|
-
- bin/htmldiff
|
47
|
-
- bin/ldiff
|
48
85
|
- bin/riff
|
49
|
-
- bin/rspec
|
50
86
|
- lib/colors.rb
|
51
87
|
- lib/diff_string.rb
|
52
88
|
- lib/options.rb
|
@@ -73,9 +109,9 @@ require_paths:
|
|
73
109
|
- lib
|
74
110
|
required_ruby_version: !ruby/object:Gem::Requirement
|
75
111
|
requirements:
|
76
|
-
- - "
|
112
|
+
- - "~>"
|
77
113
|
- !ruby/object:Gem::Version
|
78
|
-
version: '0'
|
114
|
+
version: '2.0'
|
79
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
116
|
requirements:
|
81
117
|
- - ">="
|
data/.bundle/config
DELETED
data/Gemfile.lock
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: https://rubygems.org/
|
3
|
-
specs:
|
4
|
-
diff-lcs (1.2.5)
|
5
|
-
rspec (3.2.0)
|
6
|
-
rspec-core (~> 3.2.0)
|
7
|
-
rspec-expectations (~> 3.2.0)
|
8
|
-
rspec-mocks (~> 3.2.0)
|
9
|
-
rspec-core (3.2.2)
|
10
|
-
rspec-support (~> 3.2.0)
|
11
|
-
rspec-expectations (3.2.0)
|
12
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
13
|
-
rspec-support (~> 3.2.0)
|
14
|
-
rspec-mocks (3.2.1)
|
15
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
16
|
-
rspec-support (~> 3.2.0)
|
17
|
-
rspec-support (3.2.2)
|
18
|
-
slop (4.1.0)
|
19
|
-
|
20
|
-
PLATFORMS
|
21
|
-
ruby
|
22
|
-
|
23
|
-
DEPENDENCIES
|
24
|
-
diff-lcs (~> 1.2.5)
|
25
|
-
rspec (~> 3.0)
|
26
|
-
slop (~> 4.1.0)
|
data/bin/bundler
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'bundler' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('bundler', 'bundler')
|
data/bin/htmldiff
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'htmldiff' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('diff-lcs', 'htmldiff')
|
data/bin/ldiff
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'ldiff' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('diff-lcs', 'ldiff')
|
data/bin/rspec
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# This file was generated by Bundler.
|
4
|
-
#
|
5
|
-
# The application 'rspec' is installed as part of a gem, and
|
6
|
-
# this file is here to facilitate running it.
|
7
|
-
#
|
8
|
-
|
9
|
-
require 'pathname'
|
10
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
-
Pathname.new(__FILE__).realpath)
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'bundler/setup'
|
15
|
-
|
16
|
-
load Gem.bin_path('rspec-core', 'rspec')
|