wcc 0.0.7 → 0.0.8
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/assets/template.d/mail-body.html.erb +6 -8
- data/bin/wcc-upgrade +2 -0
- data/lib/wcc/diff.rb +55 -28
- data/lib/wcc.rb +1 -1
- metadata +17 -3
@@ -32,21 +32,19 @@
|
|
32
32
|
|
33
33
|
.diff .ins {
|
34
34
|
background: #dfd;
|
35
|
-
/* color: #080;*/
|
36
35
|
}
|
37
36
|
|
38
|
-
.diff .ins .
|
39
|
-
background: #
|
37
|
+
.diff .ins .x {
|
38
|
+
background: #8f8;
|
40
39
|
margin: 0;
|
41
40
|
padding: 0;
|
42
41
|
}
|
43
42
|
|
44
43
|
.diff .del {
|
45
44
|
background: #fdd;
|
46
|
-
/* color: #b00;*/
|
47
45
|
}
|
48
46
|
|
49
|
-
.diff .del .
|
47
|
+
.diff .del .x {
|
50
48
|
background: #faa;
|
51
49
|
margin: 0;
|
52
50
|
padding: 0;
|
@@ -80,11 +78,11 @@
|
|
80
78
|
<% elsif o.status == :range %>
|
81
79
|
<li class="range">@@<%= o.text %></li>
|
82
80
|
<% elsif o.status == :ins %>
|
83
|
-
<li class="ins">+<%= o.html_hilite_text %></li>
|
81
|
+
<li class="ins">+<%= o.html_hilite_text('x') %></li>
|
84
82
|
<% elsif o.status == :del %>
|
85
|
-
<li class="del">-<%= o.html_hilite_text %></li>
|
83
|
+
<li class="del">-<%= o.html_hilite_text('x') %></li>
|
86
84
|
<% else %>
|
87
|
-
<li class="other"><%= o.text
|
85
|
+
<li class="other"><%= o.text == ' ' ? ' ' : o.text %></li>
|
88
86
|
<% end %>
|
89
87
|
<% end %>
|
90
88
|
</ul>
|
data/bin/wcc-upgrade
CHANGED
@@ -18,6 +18,8 @@ def traverse(root, dst_root, path)
|
|
18
18
|
rel = p.relative_path_from(root)
|
19
19
|
src = root + rel
|
20
20
|
dst = dst_root + rel
|
21
|
+
# make sure the dst directory exists
|
22
|
+
FileUtils.mkdir_p dst.dirname
|
21
23
|
if dst.exist?
|
22
24
|
# do compare
|
23
25
|
same = FileUtils.compare_file(src, dst)
|
data/lib/wcc/diff.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
|
2
2
|
module WCC
|
3
|
+
# TODO: Handle tabs/trailing whitespace in output
|
4
|
+
|
3
5
|
class DiffItem
|
4
6
|
attr_accessor :status, :text, :hilite
|
5
7
|
|
6
8
|
def initialize(line)
|
9
|
+
# parse line
|
7
10
|
if line.start_with?('+++')
|
8
11
|
@status = :new
|
9
12
|
@text = line.substring(3)
|
@@ -15,13 +18,14 @@ module WCC
|
|
15
18
|
@text = line.substring(2)
|
16
19
|
elsif line.start_with?('+')
|
17
20
|
@status = :ins
|
18
|
-
@text = line.substring(1)
|
21
|
+
@text = line.substring(1).rstrip
|
19
22
|
elsif line.start_with?('-')
|
20
23
|
@status = :del
|
21
|
-
@text = line.substring(1)
|
24
|
+
@text = line.substring(1).rstrip
|
22
25
|
else
|
23
26
|
@status = :other
|
24
|
-
@text = line
|
27
|
+
@text = line.rstrip
|
28
|
+
@text = ' ' if @text.empty?
|
25
29
|
end
|
26
30
|
@text.gsub!(/\n/, '')
|
27
31
|
@hilite = nil
|
@@ -30,22 +34,22 @@ module WCC
|
|
30
34
|
def html_hilite_text(css_klass = 'hilite')
|
31
35
|
return @text if @hilite.nil?
|
32
36
|
|
33
|
-
i =
|
37
|
+
i = 0
|
34
38
|
new_text = ''
|
35
39
|
in_span = false
|
36
40
|
@text.chars.to_a.each do |c|
|
37
41
|
if @hilite.include?(i)
|
38
42
|
if not in_span
|
39
43
|
new_text += "<span class=\"#{css_klass}\">"
|
44
|
+
in_span = true
|
40
45
|
end
|
41
|
-
new_text += c
|
42
|
-
in_span = true
|
46
|
+
new_text += (c == ' ' ? ' ' : c)
|
43
47
|
else
|
44
48
|
if in_span
|
45
49
|
new_text += "</span>"
|
50
|
+
in_span = false
|
46
51
|
end
|
47
52
|
new_text += c
|
48
|
-
in_span = false
|
49
53
|
end
|
50
54
|
i += 1
|
51
55
|
end
|
@@ -53,6 +57,8 @@ module WCC
|
|
53
57
|
new_text
|
54
58
|
end
|
55
59
|
|
60
|
+
# Returns a representing character for the kind of this diff item.
|
61
|
+
# @return [String] single rep char
|
56
62
|
def rchar
|
57
63
|
case status
|
58
64
|
when :new
|
@@ -70,6 +76,8 @@ module WCC
|
|
70
76
|
end
|
71
77
|
end
|
72
78
|
|
79
|
+
# Returns an unified diff line without trailing newline.
|
80
|
+
# @return [String] unified diff line
|
73
81
|
def to_s
|
74
82
|
case status
|
75
83
|
when :new
|
@@ -92,18 +100,14 @@ module WCC
|
|
92
100
|
attr_reader :di
|
93
101
|
|
94
102
|
def initialize(dstring)
|
95
|
-
@di =
|
96
|
-
|
97
|
-
# parse line
|
98
|
-
@di << DiffItem.new(line)
|
99
|
-
end
|
100
|
-
# TODO: compute_hilite, wrong +/- detection
|
103
|
+
@di = dstring.lines.map { |line| DiffItem.new(line) }
|
104
|
+
compute_hilite
|
101
105
|
end
|
102
106
|
|
103
107
|
def compute_hilite
|
108
|
+
# get representional string for the whole diff
|
104
109
|
s = rchar
|
105
|
-
puts s
|
106
|
-
|
110
|
+
#puts s
|
107
111
|
mds = []
|
108
112
|
md = s.match(/(@|_)di(@|_)/)
|
109
113
|
while not md.nil?
|
@@ -116,19 +120,8 @@ module WCC
|
|
116
120
|
mds.each do |md|
|
117
121
|
i = offset+md.begin(1)+1
|
118
122
|
offset = md.begin(2)+1
|
119
|
-
|
120
|
-
@di[i]
|
121
|
-
@di[i+1].hilite = []
|
122
|
-
ranges.each do |chg|
|
123
|
-
chg.each do |c|
|
124
|
-
if c.action == '-' and c.element != ''
|
125
|
-
@di[i].hilite << c.position
|
126
|
-
end
|
127
|
-
if c.action == '+' and c.element != ''
|
128
|
-
@di[i+1].hilite << c.position
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
123
|
+
# found a single insertion/deletion pair
|
124
|
+
InLineDiffer.new(@di[i], @di[i+1]).compute_hilite
|
132
125
|
end
|
133
126
|
end
|
134
127
|
|
@@ -140,4 +133,38 @@ module WCC
|
|
140
133
|
@di.map { |o| o.to_s }.join("\n")
|
141
134
|
end
|
142
135
|
end
|
136
|
+
|
137
|
+
# Calculates hilite based on per char side-by-side diff for two DiffItems.
|
138
|
+
class InLineDiffer
|
139
|
+
def initialize(a, b)
|
140
|
+
@a = a
|
141
|
+
@b = b
|
142
|
+
@a.hilite = []
|
143
|
+
@b.hilite = []
|
144
|
+
end
|
145
|
+
|
146
|
+
def compute_hilite
|
147
|
+
#puts @a.text.chars.to_a.inspect
|
148
|
+
#puts @b.text.chars.to_a.inspect
|
149
|
+
# HACK: Diff::LCS with plain strings fails on Ruby 1.8 even with -Ku flag but not: <string>.chars.to_a
|
150
|
+
Diff::LCS.traverse_balanced(@a.text.chars.to_a, @b.text.chars.to_a, self)
|
151
|
+
end
|
152
|
+
|
153
|
+
def match(e)
|
154
|
+
# don't care - this is called "diff" ;-)
|
155
|
+
end
|
156
|
+
|
157
|
+
def discard_a(e)
|
158
|
+
@a.hilite << e.old_position if not @a.hilite.include?(e.old_position)
|
159
|
+
end
|
160
|
+
|
161
|
+
def discard_b(e)
|
162
|
+
@b.hilite << e.new_position if not @b.hilite.include?(e.new_position)
|
163
|
+
end
|
164
|
+
|
165
|
+
def change(e)
|
166
|
+
@a.hilite << e.old_position if not @a.hilite.include?(e.old_position)
|
167
|
+
@b.hilite << e.new_position if not @b.hilite.include?(e.new_position)
|
168
|
+
end
|
169
|
+
end
|
143
170
|
end
|
data/lib/wcc.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wcc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 8
|
10
|
+
version: 0.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Christian Nicolai
|
@@ -31,6 +31,20 @@ dependencies:
|
|
31
31
|
version: "0"
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: diff-lcs
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
34
48
|
description: wcc tracks changes of websites and notifies you by email.
|
35
49
|
email: chrnicolai@gmail.com
|
36
50
|
executables:
|