fig 0.1.62 → 0.1.64
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.
- data/Changes +156 -0
- data/VERSION +1 -1
- data/bin/fig +9 -2
- data/bin/fig-debug +9 -2
- data/lib/fig/applicationconfiguration.rb +3 -2
- data/lib/fig/atexit.rb +37 -0
- data/lib/fig/backtrace.rb +23 -6
- data/lib/fig/command.rb +131 -31
- data/lib/fig/command/coveragesupport.rb +40 -0
- data/lib/fig/command/listing.rb +8 -8
- data/lib/fig/command/optionerror.rb +8 -0
- data/lib/fig/{options.rb → command/options.rb} +248 -144
- data/lib/fig/command/packageload.rb +161 -62
- data/lib/fig/configfileerror.rb +2 -0
- data/lib/fig/environment.rb +350 -246
- data/lib/fig/environmentvariables/casesensitive.rb +1 -1
- data/lib/fig/figrc.rb +78 -78
- data/lib/fig/grammar.treetop +204 -219
- data/lib/fig/log4rconfigerror.rb +2 -0
- data/lib/fig/operatingsystem.rb +382 -334
- data/lib/fig/package.rb +11 -33
- data/lib/fig/packagecache.rb +1 -1
- data/lib/fig/packagedescriptor.rb +103 -21
- data/lib/fig/packagedescriptorparseerror.rb +16 -0
- data/lib/fig/parser.rb +36 -19
- data/lib/fig/parserpackagebuildstate.rb +56 -0
- data/lib/fig/repository.rb +504 -259
- data/lib/fig/statement.rb +30 -12
- data/lib/fig/statement/archive.rb +8 -5
- data/lib/fig/statement/asset.rb +19 -0
- data/lib/fig/statement/command.rb +2 -2
- data/lib/fig/statement/configuration.rb +20 -20
- data/lib/fig/statement/include.rb +13 -34
- data/lib/fig/statement/override.rb +21 -7
- data/lib/fig/statement/path.rb +22 -2
- data/lib/fig/statement/resource.rb +14 -4
- data/lib/fig/statement/retrieve.rb +34 -4
- data/lib/fig/statement/set.rb +22 -2
- data/lib/fig/workingdirectorymaintainer.rb +197 -0
- data/lib/fig/workingdirectorymetadata.rb +45 -0
- metadata +52 -46
- data/lib/fig/retriever.rb +0 -141
- data/lib/fig/statement/publish.rb +0 -15
data/Changes
CHANGED
@@ -1,3 +1,159 @@
|
|
1
|
+
v0.1.64
|
2
|
+
|
3
|
+
Backwards incompatibilities:
|
4
|
+
|
5
|
+
- --set and --append command-line options now take priority over package.fig
|
6
|
+
files and --include options are now processed after any "include"
|
7
|
+
statements.
|
8
|
+
|
9
|
+
Previously, "fig foo/1.2.3 --set SET=command-line --append
|
10
|
+
APPEND=command-line --include command-line/1.2.3" was equivalent to
|
11
|
+
|
12
|
+
config default
|
13
|
+
set SET=command-line
|
14
|
+
add APPEND=command-line
|
15
|
+
include command-line/1.2.3
|
16
|
+
|
17
|
+
include foo/1.2.3
|
18
|
+
end
|
19
|
+
|
20
|
+
Now it is equivalent to
|
21
|
+
|
22
|
+
config default
|
23
|
+
include foo/1.2.3
|
24
|
+
|
25
|
+
set SET=command-line
|
26
|
+
add APPEND=command-line
|
27
|
+
include command-line/1.2.3
|
28
|
+
end
|
29
|
+
|
30
|
+
(It really is like that: a package is synthesized with statements
|
31
|
+
equivalent to the command-line options and that package is run through the
|
32
|
+
whole process.)
|
33
|
+
|
34
|
+
- Retrieve variable names can no longer contain "@", "/", or ".". Since
|
35
|
+
environment variable statements only allow alphanumerics and underscore in
|
36
|
+
the variable names, any retrieve variable with those characters in its name
|
37
|
+
would never have any effect.
|
38
|
+
|
39
|
+
- Running fig --publish or --publish-local with --resource or --archive
|
40
|
+
options without also specifying a --set or --append option is now an error.
|
41
|
+
|
42
|
+
What would previously happen is that the --resource and --archive options
|
43
|
+
were ignored and package.fig locating would happen and the publish would be
|
44
|
+
based only on that. Probably not what was intended.
|
45
|
+
|
46
|
+
E.g.:
|
47
|
+
|
48
|
+
fig --publish foo/1 --resource=something.txt
|
49
|
+
|
50
|
+
would ignore the --resource option, look for a package.fig file and publish
|
51
|
+
based upon that.
|
52
|
+
|
53
|
+
- Now fails if you specify both a descriptor and the --file option and you
|
54
|
+
aren't publishing. Previously it would silently ignore the --file option,
|
55
|
+
which could be a bit more than a little surprising.
|
56
|
+
|
57
|
+
New features:
|
58
|
+
|
59
|
+
- Overrides are now independent statements, no longer attached to includes.
|
60
|
+
E.g. this
|
61
|
+
|
62
|
+
config default
|
63
|
+
include A/1 override C/3
|
64
|
+
include B/1 override C/3
|
65
|
+
end
|
66
|
+
|
67
|
+
is now equivalent to this
|
68
|
+
|
69
|
+
config default
|
70
|
+
override C/3
|
71
|
+
include A/1
|
72
|
+
include B/1
|
73
|
+
end
|
74
|
+
|
75
|
+
No changes to existing (functioning) package.fig files will be necessary.
|
76
|
+
In fact, this will fix some that didn't work due to versionless includes.
|
77
|
+
|
78
|
+
- You can now specify overrides on the command-line using "--override".
|
79
|
+
|
80
|
+
- Now checks repository format version and fails if it's different from what
|
81
|
+
it knows about.
|
82
|
+
|
83
|
+
There are no immediate plans to change the repository format, but
|
84
|
+
considering the inability to fix the non-unique archive name issue below,
|
85
|
+
it behooves us to allow for a format change in the future. If the layout
|
86
|
+
does change, then current code could possibly corrupt the future
|
87
|
+
repository.
|
88
|
+
|
89
|
+
- Warns if you attempt to use a "retrieve" statement to write to an absolute
|
90
|
+
path; all retrieve destinations are relative.
|
91
|
+
|
92
|
+
- Now warns about ineffectual "retrieve" statements.
|
93
|
+
|
94
|
+
- A lot of existence checks have been added, resulting in nicer error
|
95
|
+
messages and fewer stack traces.
|
96
|
+
|
97
|
+
- README.md has had most of its content ripped out. Documentation has been
|
98
|
+
greatly expanded and is available at https://github.com/mfoemmel/fig/wiki.
|
99
|
+
|
100
|
+
- Includes the Fig version in the comments in published .fig files.
|
101
|
+
|
102
|
+
Bug fixes:
|
103
|
+
|
104
|
+
- Better command-line parsing. There were a number of scenarios where
|
105
|
+
missing or malformed arguments to options would cause incorrect behavior or
|
106
|
+
stack traces.
|
107
|
+
|
108
|
+
- Handling of symlinks is better.
|
109
|
+
|
110
|
+
- Now checks that archive base names are unique before allowing publishing.
|
111
|
+
Previously, if you had something like
|
112
|
+
|
113
|
+
archive http://somewhere/archive.tar.gz
|
114
|
+
archive foo/archive.tar.gz
|
115
|
+
|
116
|
+
everything would work locally, but the version of the package published to
|
117
|
+
the remote repository was corrupt. Given the current repository layout,
|
118
|
+
this is not fixable, so we now disallow publishing packages like this.
|
119
|
+
|
120
|
+
Similarly, we now complain about archives named "resources.tar.gz" because
|
121
|
+
Fig creates an archive by that name to hold resources.
|
122
|
+
|
123
|
+
- Updates should be more robust in the face of simultaneous runs of fig.
|
124
|
+
|
125
|
+
- Retrieves:
|
126
|
+
|
127
|
+
* Now saves retrieve metadata prior to an exec(2). Previously, if you ran
|
128
|
+
a command, Fig would lose track of what you had in your current
|
129
|
+
directory.
|
130
|
+
|
131
|
+
* Cleanup of retrieves for no-longer-referenced packages now happens, i.e.,
|
132
|
+
if a dependency removes a dependency, files are correctly removed.
|
133
|
+
|
134
|
+
Note that, depending upon the packages involved, switching between two
|
135
|
+
base packages can be slower than it was before. In other words, if
|
136
|
+
packages "foo" and "bar" have a lot of retrieves of dependences NOT in
|
137
|
+
common, running
|
138
|
+
|
139
|
+
fig --update-if-missing foo/v1.2.3
|
140
|
+
fig --update-if-missing bar/v6.5.4
|
141
|
+
|
142
|
+
will be slower. On the other hand, you won't have a lot of stuff from
|
143
|
+
"foo" hanging around that shouldn't be there.
|
144
|
+
|
145
|
+
v0.1.63.beta.2
|
146
|
+
v0.1.63.beta.1
|
147
|
+
|
148
|
+
- Test releases
|
149
|
+
|
150
|
+
v0.1.62
|
151
|
+
|
152
|
+
Bug fixes:
|
153
|
+
|
154
|
+
- Fixed stack trace when encountering conflicting dependency package
|
155
|
+
versions.
|
156
|
+
|
1
157
|
v0.1.61
|
2
158
|
|
3
159
|
New features:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.64
|
data/bin/fig
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
if ENV['FIG_COVERAGE']
|
4
|
+
require File.expand_path(
|
5
|
+
File.join(
|
6
|
+
File.dirname(__FILE__), %w< .. lib fig command coveragesupport.rb >
|
7
|
+
)
|
8
|
+
)
|
9
|
+
end
|
10
|
+
|
3
11
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), %w< .. lib > ))
|
4
12
|
|
5
13
|
require 'rubygems'
|
6
14
|
|
7
15
|
require 'fig/command'
|
8
16
|
|
9
|
-
|
10
|
-
exit return_code
|
17
|
+
exit Fig::Command.new.run_with_exception_handling ARGV
|
data/bin/fig-debug
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
if ENV['FIG_COVERAGE']
|
4
|
+
require File.expand_path(
|
5
|
+
File.join(
|
6
|
+
File.dirname(__FILE__), %w< .. lib fig command coveragesupport.rb >
|
7
|
+
)
|
8
|
+
)
|
9
|
+
end
|
10
|
+
|
3
11
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), %w< .. lib > ))
|
4
12
|
|
5
13
|
require 'rubygems'
|
@@ -8,5 +16,4 @@ require 'fig/command'
|
|
8
16
|
|
9
17
|
# Identical to regular fig, but doesn't use exception handling so you can see
|
10
18
|
# stack traces.
|
11
|
-
|
12
|
-
exit return_code
|
19
|
+
exit Fig::Command.new.run_fig ARGV
|
@@ -1,8 +1,9 @@
|
|
1
1
|
module Fig; end
|
2
2
|
|
3
|
-
# Configuration for the Fig program, as opposed to
|
4
|
-
# package.
|
3
|
+
# Configuration for the Fig program, as opposed to a config in a package.
|
5
4
|
class Fig::ApplicationConfiguration
|
5
|
+
attr_reader :remote_repository_url
|
6
|
+
|
6
7
|
def initialize(remote_repository_url)
|
7
8
|
@data = []
|
8
9
|
@remote_repository_url = remote_repository_url
|
data/lib/fig/atexit.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module Fig; end
|
2
|
+
|
3
|
+
# This exists because standard Kernel#at_exit blocks don't get run before
|
4
|
+
# Kernel#exec.
|
5
|
+
class Fig::AtExit
|
6
|
+
def self.add(&block)
|
7
|
+
EXIT_PROCS << block
|
8
|
+
|
9
|
+
return
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.execute()
|
13
|
+
EXIT_PROCS.each do
|
14
|
+
|proc|
|
15
|
+
|
16
|
+
begin
|
17
|
+
proc.call()
|
18
|
+
rescue StandardError => exception
|
19
|
+
$stderr.puts(
|
20
|
+
[
|
21
|
+
%q<Got exception from "at exit" processing.>,
|
22
|
+
exception.message,
|
23
|
+
exception.backtrace
|
24
|
+
].flatten.join("\n")
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
EXIT_PROCS = []
|
35
|
+
|
36
|
+
at_exit { Fig::AtExit.execute() }
|
37
|
+
end
|
data/lib/fig/backtrace.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
+
require 'fig/repositoryerror'
|
2
|
+
|
1
3
|
module Fig; end
|
2
4
|
|
3
|
-
#
|
4
|
-
# an error occurred in.
|
5
|
+
# Keeps track of overrides and can produce package definition stack traces.
|
5
6
|
class Fig::Backtrace
|
6
7
|
attr_reader :overrides
|
7
8
|
|
@@ -11,11 +12,21 @@ class Fig::Backtrace
|
|
11
12
|
@overrides = {}
|
12
13
|
end
|
13
14
|
|
14
|
-
def add_override(
|
15
|
+
def add_override(statement)
|
16
|
+
package_name = statement.package_name
|
15
17
|
# Don't replace an existing override on the stack
|
16
|
-
return if get_override(package_name)
|
18
|
+
return if @parent && @parent.get_override(package_name)
|
19
|
+
|
20
|
+
new_version = statement.version
|
21
|
+
existing_version = @overrides[package_name]
|
22
|
+
if existing_version && existing_version != new_version
|
23
|
+
stacktrace = dump_to_string()
|
24
|
+
raise Fig::RepositoryError.new(
|
25
|
+
"Override #{package_name} version conflict (#{existing_version} vs #{new_version})#{statement.position_string}." + ( stacktrace.empty? ? '' : "\n#{stacktrace}" )
|
26
|
+
)
|
27
|
+
end
|
17
28
|
|
18
|
-
@overrides[package_name] =
|
29
|
+
@overrides[package_name] = new_version
|
19
30
|
end
|
20
31
|
|
21
32
|
# Returns a version.
|
@@ -31,7 +42,7 @@ class Fig::Backtrace
|
|
31
42
|
def dump(out)
|
32
43
|
stack = []
|
33
44
|
collect(stack)
|
34
|
-
i=0
|
45
|
+
i = 0
|
35
46
|
for descriptor in stack
|
36
47
|
indent=''
|
37
48
|
i.times { indent += ' ' }
|
@@ -42,6 +53,12 @@ class Fig::Backtrace
|
|
42
53
|
|
43
54
|
protected
|
44
55
|
|
56
|
+
def dump_to_string()
|
57
|
+
string_handle = StringIO.new
|
58
|
+
dump(string_handle)
|
59
|
+
return string_handle.string
|
60
|
+
end
|
61
|
+
|
45
62
|
def collect(stack)
|
46
63
|
if @parent
|
47
64
|
@parent.collect(stack)
|
data/lib/fig/command.rb
CHANGED
@@ -2,27 +2,28 @@ require 'rubygems'
|
|
2
2
|
require 'net/ftp'
|
3
3
|
require 'set'
|
4
4
|
|
5
|
+
require 'fig/atexit'
|
6
|
+
require 'fig/command/options'
|
5
7
|
require 'fig/environment'
|
6
8
|
require 'fig/figrc'
|
7
9
|
require 'fig/logging'
|
8
10
|
require 'fig/operatingsystem'
|
9
|
-
require 'fig/options'
|
10
11
|
require 'fig/package'
|
11
12
|
require 'fig/parser'
|
12
13
|
require 'fig/repository'
|
13
14
|
require 'fig/repositoryerror'
|
14
|
-
require 'fig/retriever'
|
15
15
|
require 'fig/statement/configuration'
|
16
|
-
require 'fig/statement/publish'
|
17
16
|
require 'fig/userinputerror'
|
17
|
+
require 'fig/workingdirectorymaintainer'
|
18
18
|
|
19
|
-
#
|
19
|
+
# The following are a break out of parts of this class simply to keep the file
|
20
|
+
# size down.
|
20
21
|
|
21
22
|
# You will need to look in this file for any stuff related to --list-* options.
|
22
23
|
require 'fig/command/listing'
|
23
24
|
|
24
25
|
# You will need to look in this file for any stuff related to loading the
|
25
|
-
#
|
26
|
+
# base Package object.
|
26
27
|
require 'fig/command/packageload'
|
27
28
|
|
28
29
|
module Fig; end
|
@@ -32,17 +33,59 @@ class Fig::Command
|
|
32
33
|
include Fig::Command::Listing
|
33
34
|
include Fig::Command::PackageLoad
|
34
35
|
|
36
|
+
def self.get_version()
|
37
|
+
line = nil
|
38
|
+
|
39
|
+
begin
|
40
|
+
File.open(
|
41
|
+
"#{File.expand_path(File.dirname(__FILE__) + '/../../VERSION')}"
|
42
|
+
) do |file|
|
43
|
+
line = file.gets
|
44
|
+
end
|
45
|
+
rescue
|
46
|
+
$stderr.puts 'Could not retrieve version number. Something has mucked with your Fig install.'
|
47
|
+
|
48
|
+
return nil
|
49
|
+
end
|
50
|
+
|
51
|
+
# Note that we accept anything that contains three decimal numbers
|
52
|
+
# seperated by periods. This allows for versions like
|
53
|
+
# "4.3.2-super-special-version-in-3D".
|
54
|
+
if line !~ %r< \b \d+ [.] \d+ [.] \d+ \b >x
|
55
|
+
$stderr.puts %Q<"#{line}" does not look like a version number. Something has mucked with your Fig install.>
|
56
|
+
|
57
|
+
return nil
|
58
|
+
end
|
59
|
+
|
60
|
+
return line
|
61
|
+
end
|
62
|
+
|
35
63
|
def run_fig(argv)
|
36
|
-
|
64
|
+
begin
|
65
|
+
@options = Fig::Command::Options.new(argv)
|
66
|
+
rescue Fig::UserInputError => error
|
67
|
+
$stderr.puts error.to_s # Logging isn't set up yet.
|
68
|
+
return 1
|
69
|
+
end
|
70
|
+
|
37
71
|
if not @options.exit_code.nil?
|
38
72
|
return @options.exit_code
|
39
73
|
end
|
40
74
|
@descriptor = @options.descriptor
|
41
75
|
|
76
|
+
if @options.help?
|
77
|
+
return @options.help
|
78
|
+
end
|
79
|
+
|
80
|
+
if @options.version?
|
81
|
+
return emit_version()
|
82
|
+
end
|
83
|
+
|
42
84
|
configure()
|
43
85
|
|
44
86
|
if @options.clean?
|
45
87
|
check_required_package_descriptor('to clean')
|
88
|
+
ensure_descriptor_and_file_were_not_both_specified()
|
46
89
|
@repository.clean(@descriptor)
|
47
90
|
return 0
|
48
91
|
end
|
@@ -55,26 +98,30 @@ class Fig::Command
|
|
55
98
|
return publish()
|
56
99
|
end
|
57
100
|
|
101
|
+
ensure_descriptor_and_file_were_not_both_specified()
|
102
|
+
|
58
103
|
load_package_object()
|
59
104
|
|
60
105
|
if @options.listing()
|
61
106
|
handle_post_parse_list_options()
|
62
107
|
elsif @options.get()
|
63
|
-
|
108
|
+
# Ruby v1.8 emits "nil" for nil, whereas ruby v1.9 emits the empty
|
109
|
+
# string, so, for consistency, we need to ensure that we always emit the
|
110
|
+
# empty string.
|
111
|
+
puts @environment[@options.get()] || ''
|
64
112
|
elsif @options.shell_command
|
65
113
|
@environment.execute_shell(@options.shell_command) do
|
66
114
|
|command| @operating_system.shell_exec command
|
67
115
|
end
|
68
116
|
elsif @descriptor
|
69
|
-
@environment.include_config(@
|
117
|
+
@environment.include_config(@base_package, @descriptor, nil)
|
70
118
|
@environment.execute_config(
|
71
|
-
@
|
119
|
+
@base_package,
|
72
120
|
@descriptor,
|
73
121
|
@options.command_extra_argv || []
|
74
122
|
) { |cmd| @operating_system.shell_exec cmd }
|
75
123
|
elsif not @repository.updating?
|
76
|
-
$stderr.puts "Nothing to do.\n"
|
77
|
-
$stderr.puts Fig::Options::USAGE
|
124
|
+
$stderr.puts "Nothing to do.\n\n"
|
78
125
|
$stderr.puts %q<Run "fig --help" for a full list of commands.>
|
79
126
|
return 1
|
80
127
|
end
|
@@ -95,7 +142,7 @@ class Fig::Command
|
|
95
142
|
return 1
|
96
143
|
rescue OptionParser::InvalidOption => error
|
97
144
|
$stderr.puts error.to_s
|
98
|
-
$stderr.puts Fig::Options::USAGE
|
145
|
+
$stderr.puts Fig::Command::Options::USAGE
|
99
146
|
return 1
|
100
147
|
rescue Fig::RepositoryError => error
|
101
148
|
log_error_message(error)
|
@@ -103,6 +150,15 @@ class Fig::Command
|
|
103
150
|
end
|
104
151
|
end
|
105
152
|
|
153
|
+
def emit_version()
|
154
|
+
version = Fig::Command.get_version()
|
155
|
+
return 1 if version.nil?
|
156
|
+
|
157
|
+
puts File.basename($0) + ' v' + version
|
158
|
+
|
159
|
+
return 0
|
160
|
+
end
|
161
|
+
|
106
162
|
private
|
107
163
|
|
108
164
|
def derive_remote_url()
|
@@ -128,11 +184,10 @@ class Fig::Command
|
|
128
184
|
def configure()
|
129
185
|
Fig::Logging.initialize_pre_configuration(@options.log_level())
|
130
186
|
|
131
|
-
remote_url = derive_remote_url()
|
132
187
|
|
133
188
|
@configuration = Fig::FigRC.find(
|
134
189
|
@options.figrc(),
|
135
|
-
|
190
|
+
derive_remote_url(),
|
136
191
|
@options.login?,
|
137
192
|
@options.home(),
|
138
193
|
@options.no_figrc?
|
@@ -146,8 +201,7 @@ class Fig::Command
|
|
146
201
|
@operating_system = Fig::OperatingSystem.new(@options.login?)
|
147
202
|
@repository = Fig::Repository.new(
|
148
203
|
@operating_system,
|
149
|
-
|
150
|
-
remote_url,
|
204
|
+
@options.home(),
|
151
205
|
@configuration,
|
152
206
|
nil, # remote_user
|
153
207
|
@options.update?,
|
@@ -155,15 +209,13 @@ class Fig::Command
|
|
155
209
|
check_include_statements_versions?
|
156
210
|
)
|
157
211
|
|
158
|
-
@
|
159
|
-
|
160
|
-
at_exit { @retriever.save_metadata() }
|
212
|
+
@working_directory_maintainer = Fig::WorkingDirectoryMaintainer.new('.')
|
161
213
|
|
162
|
-
|
163
|
-
|
164
|
-
@options.non_command_package_statements().each do |statement|
|
165
|
-
@environment.apply_config_statement(nil, statement, nil)
|
214
|
+
Fig::AtExit.add do
|
215
|
+
@working_directory_maintainer.prepare_for_shutdown(@options.updating?)
|
166
216
|
end
|
217
|
+
|
218
|
+
prepare_environment()
|
167
219
|
end
|
168
220
|
|
169
221
|
def prepare_environment()
|
@@ -172,7 +224,18 @@ class Fig::Command
|
|
172
224
|
environment_variables = Fig::OperatingSystem.get_environment_variables({})
|
173
225
|
end
|
174
226
|
|
175
|
-
|
227
|
+
@environment = Fig::Environment.new(
|
228
|
+
@repository, environment_variables, @working_directory_maintainer
|
229
|
+
)
|
230
|
+
|
231
|
+
Fig::AtExit.add { @environment.check_unused_retrieves() }
|
232
|
+
|
233
|
+
return
|
234
|
+
end
|
235
|
+
|
236
|
+
def config_was_specified_by_user()
|
237
|
+
return ! @options.config().nil? ||
|
238
|
+
@descriptor && ! @descriptor.config().nil?
|
176
239
|
end
|
177
240
|
|
178
241
|
def base_config()
|
@@ -181,6 +244,29 @@ class Fig::Command
|
|
181
244
|
Fig::Package::DEFAULT_CONFIG
|
182
245
|
end
|
183
246
|
|
247
|
+
# If the user has specified a descriptor, than any package.fig or --file
|
248
|
+
# option is ignored. Thus, in order to avoid confusing the user, we make
|
249
|
+
# specifying both an error.
|
250
|
+
#
|
251
|
+
# The one exception to this rule is when we are publishing, which should
|
252
|
+
# already have been invoked by the time this is called.
|
253
|
+
def ensure_descriptor_and_file_were_not_both_specified()
|
254
|
+
file = @options.package_definition_file()
|
255
|
+
|
256
|
+
# If the user specified --no-file, even though it's kind of superfluous,
|
257
|
+
# we'll let it slide because the user doesn't think that any file will be
|
258
|
+
# processed.
|
259
|
+
file_specified = ! file.nil? && file != :none
|
260
|
+
|
261
|
+
if @descriptor and file_specified
|
262
|
+
raise Fig::UserInputError.new(
|
263
|
+
%Q<Cannot specify both a package descriptor (#{@descriptor.original_string}) and the --file option (#{file}).>
|
264
|
+
)
|
265
|
+
end
|
266
|
+
|
267
|
+
return
|
268
|
+
end
|
269
|
+
|
184
270
|
def check_required_package_descriptor(operation_description)
|
185
271
|
if not @descriptor
|
186
272
|
raise Fig::UserInputError.new(
|
@@ -209,31 +295,45 @@ class Fig::Command
|
|
209
295
|
check_required_package_descriptor('to publish')
|
210
296
|
|
211
297
|
if @descriptor.name.nil? || @descriptor.version.nil?
|
212
|
-
raise Fig::UserInputError.new(
|
298
|
+
raise Fig::UserInputError.new(
|
299
|
+
'Please specify a package name and a version name.'
|
300
|
+
)
|
301
|
+
end
|
302
|
+
if @descriptor.name == '_meta'
|
303
|
+
raise Fig::UserInputError.new(
|
304
|
+
%q<Due to implementation issues, cannot create a package named "_meta".>
|
305
|
+
)
|
213
306
|
end
|
214
307
|
|
215
|
-
|
308
|
+
publish_statements = nil
|
309
|
+
if not @options.environment_statements().empty?
|
216
310
|
publish_statements =
|
217
311
|
@options.resources() +
|
218
312
|
@options.archives() +
|
219
313
|
[
|
220
314
|
Fig::Statement::Configuration.new(
|
315
|
+
nil,
|
221
316
|
nil,
|
222
317
|
Fig::Package::DEFAULT_CONFIG,
|
223
|
-
@options.
|
318
|
+
@options.environment_statements()
|
224
319
|
)
|
225
320
|
]
|
226
|
-
|
321
|
+
elsif not @options.resources().empty? or not @options.archives().empty?
|
322
|
+
raise Fig::UserInputError.new(
|
323
|
+
'--resource/--archive options were specified, but no --set/--append option was given. Will not publish.'
|
324
|
+
)
|
227
325
|
else
|
228
|
-
|
229
|
-
if not @
|
230
|
-
publish_statements = @
|
326
|
+
load_package_object_from_file()
|
327
|
+
if not @base_package.statements.empty?
|
328
|
+
publish_statements = @base_package.statements
|
231
329
|
else
|
232
330
|
$stderr.puts 'Nothing to publish.'
|
233
331
|
return 1
|
234
332
|
end
|
235
333
|
end
|
236
334
|
|
335
|
+
apply_base_config_to_environment(:ignore_base_package)
|
336
|
+
|
237
337
|
if @options.publish?
|
238
338
|
Fig::Logging.info "Checking status of #{@descriptor.to_string()}..."
|
239
339
|
|