nanoc 4.11.10 → 4.11.11
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/NEWS.md +6 -0
- data/lib/nanoc.rb +2 -1
- data/lib/nanoc/base/services/item_rep_writer.rb +7 -3
- data/lib/nanoc/cli/commands/compile_listeners/diff_generator.rb +50 -34
- data/lib/nanoc/version.rb +1 -1
- metadata +18 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 481798e39546d0e6b7e7a2a98832958b1666d8ee34b68d3dea32cd59fd99cfe0
|
4
|
+
data.tar.gz: 01b653399a15957f5562bdb10757e75efa2f8368d1d37f336836804827de02d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f64c2863d201a92188b92df86808d629fe498365a900d02e8658978159fb027167a009e69924b6381ddfda11653b9511de463dde6c8766e7df3c96b57591fbaa
|
7
|
+
data.tar.gz: 61f913a10ccd33ce05431194be1edfdea46c5513789399cf9e3594118477ffac5b94a22c7d2ba840744af2bf1722362ce97483aec34e9cf5bbf64e2f17d289f5
|
data/NEWS.md
CHANGED
data/lib/nanoc.rb
CHANGED
@@ -33,6 +33,8 @@ end
|
|
33
33
|
# Load general requirements
|
34
34
|
require 'base64'
|
35
35
|
require 'cgi'
|
36
|
+
require 'diff/lcs'
|
37
|
+
require 'diff/lcs/hunk'
|
36
38
|
require 'digest'
|
37
39
|
require 'English'
|
38
40
|
require 'fiber'
|
@@ -52,7 +54,6 @@ require 'time'
|
|
52
54
|
require 'timeout'
|
53
55
|
require 'tomlrb'
|
54
56
|
require 'tmpdir'
|
55
|
-
require 'tty-file'
|
56
57
|
require 'tty-platform'
|
57
58
|
require 'tty-which'
|
58
59
|
require 'uri'
|
@@ -43,9 +43,6 @@ module Nanoc
|
|
43
43
|
:rep_write_started, item_rep, raw_path
|
44
44
|
)
|
45
45
|
|
46
|
-
# Sync (needed so that diff generator can read the old contents)
|
47
|
-
Nanoc::Core::NotificationCenter.sync
|
48
|
-
|
49
46
|
content = compiled_content_store.get(item_rep, snapshot_name)
|
50
47
|
if content.binary?
|
51
48
|
temp_path = content.filename
|
@@ -57,6 +54,13 @@ module Nanoc
|
|
57
54
|
# Check whether content was modified
|
58
55
|
is_modified = is_created || !FileUtils.identical?(raw_path, temp_path)
|
59
56
|
|
57
|
+
# Notify ready for diff generation
|
58
|
+
if !is_created && is_modified && !content.binary?
|
59
|
+
Nanoc::Core::NotificationCenter.post(
|
60
|
+
:rep_ready_for_diff, raw_path, File.read(raw_path), content.string
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
60
64
|
# Write
|
61
65
|
if is_modified
|
62
66
|
begin
|
@@ -2,6 +2,53 @@
|
|
2
2
|
|
3
3
|
module Nanoc::CLI::Commands::CompileListeners
|
4
4
|
class DiffGenerator < Abstract
|
5
|
+
class Differ
|
6
|
+
def initialize(path, str_a, str_b)
|
7
|
+
@path = path
|
8
|
+
@str_a = str_a
|
9
|
+
@str_b = str_b
|
10
|
+
end
|
11
|
+
|
12
|
+
def call
|
13
|
+
run
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def run
|
19
|
+
lines_a = @str_a.lines.map(&:chomp)
|
20
|
+
lines_b = @str_b.lines.map(&:chomp)
|
21
|
+
|
22
|
+
diffs = Diff::LCS.diff(lines_a, lines_b)
|
23
|
+
|
24
|
+
# Find hunks
|
25
|
+
hunks = []
|
26
|
+
file_length_difference = 0
|
27
|
+
diffs.each do |piece|
|
28
|
+
hunk = Diff::LCS::Hunk.new(lines_a, lines_b, piece, 3, file_length_difference)
|
29
|
+
file_length_difference = hunk.file_length_difference
|
30
|
+
hunks << hunk
|
31
|
+
end
|
32
|
+
|
33
|
+
# Merge hunks
|
34
|
+
merged_hunks = []
|
35
|
+
hunks.each do |hunk|
|
36
|
+
merged = merged_hunks.any? && hunk.merge(merged_hunks.last)
|
37
|
+
merged_hunks << hunk unless merged
|
38
|
+
end
|
39
|
+
|
40
|
+
# Output hunks
|
41
|
+
output = +''
|
42
|
+
output << "--- #{@path}\n"
|
43
|
+
output << "+++ #{@path}\n"
|
44
|
+
merged_hunks.each do |hunk|
|
45
|
+
output << hunk.diff(:unified) << "\n"
|
46
|
+
end
|
47
|
+
|
48
|
+
output
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
5
52
|
# @see Listener#enable_for?
|
6
53
|
def self.enable_for?(command_runner, site)
|
7
54
|
site.config[:enable_output_diff] || command_runner.options[:diff]
|
@@ -10,20 +57,9 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
10
57
|
# @see Listener#start
|
11
58
|
def start
|
12
59
|
setup_diffs
|
13
|
-
old_contents = {}
|
14
60
|
|
15
|
-
on(:
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
on(:rep_write_ended) do |rep, binary, path, _is_created, _is_modified|
|
20
|
-
unless binary
|
21
|
-
new_contents = File.file?(path) ? File.read(path) : nil
|
22
|
-
if old_contents[rep] && new_contents
|
23
|
-
generate_diff_for(path, old_contents[rep], new_contents)
|
24
|
-
end
|
25
|
-
old_contents.delete(rep)
|
26
|
-
end
|
61
|
+
on(:rep_ready_for_diff) do |raw_path, old_content, new_content|
|
62
|
+
generate_diff_for(raw_path, old_content, new_content)
|
27
63
|
end
|
28
64
|
end
|
29
65
|
|
@@ -55,7 +91,7 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
55
91
|
end
|
56
92
|
|
57
93
|
# Generate diff
|
58
|
-
diff =
|
94
|
+
diff = Differ.new(path, old_content, new_content).call
|
59
95
|
|
60
96
|
# Write diff
|
61
97
|
@diff_lock.synchronize do
|
@@ -63,25 +99,5 @@ module Nanoc::CLI::Commands::CompileListeners
|
|
63
99
|
end
|
64
100
|
end
|
65
101
|
end
|
66
|
-
|
67
|
-
def diff_strings(str_a, str_b)
|
68
|
-
# Create files
|
69
|
-
Tempfile.open('old') do |old_file|
|
70
|
-
Tempfile.open('new') do |new_file|
|
71
|
-
# Write files
|
72
|
-
old_file.write(str_a)
|
73
|
-
old_file.flush
|
74
|
-
new_file.write(str_b)
|
75
|
-
new_file.flush
|
76
|
-
|
77
|
-
# Diff
|
78
|
-
TTY::File.diff_files(old_file.path, new_file.path, verbose: false)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
rescue Errno::ENOENT
|
82
|
-
warn 'Failed to run `diff`, so no diff with the previously compiled ' \
|
83
|
-
'content will be available.'
|
84
|
-
nil
|
85
|
-
end
|
86
102
|
end
|
87
103
|
end
|
data/lib/nanoc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.11.
|
4
|
+
version: 4.11.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-09-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -52,20 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '2.15'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: diff-lcs
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.3'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.3'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: nanoc-core
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - '='
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: 4.11.
|
75
|
+
version: 4.11.11
|
62
76
|
type: :runtime
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - '='
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: 4.11.
|
82
|
+
version: 4.11.11
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: parallel
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,20 +122,6 @@ dependencies:
|
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0.8'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: tty-file
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0.7'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0.7'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: tty-platform
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|