spring 2.0.2 → 3.1.1
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 +5 -5
- data/LICENSE.txt +1 -0
- data/README.md +54 -38
- data/lib/spring/application.rb +47 -31
- data/lib/spring/application_manager.rb +4 -2
- data/lib/spring/binstub.rb +0 -20
- data/lib/spring/client/binstub.rb +12 -13
- data/lib/spring/client/help.rb +1 -1
- data/lib/spring/client/rails.rb +3 -1
- data/lib/spring/client/run.rb +23 -4
- data/lib/spring/client/stop.rb +1 -1
- data/lib/spring/commands.rb +1 -1
- data/lib/spring/configuration.rb +16 -1
- data/lib/spring/env.rb +2 -3
- data/lib/spring/errors.rb +1 -1
- data/lib/spring/json.rb +27 -30
- data/lib/spring/process_title_updater.rb +1 -1
- data/lib/spring/server.rb +2 -1
- data/lib/spring/version.rb +1 -1
- metadata +10 -18
- data/lib/spring/sid.rb +0 -42
- data/lib/spring/test/acceptance_test.rb +0 -558
- data/lib/spring/test/application.rb +0 -229
- data/lib/spring/test/application_generator.rb +0 -144
- data/lib/spring/test/rails_version.rb +0 -23
- data/lib/spring/test/watcher_test.rb +0 -194
- data/lib/spring/test.rb +0 -18
data/lib/spring/configuration.rb
CHANGED
|
@@ -5,7 +5,22 @@ module Spring
|
|
|
5
5
|
attr_accessor :application_root, :quiet
|
|
6
6
|
|
|
7
7
|
def gemfile
|
|
8
|
-
|
|
8
|
+
require "bundler"
|
|
9
|
+
|
|
10
|
+
if /\s1.9.[0-9]/ === Bundler.ruby_scope.gsub(/[\/\s]+/,'')
|
|
11
|
+
Pathname.new(ENV["BUNDLE_GEMFILE"] || "Gemfile").expand_path
|
|
12
|
+
else
|
|
13
|
+
Bundler.default_gemfile
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def gemfile_lock
|
|
18
|
+
case gemfile.to_s
|
|
19
|
+
when /\bgems\.rb\z/
|
|
20
|
+
gemfile.sub_ext('.locked')
|
|
21
|
+
else
|
|
22
|
+
gemfile.sub_ext('.lock')
|
|
23
|
+
end
|
|
9
24
|
end
|
|
10
25
|
|
|
11
26
|
def after_fork_callbacks
|
data/lib/spring/env.rb
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
require "pathname"
|
|
2
|
-
require "fileutils"
|
|
3
2
|
require "digest/md5"
|
|
4
|
-
require "tmpdir"
|
|
5
3
|
|
|
6
4
|
require "spring/version"
|
|
7
|
-
require "spring/sid"
|
|
8
5
|
require "spring/configuration"
|
|
9
6
|
|
|
10
7
|
module Spring
|
|
@@ -33,10 +30,12 @@ module Spring
|
|
|
33
30
|
end
|
|
34
31
|
|
|
35
32
|
def tmp_path
|
|
33
|
+
require "tmpdir"
|
|
36
34
|
path = Pathname.new(
|
|
37
35
|
ENV["SPRING_TMP_PATH"] ||
|
|
38
36
|
File.join(ENV['XDG_RUNTIME_DIR'] || Dir.tmpdir, "spring-#{Process.uid}")
|
|
39
37
|
)
|
|
38
|
+
require "fileutils"
|
|
40
39
|
FileUtils.mkdir_p(path) unless path.exist?
|
|
41
40
|
path
|
|
42
41
|
end
|
data/lib/spring/errors.rb
CHANGED
|
@@ -24,7 +24,7 @@ module Spring
|
|
|
24
24
|
|
|
25
25
|
def message
|
|
26
26
|
"Spring was unable to find your config/application.rb file. " \
|
|
27
|
-
"Your project root was detected at #{project_root}, so
|
|
27
|
+
"Your project root was detected at #{project_root}, so Spring " \
|
|
28
28
|
"looked for #{project_root}/config/application.rb but it doesn't exist. You can " \
|
|
29
29
|
"configure the root of your application by setting Spring.application_root in " \
|
|
30
30
|
"config/spring.rb."
|
data/lib/spring/json.rb
CHANGED
|
@@ -46,11 +46,9 @@ end
|
|
|
46
46
|
|
|
47
47
|
# See https://github.com/kr/okjson for updates.
|
|
48
48
|
|
|
49
|
-
require 'stringio'
|
|
50
|
-
|
|
51
49
|
# Some parts adapted from
|
|
52
|
-
#
|
|
53
|
-
#
|
|
50
|
+
# https://golang.org/src/pkg/json/decode.go and
|
|
51
|
+
# https://golang.org/src/pkg/utf8/utf8.go
|
|
54
52
|
module Spring
|
|
55
53
|
module OkJson
|
|
56
54
|
Upstream = '43'
|
|
@@ -468,19 +466,18 @@ private
|
|
|
468
466
|
|
|
469
467
|
|
|
470
468
|
def strenc(s)
|
|
471
|
-
t =
|
|
472
|
-
t.putc(?")
|
|
469
|
+
t = '"'.b
|
|
473
470
|
r = 0
|
|
474
471
|
|
|
475
472
|
while r < s.length
|
|
476
473
|
case s[r]
|
|
477
|
-
when ?" then t
|
|
478
|
-
when ?\\ then t
|
|
479
|
-
when ?\b then t
|
|
480
|
-
when ?\f then t
|
|
481
|
-
when ?\n then t
|
|
482
|
-
when ?\r then t
|
|
483
|
-
when ?\t then t
|
|
474
|
+
when ?" then t << '\\"'
|
|
475
|
+
when ?\\ then t << '\\\\'
|
|
476
|
+
when ?\b then t << '\\b'
|
|
477
|
+
when ?\f then t << '\\f'
|
|
478
|
+
when ?\n then t << '\\n'
|
|
479
|
+
when ?\r then t << '\\r'
|
|
480
|
+
when ?\t then t << '\\t'
|
|
484
481
|
else
|
|
485
482
|
c = s[r]
|
|
486
483
|
# In ruby >= 1.9, s[r] is a codepoint, not a byte.
|
|
@@ -490,14 +487,14 @@ private
|
|
|
490
487
|
if c.ord < Spc.ord
|
|
491
488
|
c = "\\u%04x" % [c.ord]
|
|
492
489
|
end
|
|
493
|
-
t
|
|
490
|
+
t << c
|
|
494
491
|
rescue
|
|
495
|
-
t
|
|
492
|
+
t << Ustrerr
|
|
496
493
|
end
|
|
497
494
|
elsif c < Spc
|
|
498
|
-
t
|
|
495
|
+
t << "\\u%04x" % c
|
|
499
496
|
elsif Spc <= c && c <= ?~
|
|
500
|
-
t
|
|
497
|
+
t << c
|
|
501
498
|
else
|
|
502
499
|
n = ucharcopy(t, s, r) # ensure valid UTF-8 output
|
|
503
500
|
r += n - 1 # r is incremented below
|
|
@@ -505,8 +502,8 @@ private
|
|
|
505
502
|
end
|
|
506
503
|
r += 1
|
|
507
504
|
end
|
|
508
|
-
t
|
|
509
|
-
t
|
|
505
|
+
t << '"'
|
|
506
|
+
t
|
|
510
507
|
end
|
|
511
508
|
|
|
512
509
|
|
|
@@ -531,7 +528,7 @@ private
|
|
|
531
528
|
|
|
532
529
|
# 1-byte, 7-bit sequence?
|
|
533
530
|
if c0 < Utagx
|
|
534
|
-
t
|
|
531
|
+
t << c0
|
|
535
532
|
return 1
|
|
536
533
|
end
|
|
537
534
|
|
|
@@ -544,8 +541,8 @@ private
|
|
|
544
541
|
# 2-byte, 11-bit sequence?
|
|
545
542
|
if c0 < Utag3
|
|
546
543
|
raise Utf8Error if ((c0&Umask2)<<6 | (c1&Umaskx)) <= Uchar1max
|
|
547
|
-
t
|
|
548
|
-
t
|
|
544
|
+
t << c0
|
|
545
|
+
t << c1
|
|
549
546
|
return 2
|
|
550
547
|
end
|
|
551
548
|
|
|
@@ -559,9 +556,9 @@ private
|
|
|
559
556
|
if c0 < Utag4
|
|
560
557
|
u = (c0&Umask3)<<12 | (c1&Umaskx)<<6 | (c2&Umaskx)
|
|
561
558
|
raise Utf8Error if u <= Uchar2max
|
|
562
|
-
t
|
|
563
|
-
t
|
|
564
|
-
t
|
|
559
|
+
t << c0
|
|
560
|
+
t << c1
|
|
561
|
+
t << c2
|
|
565
562
|
return 3
|
|
566
563
|
end
|
|
567
564
|
|
|
@@ -574,16 +571,16 @@ private
|
|
|
574
571
|
if c0 < Utag5
|
|
575
572
|
u = (c0&Umask4)<<18 | (c1&Umaskx)<<12 | (c2&Umaskx)<<6 | (c3&Umaskx)
|
|
576
573
|
raise Utf8Error if u <= Uchar3max
|
|
577
|
-
t
|
|
578
|
-
t
|
|
579
|
-
t
|
|
580
|
-
t
|
|
574
|
+
t << c0
|
|
575
|
+
t << c1
|
|
576
|
+
t << c2
|
|
577
|
+
t << c3
|
|
581
578
|
return 4
|
|
582
579
|
end
|
|
583
580
|
|
|
584
581
|
raise Utf8Error
|
|
585
582
|
rescue Utf8Error
|
|
586
|
-
t
|
|
583
|
+
t << Ustrerr
|
|
587
584
|
return 1
|
|
588
585
|
end
|
|
589
586
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Spring
|
|
2
2
|
# Yes, I know this reimplements a bunch of stuff in Active Support, but
|
|
3
|
-
# I don't want the
|
|
3
|
+
# I don't want the Spring client to depend on AS, in order to keep its
|
|
4
4
|
# load time down.
|
|
5
5
|
class ProcessTitleUpdater
|
|
6
6
|
SECOND = 1
|
data/lib/spring/server.rb
CHANGED
|
@@ -81,7 +81,8 @@ module Spring
|
|
|
81
81
|
# This will cause it to be automatically killed once the session
|
|
82
82
|
# ends (i.e. when the user closes their terminal).
|
|
83
83
|
def set_pgid
|
|
84
|
-
Process.
|
|
84
|
+
pgid = Process.getpgid(Process.getsid)
|
|
85
|
+
Process.setpgid(0, pgid)
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
# Ignore SIGINT and SIGQUIT otherwise the user typing ^C or ^\ on the command line
|
data/lib/spring/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spring
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jon Leighton
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-11-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: rake
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
20
|
-
type: :
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: bump
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
@@ -39,7 +39,7 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: activesupport
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
@@ -90,13 +90,6 @@ files:
|
|
|
90
90
|
- lib/spring/json.rb
|
|
91
91
|
- lib/spring/process_title_updater.rb
|
|
92
92
|
- lib/spring/server.rb
|
|
93
|
-
- lib/spring/sid.rb
|
|
94
|
-
- lib/spring/test.rb
|
|
95
|
-
- lib/spring/test/acceptance_test.rb
|
|
96
|
-
- lib/spring/test/application.rb
|
|
97
|
-
- lib/spring/test/application_generator.rb
|
|
98
|
-
- lib/spring/test/rails_version.rb
|
|
99
|
-
- lib/spring/test/watcher_test.rb
|
|
100
93
|
- lib/spring/version.rb
|
|
101
94
|
- lib/spring/watcher.rb
|
|
102
95
|
- lib/spring/watcher/abstract.rb
|
|
@@ -113,15 +106,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
113
106
|
requirements:
|
|
114
107
|
- - ">="
|
|
115
108
|
- !ruby/object:Gem::Version
|
|
116
|
-
version:
|
|
109
|
+
version: 2.5.0
|
|
117
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
111
|
requirements:
|
|
119
112
|
- - ">="
|
|
120
113
|
- !ruby/object:Gem::Version
|
|
121
114
|
version: '0'
|
|
122
115
|
requirements: []
|
|
123
|
-
|
|
124
|
-
rubygems_version: 2.6.8
|
|
116
|
+
rubygems_version: 3.2.22
|
|
125
117
|
signing_key:
|
|
126
118
|
specification_version: 4
|
|
127
119
|
summary: Rails application preloader
|
data/lib/spring/sid.rb
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
begin
|
|
2
|
-
# If rubygems is present, keep it out of the way when loading fiddle,
|
|
3
|
-
# otherwise if fiddle is not installed then rubygems will load all
|
|
4
|
-
# gemspecs in its (futile) search for fiddle, which is slow.
|
|
5
|
-
if respond_to?(:gem_original_require, true)
|
|
6
|
-
gem_original_require 'fiddle'
|
|
7
|
-
else
|
|
8
|
-
require 'fiddle'
|
|
9
|
-
end
|
|
10
|
-
rescue LoadError
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
module Spring
|
|
14
|
-
module SID
|
|
15
|
-
def self.fiddle_func
|
|
16
|
-
@fiddle_func ||= Fiddle::Function.new(
|
|
17
|
-
DL::Handle::DEFAULT['getsid'],
|
|
18
|
-
[Fiddle::TYPE_INT],
|
|
19
|
-
Fiddle::TYPE_INT
|
|
20
|
-
)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def self.sid
|
|
24
|
-
@sid ||= begin
|
|
25
|
-
if Process.respond_to?(:getsid)
|
|
26
|
-
# Ruby 2
|
|
27
|
-
Process.getsid
|
|
28
|
-
elsif defined?(Fiddle) and defined?(DL)
|
|
29
|
-
# Ruby 1.9.3 compiled with libffi support
|
|
30
|
-
fiddle_func.call(0)
|
|
31
|
-
else
|
|
32
|
-
# last resort: shell out
|
|
33
|
-
`ps -p #{Process.pid} -o sess=`.to_i
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def self.pgid
|
|
39
|
-
Process.getpgid(sid)
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|