Skip to content

Commit d276fcd

Browse files
authored
Merge pull request #1567 from git/speed_up_diff_stat
Speed up diff stat in manpages
2 parents 4dfa2bb + 23838e5 commit d276fcd

File tree

4 files changed

+14
-16
lines changed

4 files changed

+14
-16
lines changed

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ gem "octokit"
1414
gem "puma"
1515
gem "tilt"
1616

17-
gem "diff-lcs"
17+
gem "diffy"
1818
gem "launchy"
1919
gem "netrc"
2020
gem "nokogiri"

Gemfile.lock

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ GEM
8080
database_cleaner (1.8.5)
8181
debug_inspector (0.0.3)
8282
diff-lcs (1.4.4)
83+
diffy (3.4.0)
8384
dotenv (2.7.6)
8485
dotenv-rails (2.7.6)
8586
dotenv (= 2.7.6)
@@ -310,7 +311,7 @@ DEPENDENCIES
310311
better_errors
311312
binding_of_caller
312313
database_cleaner
313-
diff-lcs
314+
diffy
314315
dotenv-rails
315316
elasticsearch (= 2.0.2)
316317
fabrication

app/models/doc.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# frozen_string_literal: true
22

3-
require "diff/lcs"
43
require "pp"
54
require "searchable"
5+
require "diffy"
66

77
# t.text :blob_sha
88
# t.text :plain

app/models/doc_version.rb

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,18 @@ class DocVersion < ApplicationRecord
2424
# 2: 8 - (add + sub)
2525
def diff(doc_version)
2626
begin
27-
to = self.doc.plain.split("\n")
28-
from = doc_version.doc.plain.split("\n")
29-
total = adds = mins = 0
30-
diff = Diff::LCS.diff(to, from)
31-
diff.first.each do |change|
32-
adds += 1 if change.action == "+"
33-
mins += 1 if change.action == "-"
34-
total += 1
35-
end
36-
if total > 8
27+
diff_out = Diffy::Diff.new(self.doc.plain, doc_version.doc.plain)
28+
first_chars=diff_out.to_s.gsub(/(.)[^\n]*\n/, '\1')
29+
adds = first_chars.count("+")
30+
mins = first_chars.count("-")
31+
total = mins + adds
32+
if total > 8
3733
min = (8.0 / total)
38-
adds = (adds * min).floor
39-
mins = (mins * min).floor
34+
adds = (adds * min).round
35+
mins = (mins * min).round
36+
total = 8
4037
end
41-
[adds, mins, (8 - total)]
38+
[adds, mins, 8 - total]
4239
rescue
4340
[0, 0, 8]
4441
end

0 commit comments

Comments
 (0)