listen 2.8.1 → 2.8.2
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/Rakefile +139 -0
- data/lib/listen/record.rb +2 -2
- data/lib/listen/record/symlink_detector.rb +10 -34
- data/lib/listen/version.rb +1 -1
- data/spec/lib/listen/record_spec.rb +13 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82833c1dcd0ed421fcb93115f1c764492148b1f4
|
4
|
+
data.tar.gz: 407619ca1bdba240ae918e4e3e73e237f129f132
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03f0ba222830c725718adf106e479a559b183d663009c7482c35bf252c9c41799d3d824692ac30716ddf62ada053610400391b67c3d8caa82eb9a715ad3d16d7
|
7
|
+
data.tar.gz: eaa55b1eaae113d97e621f6de5fb657186f584f0d1c6cd1051c17368702867e6b816047d9868114863118addbc73f413f7850b040d49c2631eb0699ae6b84763
|
data/Rakefile
CHANGED
@@ -10,3 +10,142 @@ if ENV["CI"] != "true"
|
|
10
10
|
else
|
11
11
|
task default: [:spec]
|
12
12
|
end
|
13
|
+
|
14
|
+
class Releaser
|
15
|
+
def initialize(options = {})
|
16
|
+
@project_name = options.delete(:project_name) do
|
17
|
+
fail "project_name is needed!"
|
18
|
+
end
|
19
|
+
|
20
|
+
@gem_name = options.delete(:gem_name) do
|
21
|
+
fail "gem_name is needed!"
|
22
|
+
end
|
23
|
+
|
24
|
+
@github_repo = options.delete(:github_repo) do
|
25
|
+
fail "github_repo is needed!"
|
26
|
+
end
|
27
|
+
|
28
|
+
@version = options.delete(:version) do
|
29
|
+
fail "version is needed!"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def full
|
34
|
+
rubygems
|
35
|
+
github
|
36
|
+
end
|
37
|
+
|
38
|
+
def rubygems
|
39
|
+
begin
|
40
|
+
STDOUT.puts "Release #{@project_name} #{@version} to RubyGems? (y/n)"
|
41
|
+
input = STDIN.gets.chomp.downcase
|
42
|
+
end while !%w(y n).include?(input)
|
43
|
+
|
44
|
+
exit if input == "n"
|
45
|
+
|
46
|
+
Rake::Task["release"].invoke
|
47
|
+
end
|
48
|
+
|
49
|
+
def github
|
50
|
+
tag_name = "v#{@version}"
|
51
|
+
|
52
|
+
require "gems"
|
53
|
+
|
54
|
+
_verify_released
|
55
|
+
_verify_tag_pushed
|
56
|
+
|
57
|
+
require "octokit"
|
58
|
+
gh_client = Octokit::Client.new(netrc: true)
|
59
|
+
|
60
|
+
gh_release = _detect_gh_release(gh_client, tag_name, true)
|
61
|
+
return unless gh_release
|
62
|
+
|
63
|
+
STDOUT.puts "Draft release for #{tag_name}:\n"
|
64
|
+
STDOUT.puts gh_release.body
|
65
|
+
STDOUT.puts "\n-------------------------\n\n"
|
66
|
+
|
67
|
+
_confirm_publish
|
68
|
+
|
69
|
+
return unless _update_release(gh_client, gh_release, tag_name)
|
70
|
+
|
71
|
+
gh_release = _detect_gh_release(gh_client, tag_name, false)
|
72
|
+
|
73
|
+
_success_summary(gh_release, tag_name)
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def _verify_released
|
79
|
+
if @version != Gems.info(@gem_name)["version"]
|
80
|
+
STDOUT.puts "#{@project_name} #{@version} is not yet released."
|
81
|
+
STDOUT.puts "Please release it first with: rake release:gem"
|
82
|
+
exit
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def _verify_tag_pushed
|
87
|
+
tags = `git ls-remote --tags origin`.split("\n")
|
88
|
+
return if tags.detect { |tag| tag =~ /v#{@version}$/ }
|
89
|
+
|
90
|
+
STDOUT.puts "The tag v#{@version} has not yet been pushed."
|
91
|
+
STDOUT.puts "Please push it first with: rake release:gem"
|
92
|
+
exit
|
93
|
+
end
|
94
|
+
|
95
|
+
def _success_summary(gh_release, tag_name)
|
96
|
+
href = gh_release.rels[:html].href
|
97
|
+
STDOUT.puts "GitHub release #{tag_name} has been published!"
|
98
|
+
STDOUT.puts "\nPlease enjoy and spread the word!"
|
99
|
+
STDOUT.puts "Lack of inspiration? Here's a tweet you could improve:\n\n"
|
100
|
+
STDOUT.puts "Just released #{@project_name} #{@version}! #{href}"
|
101
|
+
end
|
102
|
+
|
103
|
+
def _detect_gh_release(gh_client, tag_name, draft)
|
104
|
+
gh_releases = gh_client.releases(@github_repo)
|
105
|
+
gh_releases.detect { |r| r.tag_name == tag_name && r.draft == draft }
|
106
|
+
end
|
107
|
+
|
108
|
+
def _confirm_publish
|
109
|
+
begin
|
110
|
+
STDOUT.puts "Would you like to publish this GitHub release now? (y/n)"
|
111
|
+
input = STDIN.gets.chomp.downcase
|
112
|
+
end while !%w(y n).include?(input)
|
113
|
+
|
114
|
+
exit if input == "n"
|
115
|
+
end
|
116
|
+
|
117
|
+
def _update_release(gh_client, gh_release, tag_name)
|
118
|
+
result = gh_client.update_release(gh_release.rels[:self].href, draft: false)
|
119
|
+
return true if result
|
120
|
+
STDOUT.puts "GitHub release #{tag_name} couldn't be published!"
|
121
|
+
false
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
PROJECT_NAME = "Listen"
|
126
|
+
CURRENT_VERSION = Listen::VERSION
|
127
|
+
|
128
|
+
def releaser
|
129
|
+
$releaser ||= Releaser.new(
|
130
|
+
project_name: PROJECT_NAME,
|
131
|
+
gem_name: "guard",
|
132
|
+
github_repo: "guard/guard",
|
133
|
+
version: CURRENT_VERSION)
|
134
|
+
end
|
135
|
+
|
136
|
+
namespace :release do
|
137
|
+
desc "Push #{PROJECT_NAME} #{CURRENT_VERSION} to RubyGems and publish"\
|
138
|
+
" its GitHub release"
|
139
|
+
|
140
|
+
task full: ["release:gem", "release:github"]
|
141
|
+
|
142
|
+
desc "Push #{PROJECT_NAME} #{CURRENT_VERSION} to RubyGems"
|
143
|
+
task :gem do
|
144
|
+
releaser.rubygems
|
145
|
+
end
|
146
|
+
|
147
|
+
desc "Publish #{PROJECT_NAME} #{CURRENT_VERSION} GitHub release"
|
148
|
+
task :github do
|
149
|
+
releaser.github
|
150
|
+
end
|
151
|
+
end
|
data/lib/listen/record.rb
CHANGED
@@ -115,12 +115,12 @@ module Listen
|
|
115
115
|
|
116
116
|
def _fast_build_dir(remaining, symlink_detector)
|
117
117
|
entry = remaining.pop
|
118
|
-
entry.children.each { |child| remaining << child }
|
119
118
|
symlink_detector.verify_unwatched!(entry)
|
119
|
+
entry.children.each { |child| remaining << child }
|
120
120
|
add_dir(entry.root, entry.record_dir_key)
|
121
121
|
rescue Errno::ENOTDIR
|
122
122
|
_fast_try_file(entry)
|
123
|
-
rescue SystemCallError
|
123
|
+
rescue SystemCallError, SymlinkDetector::Error
|
124
124
|
_fast_unset_path(entry.root, entry.relative, entry.name)
|
125
125
|
end
|
126
126
|
|
@@ -4,43 +4,21 @@ module Listen
|
|
4
4
|
# @private api
|
5
5
|
class Record
|
6
6
|
class SymlinkDetector
|
7
|
-
|
8
|
-
** ERROR: Listen detected a duplicate directory being watched! **
|
9
|
-
|
10
|
-
(This may be due to multiple symlinks pointing to already watched dirs).
|
11
|
-
|
12
|
-
Duplicate: %s
|
13
|
-
|
14
|
-
which already is added as: %s
|
15
|
-
|
16
|
-
Listen is refusing to continue, because it may cause an infinite loop,
|
17
|
-
a crash or confusing results.
|
18
|
-
|
19
|
-
Suggestions:
|
7
|
+
WIKI = 'https://github.com/guard/listen/wiki/Duplicate-directory-errors'
|
20
8
|
|
21
|
-
|
22
|
-
|
23
|
-
but not both).
|
24
|
-
|
25
|
-
IMPORTANT: The `:ignore` options DO NOT HELP here
|
26
|
-
(see: https://github.com/guard/listen/issues/274)
|
27
|
-
|
28
|
-
NOTE: If you are using Listen through some other application
|
29
|
-
(like Guard, Compass, Jekyll, Vagrant), check the documentation on
|
30
|
-
selecting watched directories (e.g. Guard has a `-w` option, Compass
|
31
|
-
allows you to specify multiple input/output directories, etc.)
|
9
|
+
SYMLINK_LOOP_ERROR = <<-EOS
|
10
|
+
** ERROR: directory is already being watched! **
|
32
11
|
|
33
|
-
|
34
|
-
contain symlinked directories
|
12
|
+
Directory: %s
|
35
13
|
|
36
|
-
|
37
|
-
detect symlinks to already watched read directories, skip
|
38
|
-
them, and then reasonably choose which symlinked paths to
|
39
|
-
report as changed (if any)
|
14
|
+
is already begin watched through: %s
|
40
15
|
|
41
|
-
|
16
|
+
MORE INFO: #{WIKI}
|
42
17
|
EOS
|
43
18
|
|
19
|
+
class Error < RuntimeError
|
20
|
+
end
|
21
|
+
|
44
22
|
def initialize
|
45
23
|
@real_dirs = Set.new
|
46
24
|
end
|
@@ -54,9 +32,7 @@ module Listen
|
|
54
32
|
|
55
33
|
def _fail(symlinked, real_path)
|
56
34
|
STDERR.puts format(SYMLINK_LOOP_ERROR, symlinked, real_path)
|
57
|
-
|
58
|
-
# Note Celluloid eats up abort message anyway
|
59
|
-
fail 'Failed due to looped symlinks'
|
35
|
+
fail Error, 'Failed due to looped symlinks'
|
60
36
|
end
|
61
37
|
end
|
62
38
|
end
|
data/lib/listen/version.rb
CHANGED
@@ -232,6 +232,10 @@ describe Listen::Record do
|
|
232
232
|
|
233
233
|
allow(::File).to receive(:realpath).with('/dir1').and_return('/dir1')
|
234
234
|
allow(::File).to receive(:realpath).with('/dir2').and_return('/dir2')
|
235
|
+
allow(::File).to receive(:realpath).with('/dir1/foo').
|
236
|
+
and_return('/dir1/foo')
|
237
|
+
allow(::File).to receive(:realpath).with('/dir1/bar').
|
238
|
+
and_return('/dir1/bar')
|
235
239
|
end
|
236
240
|
|
237
241
|
it 'builds record' do
|
@@ -256,6 +260,8 @@ describe Listen::Record do
|
|
256
260
|
allow(::File).to receive(:realpath).with('/dir2').and_return('/dir2')
|
257
261
|
allow(::File).to receive(:realpath).with('/dir1/foo').
|
258
262
|
and_return('/dir1/foo')
|
263
|
+
allow(::File).to receive(:realpath).with('/dir1/foo/bar').
|
264
|
+
and_return('/dir1/foo/bar')
|
259
265
|
end
|
260
266
|
|
261
267
|
it 'builds record' do
|
@@ -295,15 +301,19 @@ describe Listen::Record do
|
|
295
301
|
before do
|
296
302
|
allow(::Dir).to receive(:entries).with('/dir1') { %w(foo) }
|
297
303
|
allow(::Dir).to receive(:entries).with('/dir1/foo') { %w(foo) }
|
304
|
+
allow(::Dir).to receive(:entries).with('/dir2') { [] }
|
298
305
|
allow(::File).to receive(:realpath).with('/dir1').and_return('/bar')
|
299
306
|
allow(::File).to receive(:realpath).with('/dir1/foo').and_return('/bar')
|
307
|
+
allow(::File).to receive(:realpath).with('/dir2').and_return('/dir2')
|
300
308
|
end
|
301
309
|
|
302
310
|
it 'shows message and aborts with error' do
|
303
|
-
expect(STDERR).to receive(:puts).
|
311
|
+
expect(STDERR).to receive(:puts).
|
312
|
+
with(/directory is already being watched/)
|
304
313
|
|
305
|
-
|
306
|
-
|
314
|
+
record.build
|
315
|
+
# expect { record.build }.
|
316
|
+
# to raise_error(RuntimeError, /Failed due to looped symlinks/)
|
307
317
|
end
|
308
318
|
end
|
309
319
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: listen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.8.
|
4
|
+
version: 2.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibaud Guillaume-Gentil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid
|