listen 3.1.3 → 3.3.0.pre.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Listen
2
4
  class QueueOptimizer
3
5
  class Config
@@ -107,15 +109,15 @@ module Listen
107
109
  def _detect_possible_editor_save(changes)
108
110
  return unless changes.size == 2
109
111
 
110
- from_type = from_change = from = nil
111
- to_type = to_change = to_dir = to = nil
112
+ from_type = from = nil
113
+ to_type = to_dir = to = nil
112
114
 
113
115
  changes.each do |data|
114
116
  case data[1]
115
117
  when :moved_from
116
- from_type, from_change, _, from, = data
118
+ from_type, _from_change, _, from, = data
117
119
  when :moved_to
118
- to_type, to_change, to_dir, to, = data
120
+ to_type, _to_change, to_dir, to, = data
119
121
  else
120
122
  return nil
121
123
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'thread'
2
4
  require 'listen/record/entry'
3
5
  require 'listen/record/symlink_detector'
@@ -45,8 +47,7 @@ module Listen
45
47
  if [nil, '', '.'].include? rel_path.to_s
46
48
  tree
47
49
  else
48
- tree[rel_path.to_s] ||= _auto_hash
49
- tree[rel_path.to_s]
50
+ _sub_tree(rel_path)
50
51
  end
51
52
 
52
53
  result = {}
@@ -57,6 +58,19 @@ module Listen
57
58
  result
58
59
  end
59
60
 
61
+ def _sub_tree(rel_path)
62
+ tree.each_with_object({}) do |(path, meta), result|
63
+ next unless path.start_with?(rel_path)
64
+
65
+ if path == rel_path
66
+ result.merge!(meta)
67
+ else
68
+ sub_path = path.sub(%r{\A#{rel_path}/?}, '')
69
+ result[sub_path] = meta
70
+ end
71
+ end
72
+ end
73
+
60
74
  def build
61
75
  @tree = _auto_hash
62
76
  # TODO: test with a file name given
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Listen
2
4
  # @private api
3
5
  class Record
@@ -22,7 +24,7 @@ module Listen
22
24
 
23
25
  def meta
24
26
  lstat = ::File.lstat(sys_path)
25
- { mtime: lstat.mtime.to_f, mode: lstat.mode }
27
+ { mtime: lstat.mtime.to_f, mode: lstat.mode, size: lstat.size }
26
28
  end
27
29
 
28
30
  # record hash is e.g.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'set'
2
4
 
3
5
  module Listen
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Listen
2
4
  class Silencer
3
5
  # The default list of directories that get ignored.
@@ -46,6 +48,9 @@ module Listen
46
48
  )
47
49
  )
48
50
 
51
+ # Mutagen sync temporary files
52
+ | \.mutagen-temporary.*
53
+
49
54
  # other files
50
55
  | \.DS_Store
51
56
  | \.tmp
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Listen
2
4
  class Silencer
3
5
  class Controller
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'thread'
4
+
5
+ require_relative 'logger'
6
+
7
+ module Listen
8
+ module Thread
9
+ class << self
10
+ # Creates a new thread with the given name.
11
+ # Any exceptions raised by the thread will be logged with the thread name and complete backtrace.
12
+ def new(name)
13
+ thread_name = "listen-#{name}"
14
+
15
+ caller_stack = caller
16
+ ::Thread.new do
17
+ begin
18
+ yield
19
+ rescue Exception => ex
20
+ _log_exception(ex, thread_name, caller_stack)
21
+ nil
22
+ end
23
+ end.tap do |thread|
24
+ thread.name = thread_name
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def _log_exception(ex, thread_name, caller_stack)
31
+ complete_backtrace = [*ex.backtrace, "--- Thread.new ---", *caller_stack]
32
+ message = "Exception rescued in #{thread_name}:\n#{_exception_with_causes(ex)}\n#{complete_backtrace * "\n"}"
33
+ Listen.logger.error(message)
34
+ end
35
+
36
+ def _exception_with_causes(ex)
37
+ result = +"#{ex.class}: #{ex}"
38
+ if ex.cause
39
+ result << "\n"
40
+ result << "--- Caused by: ---\n"
41
+ result << _exception_with_causes(ex.cause)
42
+ end
43
+ result
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Listen
2
- VERSION = '3.1.3'.freeze
4
+ VERSION = '3.3.0.pre.2'
3
5
  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: 3.1.3
4
+ version: 3.3.0.pre.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: 2016-05-03 00:00:00.000000000 Z
11
+ date: 2020-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb-fsevent
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.9'
19
+ version: '0.10'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.9.7
22
+ version: 0.10.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '0.9'
29
+ version: '0.10'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.9.7
32
+ version: 0.10.3
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rb-inotify
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '0.9'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.9.7
42
+ version: 0.9.10
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,37 +49,9 @@ dependencies:
49
49
  version: '0.9'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.9.7
53
- - !ruby/object:Gem::Dependency
54
- name: ruby_dep
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '1.2'
60
- type: :runtime
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '1.2'
67
- - !ruby/object:Gem::Dependency
68
- name: bundler
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '1.12'
74
- type: :development
75
- prerelease: false
76
- version_requirements: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '1.12'
52
+ version: 0.9.10
81
53
  description: The Listen gem listens to file modifications and notifies you about the
82
- changes. Works everywhere!
54
+ changegem. Works everywhere!
83
55
  email: thibaud@thibaud.gg
84
56
  executables:
85
57
  - listen
@@ -110,7 +82,6 @@ files:
110
82
  - lib/listen/event/queue.rb
111
83
  - lib/listen/file.rb
112
84
  - lib/listen/fsm.rb
113
- - lib/listen/internals/thread_pool.rb
114
85
  - lib/listen/listener.rb
115
86
  - lib/listen/listener/config.rb
116
87
  - lib/listen/logger.rb
@@ -121,33 +92,30 @@ files:
121
92
  - lib/listen/record/symlink_detector.rb
122
93
  - lib/listen/silencer.rb
123
94
  - lib/listen/silencer/controller.rb
95
+ - lib/listen/thread.rb
124
96
  - lib/listen/version.rb
125
97
  homepage: https://github.com/guard/listen
126
98
  licenses:
127
99
  - MIT
128
- metadata: {}
100
+ metadata:
101
+ allowed_push_host: https://rubygems.org
129
102
  post_install_message:
130
103
  rdoc_options: []
131
104
  require_paths:
132
105
  - lib
133
106
  required_ruby_version: !ruby/object:Gem::Requirement
134
107
  requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '2.2'
138
108
  - - ">="
139
109
  - !ruby/object:Gem::Version
140
- version: 2.2.3
110
+ version: 2.2.7
141
111
  required_rubygems_version: !ruby/object:Gem::Requirement
142
112
  requirements:
143
- - - ">="
113
+ - - ">"
144
114
  - !ruby/object:Gem::Version
145
- version: '0'
115
+ version: 1.3.1
146
116
  requirements: []
147
- rubyforge_project:
148
- rubygems_version: 2.5.1
117
+ rubygems_version: 3.0.1
149
118
  signing_key:
150
119
  specification_version: 4
151
120
  summary: Listen to file modifications
152
121
  test_files: []
153
- has_rdoc:
@@ -1,29 +0,0 @@
1
- module Listen
2
- # @private api
3
- module Internals
4
- module ThreadPool
5
- def self.add(&block)
6
- Thread.new { block.call }.tap do |th|
7
- (@threads ||= Queue.new) << th
8
- end
9
- end
10
-
11
- def self.stop
12
- return unless @threads ||= nil
13
- return if @threads.empty? # return to avoid using possibly stubbed Queue
14
-
15
- killed = Queue.new
16
- # You can't kill a read on a descriptor in JRuby, so let's just
17
- # ignore running threads (listen rb-inotify waiting for disk activity
18
- # before closing) pray threads die faster than they are created...
19
- limit = RUBY_ENGINE == 'jruby' ? [1] : []
20
-
21
- killed << @threads.pop.kill until @threads.empty?
22
- until killed.empty?
23
- th = killed.pop
24
- th.join(*limit) unless th[:listen_blocking_read_thread]
25
- end
26
- end
27
- end
28
- end
29
- end