guard 1.4.0 → 2.18.0
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 +7 -0
- data/CHANGELOG.md +1 -677
- data/LICENSE +4 -2
- data/README.md +91 -753
- data/bin/_guard-core +11 -0
- data/bin/guard +108 -3
- data/lib/guard/aruba_adapter.rb +59 -0
- data/lib/guard/cli/environments/bundler.rb +22 -0
- data/lib/guard/cli/environments/evaluate_only.rb +35 -0
- data/lib/guard/cli/environments/valid.rb +69 -0
- data/lib/guard/cli.rb +129 -128
- data/lib/guard/commander.rb +104 -0
- data/lib/guard/commands/all.rb +37 -0
- data/lib/guard/commands/change.rb +31 -0
- data/lib/guard/commands/notification.rb +26 -0
- data/lib/guard/commands/pause.rb +29 -0
- data/lib/guard/commands/reload.rb +36 -0
- data/lib/guard/commands/scope.rb +38 -0
- data/lib/guard/commands/show.rb +24 -0
- data/lib/guard/config.rb +18 -0
- data/lib/guard/deprecated/dsl.rb +45 -0
- data/lib/guard/deprecated/evaluator.rb +39 -0
- data/lib/guard/deprecated/guard.rb +328 -0
- data/lib/guard/deprecated/guardfile.rb +84 -0
- data/lib/guard/deprecated/watcher.rb +27 -0
- data/lib/guard/dsl.rb +332 -363
- data/lib/guard/dsl_describer.rb +132 -122
- data/lib/guard/dsl_reader.rb +51 -0
- data/lib/guard/group.rb +34 -14
- data/lib/guard/guardfile/evaluator.rb +232 -0
- data/lib/guard/guardfile/generator.rb +128 -0
- data/lib/guard/guardfile.rb +24 -60
- data/lib/guard/interactor.rb +31 -255
- data/lib/guard/internals/debugging.rb +68 -0
- data/lib/guard/internals/groups.rb +40 -0
- data/lib/guard/internals/helpers.rb +13 -0
- data/lib/guard/internals/plugins.rb +53 -0
- data/lib/guard/internals/queue.rb +51 -0
- data/lib/guard/internals/scope.rb +121 -0
- data/lib/guard/internals/session.rb +180 -0
- data/lib/guard/internals/state.rb +25 -0
- data/lib/guard/internals/tracing.rb +33 -0
- data/lib/guard/internals/traps.rb +10 -0
- data/lib/guard/jobs/base.rb +21 -0
- data/lib/guard/jobs/pry_wrapper.rb +336 -0
- data/lib/guard/jobs/sleep.rb +26 -0
- data/lib/guard/notifier.rb +46 -212
- data/lib/guard/options.rb +22 -0
- data/lib/guard/plugin.rb +303 -0
- data/lib/guard/plugin_util.rb +191 -0
- data/lib/guard/rake_task.rb +42 -0
- data/lib/guard/runner.rb +80 -140
- data/lib/guard/templates/Guardfile +14 -0
- data/lib/guard/terminal.rb +13 -0
- data/lib/guard/ui/colors.rb +56 -0
- data/lib/guard/ui/config.rb +70 -0
- data/lib/guard/ui/logger.rb +30 -0
- data/lib/guard/ui.rb +163 -128
- data/lib/guard/version.rb +1 -2
- data/lib/guard/watcher/pattern/deprecated_regexp.rb +45 -0
- data/lib/guard/watcher/pattern/match_result.rb +18 -0
- data/lib/guard/watcher/pattern/matcher.rb +33 -0
- data/lib/guard/watcher/pattern/pathname_path.rb +15 -0
- data/lib/guard/watcher/pattern/simple_path.rb +23 -0
- data/lib/guard/watcher/pattern.rb +24 -0
- data/lib/guard/watcher.rb +52 -95
- data/lib/guard.rb +108 -376
- data/lib/tasks/releaser.rb +116 -0
- data/man/guard.1 +12 -9
- data/man/guard.1.html +18 -12
- metadata +148 -77
- data/images/guard.png +0 -0
- data/lib/guard/guard.rb +0 -156
- data/lib/guard/hook.rb +0 -120
- data/lib/guard/interactors/coolline.rb +0 -64
- data/lib/guard/interactors/helpers/completion.rb +0 -32
- data/lib/guard/interactors/helpers/terminal.rb +0 -46
- data/lib/guard/interactors/readline.rb +0 -94
- data/lib/guard/interactors/simple.rb +0 -19
- data/lib/guard/notifiers/emacs.rb +0 -69
- data/lib/guard/notifiers/gntp.rb +0 -118
- data/lib/guard/notifiers/growl.rb +0 -99
- data/lib/guard/notifiers/growl_notify.rb +0 -92
- data/lib/guard/notifiers/libnotify.rb +0 -96
- data/lib/guard/notifiers/notifysend.rb +0 -84
- data/lib/guard/notifiers/rb_notifu.rb +0 -102
- data/lib/guard/notifiers/terminal_notifier.rb +0 -66
- data/lib/guard/notifiers/tmux.rb +0 -69
- data/lib/guard/version.rbc +0 -130
data/bin/_guard-core
ADDED
data/bin/guard
CHANGED
@@ -1,6 +1,111 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require 'guard/cli'
|
3
|
+
require "pathname"
|
5
4
|
|
6
|
-
|
5
|
+
class GuardReloader
|
6
|
+
class Config
|
7
|
+
def using_rubygems?
|
8
|
+
ENV["RUBYGEMS_GEMDEPS"]
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup_rubygems_for_deps
|
12
|
+
require "rubygems"
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_bundler_gemfile
|
16
|
+
ENV["BUNDLE_GEMFILE"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def using_bundler?
|
20
|
+
ENV["BUNDLE_GEMFILE"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def setup_bundler_env(gemfile)
|
24
|
+
ENV["BUNDLE_GEMFILE"] = gemfile
|
25
|
+
end
|
26
|
+
|
27
|
+
def setup_bundler
|
28
|
+
require "rubygems"
|
29
|
+
require "bundler/setup"
|
30
|
+
end
|
31
|
+
|
32
|
+
def program_path
|
33
|
+
Pathname(__FILE__)
|
34
|
+
end
|
35
|
+
|
36
|
+
def program_arguments
|
37
|
+
ARGV
|
38
|
+
end
|
39
|
+
|
40
|
+
def windows?
|
41
|
+
Gem.win_platform?
|
42
|
+
end
|
43
|
+
|
44
|
+
def exit_with(code)
|
45
|
+
exit(code)
|
46
|
+
end
|
47
|
+
|
48
|
+
def spawn_with(*args)
|
49
|
+
spawn(*args)
|
50
|
+
end
|
51
|
+
|
52
|
+
def wait_ignoring_interrupts(pid)
|
53
|
+
Process.wait2(pid)[1].exitstatus
|
54
|
+
rescue Interrupt
|
55
|
+
retry
|
56
|
+
rescue Errno::ECHILD
|
57
|
+
1
|
58
|
+
end
|
59
|
+
|
60
|
+
def exist?(path)
|
61
|
+
path.exist?
|
62
|
+
end
|
63
|
+
|
64
|
+
def guard_core_path
|
65
|
+
Gem.bin_path("guard", "_guard-core")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
attr_reader :config
|
70
|
+
def initialize(config)
|
71
|
+
@config = config
|
72
|
+
end
|
73
|
+
|
74
|
+
def setup
|
75
|
+
return config.setup_bundler if config.using_bundler?
|
76
|
+
return config.setup_rubygems_for_deps if config.using_rubygems?
|
77
|
+
|
78
|
+
# No dependency management detected - check if binstubbed by bundler
|
79
|
+
relative_to_binstub = config.program_path + "../../Gemfile"
|
80
|
+
if config.exist?(relative_to_binstub)
|
81
|
+
config.setup_bundler_env(relative_to_binstub.to_s)
|
82
|
+
config.setup_bundler
|
83
|
+
return
|
84
|
+
end
|
85
|
+
|
86
|
+
unless config.exist?(Pathname("Gemfile"))
|
87
|
+
# Running guard with bare ruby here - it's up to the user
|
88
|
+
# to setup/install missing deps
|
89
|
+
return
|
90
|
+
end
|
91
|
+
|
92
|
+
STDERR.puts "Warning: you have a Gemfile, but you're not using"\
|
93
|
+
" bundler or RUBYGEMS_GEMDEPS"
|
94
|
+
end
|
95
|
+
|
96
|
+
def auto_restart
|
97
|
+
args = [Gem.ruby, config.guard_core_path] + config.program_arguments
|
98
|
+
|
99
|
+
loop do
|
100
|
+
exitcode = config.wait_ignoring_interrupts(config.spawn_with(*args))
|
101
|
+
config.exit_with(exitcode) if exitcode != 2
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
unless ENV["GUARD_SPECS_RUNNING"]
|
107
|
+
config = GuardReloader::Config.new
|
108
|
+
reloader = GuardReloader.new(config)
|
109
|
+
reloader.setup
|
110
|
+
reloader.auto_restart
|
111
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require "guard/cli"
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
class ArubaAdapter
|
5
|
+
def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR,
|
6
|
+
kernel = Kernel)
|
7
|
+
@argv = argv
|
8
|
+
@stdin = stdin
|
9
|
+
@stdout = stdout
|
10
|
+
@stderr = stderr
|
11
|
+
@kernel = kernel
|
12
|
+
|
13
|
+
if ENV["INSIDE_ARUBA_TEST"] == "1"
|
14
|
+
UI.options = UI.options.merge(flush_seconds: 0)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute!
|
19
|
+
exit_code = execute
|
20
|
+
# Proxy our exit code back to the injected kernel.
|
21
|
+
@kernel.exit(exit_code)
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute
|
25
|
+
# Thor accesses these streams directly rather than letting
|
26
|
+
# them be injected, so we replace them...
|
27
|
+
$stderr = @stderr
|
28
|
+
$stdin = @stdin
|
29
|
+
$stdout = @stdout
|
30
|
+
|
31
|
+
# Run our normal Thor app the way we know and love.
|
32
|
+
CLI.start(@argv)
|
33
|
+
|
34
|
+
# Thor::Base#start does not have a return value, assume
|
35
|
+
# success if no exception is raised.
|
36
|
+
0
|
37
|
+
rescue StandardError => e
|
38
|
+
# The ruby interpreter would pipe this to STDERR and exit 1 in the case
|
39
|
+
# of an unhandled exception
|
40
|
+
b = e.backtrace
|
41
|
+
@stderr.puts "#{b.shift}: #{e.message} (#{e.class})"
|
42
|
+
@stderr.puts b.map { |s| "\tfrom #{s}" }.join("\n")
|
43
|
+
1
|
44
|
+
rescue SystemExit => e
|
45
|
+
e.status
|
46
|
+
ensure
|
47
|
+
# flush the logger so the output doesn't appear in next CLI invocation
|
48
|
+
Guard.listener.stop if Guard.listener
|
49
|
+
UI.logger.flush
|
50
|
+
UI.logger.close
|
51
|
+
UI.reset_logger
|
52
|
+
|
53
|
+
# ...then we put them back.
|
54
|
+
$stderr = STDERR
|
55
|
+
$stdin = STDIN
|
56
|
+
$stdout = STDOUT
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "guard/ui"
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
module Cli
|
5
|
+
module Environments
|
6
|
+
class Bundler
|
7
|
+
def verify
|
8
|
+
return unless File.exist?("Gemfile")
|
9
|
+
return if ENV["BUNDLE_GEMFILE"] || ENV["RUBYGEMS_GEMDEPS"]
|
10
|
+
UI.info <<EOF
|
11
|
+
|
12
|
+
Guard here! It looks like your project has a Gemfile, yet you are running
|
13
|
+
`guard` outside of Bundler. If this is your intent, feel free to ignore this
|
14
|
+
message. Otherwise, consider using `bundle exec guard` to ensure your
|
15
|
+
dependencies are loaded correctly.
|
16
|
+
(You can run `guard` with --no-bundler-warning to get rid of this message.)
|
17
|
+
EOF
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "guard"
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
module Cli
|
5
|
+
module Environments
|
6
|
+
class EvaluateOnly
|
7
|
+
def initialize(options)
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def evaluate
|
12
|
+
# TODO: check bundler setup first?
|
13
|
+
#
|
14
|
+
# TODO: it should be easier to pass options created with init
|
15
|
+
# directly to evaluator
|
16
|
+
#
|
17
|
+
# TODO: guardfile/DSL should interact only with a given object, and
|
18
|
+
# not global Guard object (setting global state only needed before
|
19
|
+
# start() is called)
|
20
|
+
#
|
21
|
+
Guard.init(@options)
|
22
|
+
session = Guard.state.session
|
23
|
+
Guardfile::Evaluator.new(session.evaluator_options).evaluate
|
24
|
+
rescue \
|
25
|
+
Dsl::Error,
|
26
|
+
Guardfile::Evaluator::NoPluginsError,
|
27
|
+
Guardfile::Evaluator::NoGuardfileError,
|
28
|
+
Guardfile::Evaluator::NoCustomGuardfile => e
|
29
|
+
UI.error(e.message)
|
30
|
+
abort
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require "guard/cli/environments/bundler"
|
2
|
+
require "guard/commander"
|
3
|
+
require "guard/guardfile/generator"
|
4
|
+
|
5
|
+
module Guard
|
6
|
+
module Cli
|
7
|
+
module Environments
|
8
|
+
class Valid
|
9
|
+
def initialize(options)
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
13
|
+
def start_guard
|
14
|
+
# TODO: just to make sure tests are ok
|
15
|
+
Bundler.new.verify unless @options[:no_bundler_warning]
|
16
|
+
Guard.start(@options)
|
17
|
+
rescue Dsl::Error,
|
18
|
+
Guardfile::Evaluator::NoPluginsError,
|
19
|
+
Guardfile::Evaluator::NoGuardfileError,
|
20
|
+
Guardfile::Evaluator::NoCustomGuardfile => e
|
21
|
+
# catch to throw message instead of call stack
|
22
|
+
UI.error(e.message)
|
23
|
+
abort
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize_guardfile(plugin_names = [])
|
27
|
+
bare = @options[:bare]
|
28
|
+
|
29
|
+
Guard.init(@options)
|
30
|
+
session = Guard.state.session
|
31
|
+
|
32
|
+
generator = Guardfile::Generator.new
|
33
|
+
begin
|
34
|
+
Guardfile::Evaluator.new(session.evaluator_options).evaluate
|
35
|
+
rescue Guardfile::Evaluator::NoGuardfileError
|
36
|
+
generator.create_guardfile
|
37
|
+
rescue Guard::Guardfile::Evaluator::NoPluginsError
|
38
|
+
# Do nothing - just the error
|
39
|
+
end
|
40
|
+
|
41
|
+
return 0 if bare # 0 - exit code
|
42
|
+
|
43
|
+
# Evaluate because it might have existed and creating was skipped
|
44
|
+
begin
|
45
|
+
Guardfile::Evaluator.new(session.evaluator_options).evaluate
|
46
|
+
rescue Guard::Guardfile::Evaluator::NoPluginsError
|
47
|
+
end
|
48
|
+
|
49
|
+
begin
|
50
|
+
if plugin_names.empty?
|
51
|
+
generator.initialize_all_templates
|
52
|
+
else
|
53
|
+
plugin_names.each do |plugin_name|
|
54
|
+
generator.initialize_template(plugin_name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
rescue Guardfile::Generator::Error => e
|
58
|
+
UI.error(e.message)
|
59
|
+
return 1
|
60
|
+
end
|
61
|
+
|
62
|
+
# TODO: capture exceptions to show msg and return exit code on
|
63
|
+
# failures
|
64
|
+
0 # exit code
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/guard/cli.rb
CHANGED
@@ -1,125 +1,152 @@
|
|
1
|
-
require
|
1
|
+
require "thor"
|
2
2
|
|
3
|
-
|
3
|
+
require "guard/version"
|
4
|
+
|
5
|
+
require "guard/dsl_describer"
|
6
|
+
require "guard/cli/environments/valid"
|
7
|
+
require "guard/cli/environments/evaluate_only"
|
4
8
|
|
5
|
-
|
6
|
-
#
|
7
|
-
#
|
9
|
+
module Guard
|
10
|
+
# Facade for the Guard command line interface managed by
|
11
|
+
# [Thor](https://github.com/wycats/thor).
|
12
|
+
#
|
13
|
+
# This is the main interface to Guard that is called by the Guard binary
|
14
|
+
# `bin/guard`. Do not put any logic in here, create a class and delegate
|
15
|
+
# instead.
|
8
16
|
#
|
9
17
|
class CLI < Thor
|
10
|
-
|
11
|
-
require 'guard'
|
12
|
-
require 'guard/version'
|
13
|
-
require 'guard/dsl_describer'
|
14
|
-
require 'guard/guardfile'
|
15
|
-
|
16
18
|
default_task :start
|
17
19
|
|
18
|
-
desc
|
20
|
+
desc "start", "Starts Guard"
|
19
21
|
|
20
22
|
method_option :clear,
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
23
|
+
type: :boolean,
|
24
|
+
default: false,
|
25
|
+
aliases: "-c",
|
26
|
+
banner: "Auto clear shell before each action"
|
25
27
|
|
26
28
|
method_option :notify,
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
29
|
+
type: :boolean,
|
30
|
+
default: true,
|
31
|
+
aliases: "-n",
|
32
|
+
banner: "Notifications feature"
|
31
33
|
|
32
34
|
method_option :debug,
|
33
|
-
:
|
34
|
-
:
|
35
|
-
:
|
36
|
-
:
|
35
|
+
type: :boolean,
|
36
|
+
default: false,
|
37
|
+
aliases: "-d",
|
38
|
+
banner: "Show debug information"
|
37
39
|
|
38
40
|
method_option :group,
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
43
|
-
|
41
|
+
type: :array,
|
42
|
+
default: [],
|
43
|
+
aliases: "-g",
|
44
|
+
banner: "Run only the passed groups"
|
45
|
+
|
46
|
+
method_option :plugin,
|
47
|
+
type: :array,
|
48
|
+
default: [],
|
49
|
+
aliases: "-P",
|
50
|
+
banner: "Run only the passed plugins"
|
51
|
+
|
52
|
+
# TODO: make it plural
|
44
53
|
method_option :watchdir,
|
45
|
-
:
|
46
|
-
:
|
47
|
-
:
|
54
|
+
type: :array,
|
55
|
+
aliases: "-w",
|
56
|
+
banner: "Specify the directories to watch"
|
48
57
|
|
49
58
|
method_option :guardfile,
|
50
|
-
:
|
51
|
-
:
|
52
|
-
:
|
53
|
-
|
54
|
-
# DEPRECATED
|
55
|
-
method_option :no_vendor,
|
56
|
-
:type => :boolean,
|
57
|
-
:default => false,
|
58
|
-
:aliases => '-I',
|
59
|
-
:banner => 'DEPRECATED: Ignore vendored dependencies'
|
60
|
-
|
61
|
-
# DEPRECATED
|
62
|
-
method_option :watch_all_modifications,
|
63
|
-
:type => :boolean,
|
64
|
-
:default => false,
|
65
|
-
:aliases => '-A',
|
66
|
-
:banner => 'DEPRECATED: Watch for all file modifications including moves and deletions'
|
59
|
+
type: :string,
|
60
|
+
aliases: "-G",
|
61
|
+
banner: "Specify a Guardfile"
|
67
62
|
|
68
63
|
method_option :no_interactions,
|
69
|
-
:
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
64
|
+
type: :boolean,
|
65
|
+
default: false,
|
66
|
+
aliases: "-i",
|
67
|
+
banner: "Turn off completely any Guard terminal interactions"
|
73
68
|
|
74
69
|
method_option :no_bundler_warning,
|
75
|
-
:
|
76
|
-
:
|
77
|
-
:
|
78
|
-
:
|
79
|
-
|
80
|
-
method_option :show_deprecations,
|
81
|
-
:type => :boolean,
|
82
|
-
:default => false,
|
83
|
-
:banner => 'Turn on deprecation warnings'
|
70
|
+
type: :boolean,
|
71
|
+
default: false,
|
72
|
+
aliases: "-B",
|
73
|
+
banner: "Turn off warning when Bundler is not present"
|
84
74
|
|
85
75
|
# Listen options
|
86
76
|
method_option :latency,
|
87
|
-
:
|
88
|
-
:
|
89
|
-
:
|
77
|
+
type: :numeric,
|
78
|
+
aliases: "-l",
|
79
|
+
banner: 'Overwrite Listen\'s default latency'
|
90
80
|
|
91
81
|
method_option :force_polling,
|
92
|
-
:
|
93
|
-
:
|
94
|
-
:
|
95
|
-
:
|
82
|
+
type: :boolean,
|
83
|
+
default: false,
|
84
|
+
aliases: "-p",
|
85
|
+
banner: "Force usage of the Listen polling listener"
|
86
|
+
|
87
|
+
method_option :wait_for_delay,
|
88
|
+
type: :numeric,
|
89
|
+
aliases: "-y",
|
90
|
+
banner: 'Overwrite Listen\'s default wait_for_delay'
|
91
|
+
|
92
|
+
method_option :listen_on,
|
93
|
+
type: :string,
|
94
|
+
aliases: "-o",
|
95
|
+
default: nil,
|
96
|
+
banner: "Specify a network address to Listen on for "\
|
97
|
+
"file change events (e.g. for use in VMs)"
|
98
|
+
|
99
|
+
def self.help(shell, subcommand = false)
|
100
|
+
super
|
101
|
+
command_help(shell, default_task)
|
102
|
+
end
|
96
103
|
|
97
|
-
# Start Guard by initializing the defined Guard plugins and watch the file
|
98
|
-
#
|
104
|
+
# Start Guard by initializing the defined Guard plugins and watch the file
|
105
|
+
# system.
|
106
|
+
#
|
107
|
+
# This is the default task, so calling `guard` is the same as calling
|
108
|
+
# `guard start`.
|
99
109
|
#
|
100
110
|
# @see Guard.start
|
101
111
|
#
|
102
112
|
def start
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
113
|
+
if defined?(JRUBY_VERSION)
|
114
|
+
unless options[:no_interactions]
|
115
|
+
abort "\nSorry, JRuby and interactive mode are incompatible.\n"\
|
116
|
+
"As a workaround, use the '-i' option instead.\n\n"\
|
117
|
+
"More info: \n"\
|
118
|
+
" * https://github.com/guard/guard/issues/754\n"\
|
119
|
+
" * https://github.com/jruby/jruby/issues/2383\n\n"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
exit(Cli::Environments::Valid.new(options).start_guard)
|
108
123
|
end
|
109
124
|
|
110
|
-
desc
|
125
|
+
desc "list", "Lists Guard plugins that can be used with init"
|
111
126
|
|
112
|
-
# List the Guard plugins that are available for use in your system and
|
113
|
-
# those that are currently used in your `Guardfile`.
|
127
|
+
# List the Guard plugins that are available for use in your system and
|
128
|
+
# marks those that are currently used in your `Guardfile`.
|
114
129
|
#
|
115
130
|
# @see Guard::DslDescriber.list
|
116
131
|
#
|
117
132
|
def list
|
118
|
-
|
119
|
-
|
133
|
+
Cli::Environments::EvaluateOnly.new(options).evaluate
|
134
|
+
DslDescriber.new.list
|
135
|
+
end
|
136
|
+
|
137
|
+
desc "notifiers", "Lists notifiers and its options"
|
138
|
+
|
139
|
+
# List the Notifiers for use in your system.
|
140
|
+
#
|
141
|
+
# @see Guard::DslDescriber.notifiers
|
142
|
+
#
|
143
|
+
def notifiers
|
144
|
+
Cli::Environments::EvaluateOnly.new(options).evaluate
|
145
|
+
# TODO: pass the data directly to the notifiers?
|
146
|
+
DslDescriber.new.notifiers
|
120
147
|
end
|
121
148
|
|
122
|
-
desc
|
149
|
+
desc "version", "Show the Guard version"
|
123
150
|
map %w(-v --version) => :version
|
124
151
|
|
125
152
|
# Shows the current version of Guard.
|
@@ -127,44 +154,37 @@ module Guard
|
|
127
154
|
# @see Guard::VERSION
|
128
155
|
#
|
129
156
|
def version
|
130
|
-
|
131
|
-
::Guard::UI.info "Guard version #{ ::Guard::VERSION }"
|
157
|
+
$stdout.puts "Guard version #{ VERSION }"
|
132
158
|
end
|
133
159
|
|
134
|
-
desc
|
160
|
+
desc "init [GUARDS]", "Generates a Guardfile at the current directory"\
|
161
|
+
" (if it is not already there) and adds all installed Guard plugins"\
|
162
|
+
" or the given GUARDS into it"
|
135
163
|
|
136
164
|
method_option :bare,
|
137
|
-
:
|
138
|
-
:
|
139
|
-
:
|
140
|
-
:
|
165
|
+
type: :boolean,
|
166
|
+
default: false,
|
167
|
+
aliases: "-b",
|
168
|
+
banner: "Generate a bare Guardfile without adding any"\
|
169
|
+
" installed plugin into it"
|
141
170
|
|
142
171
|
# Initializes the templates of all installed Guard plugins and adds them
|
143
172
|
# to the `Guardfile` when no Guard name is passed. When passing
|
144
173
|
# Guard plugin names it does the same but only for those Guard plugins.
|
145
174
|
#
|
146
|
-
# @see Guard::
|
147
|
-
# @see Guard::
|
175
|
+
# @see Guard::Guardfile.initialize_template
|
176
|
+
# @see Guard::Guardfile.initialize_all_templates
|
148
177
|
#
|
149
|
-
# @param [Array<String>]
|
178
|
+
# @param [Array<String>] plugin_names the name of the Guard plugins to
|
179
|
+
# initialize
|
150
180
|
#
|
151
|
-
def init(*
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
return if options[:bare]
|
157
|
-
|
158
|
-
if guard_names.empty?
|
159
|
-
::Guard::Guardfile::initialize_all_templates
|
160
|
-
else
|
161
|
-
guard_names.each do |guard_name|
|
162
|
-
::Guard::Guardfile.initialize_template(guard_name)
|
163
|
-
end
|
164
|
-
end
|
181
|
+
def init(*plugin_names)
|
182
|
+
env = Cli::Environments::Valid.new(options)
|
183
|
+
exitcode = env.initialize_guardfile(plugin_names)
|
184
|
+
exit(exitcode)
|
165
185
|
end
|
166
186
|
|
167
|
-
desc
|
187
|
+
desc "show", "Show all defined Guard plugins and their options"
|
168
188
|
map %w(-T) => :show
|
169
189
|
|
170
190
|
# Shows all Guard plugins and their options that are defined in
|
@@ -173,27 +193,8 @@ module Guard
|
|
173
193
|
# @see Guard::DslDescriber.show
|
174
194
|
#
|
175
195
|
def show
|
176
|
-
|
177
|
-
|
196
|
+
Cli::Environments::EvaluateOnly.new(options).evaluate
|
197
|
+
DslDescriber.new.show
|
178
198
|
end
|
179
|
-
|
180
|
-
private
|
181
|
-
|
182
|
-
# Verifies if Guard is run with `bundle exec` and
|
183
|
-
# shows a hint to do so if not.
|
184
|
-
#
|
185
|
-
def verify_bundler_presence
|
186
|
-
if File.exists?('Gemfile') && !ENV['BUNDLE_GEMFILE']
|
187
|
-
::Guard::UI.info <<EOF
|
188
|
-
|
189
|
-
Guard here! It looks like your project has a Gemfile, yet you are running
|
190
|
-
`guard` outside of Bundler. If this is your intent, feel free to ignore this
|
191
|
-
message. Otherwise, consider using `bundle exec guard` to ensure your
|
192
|
-
dependencies are loaded correctly.
|
193
|
-
(You can run `guard` with --no-bundler-warning to get rid of this message.)
|
194
|
-
EOF
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
199
|
end
|
199
200
|
end
|