fig 0.1.51 → 0.1.52
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 +93 -0
- data/LICENSE +1 -1
- data/README.md +330 -99
- data/TODO +4 -0
- data/VERSION +1 -1
- data/bin/fig +2 -4
- data/lib/fig/backtrace.rb +3 -1
- data/lib/fig/command.rb +477 -0
- data/lib/fig/environment.rb +76 -23
- data/lib/fig/figrc.rb +2 -2
- data/lib/fig/grammar.treetop +23 -31
- data/lib/fig/{os.rb → operatingsystem.rb} +11 -9
- data/lib/fig/options.rb +424 -202
- data/lib/fig/package.rb +134 -18
- data/lib/fig/packagecache.rb +36 -0
- data/lib/fig/packagedescriptor.rb +46 -0
- data/lib/fig/parser.rb +2 -2
- data/lib/fig/repository.rb +173 -124
- data/lib/fig/retriever.rb +3 -1
- data/lib/fig/statement.rb +18 -0
- data/lib/fig/{package → statement}/archive.rb +3 -4
- data/lib/fig/{package → statement}/command.rb +3 -4
- data/lib/fig/{package → statement}/configuration.rb +18 -6
- data/lib/fig/statement/include.rb +87 -0
- data/lib/fig/{package → statement}/override.rb +3 -4
- data/lib/fig/{package → statement}/path.rb +3 -4
- data/lib/fig/{package → statement}/publish.rb +3 -4
- data/lib/fig/{package → statement}/resource.rb +3 -4
- data/lib/fig/{package → statement}/retrieve.rb +3 -4
- data/lib/fig/{package → statement}/set.rb +3 -4
- metadata +118 -71
- data/lib/fig.rb +0 -288
- data/lib/fig/package/include.rb +0 -32
- data/lib/fig/package/install.rb +0 -22
- data/lib/fig/package/statement.rb +0 -13
data/Changes
CHANGED
@@ -1,7 +1,100 @@
|
|
1
|
+
v0.1.52
|
2
|
+
|
3
|
+
Notice:
|
4
|
+
|
5
|
+
A lot of internal changes have been made to make future changes easier and
|
6
|
+
test coverage is significantly better than it was before. We believe that we
|
7
|
+
haven't broken anything (other than the purposeful changes below), but due to
|
8
|
+
the scope of the changes, we may have done so. Please report any problems
|
9
|
+
you run into.
|
10
|
+
|
11
|
+
Backwards incompatibilities:
|
12
|
+
|
13
|
+
- Now requires at least ruby v1.8.7.
|
14
|
+
|
15
|
+
- You can no longer run a command without using "--". Through an accident of
|
16
|
+
implementation, you previously could do
|
17
|
+
|
18
|
+
fig echo foo
|
19
|
+
|
20
|
+
You are now required to run this as
|
21
|
+
|
22
|
+
fig -- echo foo
|
23
|
+
|
24
|
+
- You can no longer specify multiple --clean or --list-configs options.
|
25
|
+
|
26
|
+
- There was partial support for overridding the local location of a package
|
27
|
+
via a "fig.properties" file in the current directory. A full
|
28
|
+
implementation of this type of thing may come in the future, but for the
|
29
|
+
time being, in the efforts of making the code clean, this is gone.
|
30
|
+
|
31
|
+
- Development now requires at least rspec 2.8.
|
32
|
+
|
33
|
+
New features:
|
34
|
+
|
35
|
+
- "--list-dependencies" option. This will list all dependencies a given
|
36
|
+
package has, recursively.
|
37
|
+
|
38
|
+
For example, if you have package A which depends upon packages B and C
|
39
|
+
which both depend upon package D, running
|
40
|
+
|
41
|
+
fig --list-dependencies A/1.2.3
|
42
|
+
|
43
|
+
will give you
|
44
|
+
|
45
|
+
B/2.3.4
|
46
|
+
C/3.4.5
|
47
|
+
D/4.5.6
|
48
|
+
|
49
|
+
If you additionally specify "--list-tree", you'll get a nested dependency
|
50
|
+
tree:
|
51
|
+
|
52
|
+
fig --list-dependencies --list-tree A/1.2.3
|
53
|
+
|
54
|
+
A/1.2.3
|
55
|
+
B/2.3.4
|
56
|
+
D/4.5.6
|
57
|
+
C/3.4.5
|
58
|
+
D/4.5.6
|
59
|
+
|
60
|
+
If you don't specify a package descriptor, but you've got a package.fig
|
61
|
+
file in the current directory with the same dependencies as package A
|
62
|
+
above, you'll get
|
63
|
+
|
64
|
+
fig --list-dependencies --list-tree
|
65
|
+
|
66
|
+
<unpublished>
|
67
|
+
B/2.3.4
|
68
|
+
D/4.5.6
|
69
|
+
C/3.4.5
|
70
|
+
D/4.5.6
|
71
|
+
|
72
|
+
If there are no dependencies, you don't specify "--list-tree", and stdout
|
73
|
+
is connected to a terminal:
|
74
|
+
|
75
|
+
fig --list-dependencies package-with-no-dependencies/1.2.3
|
76
|
+
|
77
|
+
<no dependencies>
|
78
|
+
|
79
|
+
However, if stdout is not connected to a terminal:
|
80
|
+
|
81
|
+
fig --list-dependencies package-with-no-dependencies/1.2.3 | cat
|
82
|
+
|
83
|
+
[no output]
|
84
|
+
|
85
|
+
Additionally, you can specify "--list-all-configs"; this will follow all
|
86
|
+
the configurations in the base package. Note that this will show multiple
|
87
|
+
versions of the same package if different configurations depend upon
|
88
|
+
different versions.
|
89
|
+
|
1
90
|
v0.1.51
|
2
91
|
|
3
92
|
- You can now set an environment variable to the empty string with "set".
|
4
93
|
|
94
|
+
- Fix bug with same env variable in both APPEND and RETRIEVE statements,
|
95
|
+
causing Fig to attempt to retrieve libs intended for publish. (The bug
|
96
|
+
was introduced in 0.1.49, in commit aa3f3ab6c7, while fixing another bug).
|
97
|
+
|
5
98
|
v0.1.50
|
6
99
|
|
7
100
|
- Trying to get releases via rake to work properly for multiple platforms.
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
Description
|
2
2
|
===========
|
3
3
|
|
4
|
-
Fig is a utility for configuring environments and managing dependencies across
|
4
|
+
Fig is a utility for configuring environments and managing dependencies across
|
5
|
+
a team of developers.
|
5
6
|
|
6
7
|
An "environment" in fig is a set of environment variables. A "package" is a
|
7
|
-
collection of files, along with some metadata describing which environment
|
8
|
-
should be modified when the package is included. For instance, each
|
9
|
-
may prepend its corresponding jar to CLASSPATH. The metadata may
|
10
|
-
that package's lower-level Fig package dependencies.
|
8
|
+
collection of files, along with some metadata describing which environment
|
9
|
+
variables should be modified when the package is included. For instance, each
|
10
|
+
dependency may prepend its corresponding jar to CLASSPATH. The metadata may
|
11
|
+
also list that package's lower-level Fig package dependencies.
|
11
12
|
|
12
13
|
Fig recursively builds an environment consisting of package dependencies
|
13
14
|
(typically specified via command-line options or a package.fig file), each of
|
14
15
|
which as noted above may have its own dependencies, and optionally executes a
|
15
16
|
shell command in that environment. The caller's environment is not affected.
|
16
17
|
|
17
|
-
Developers can use package.fig files to specify the list of dependencies to use
|
18
|
-
different tasks. This file will typically be versioned along with the rest
|
19
|
-
the source files, ensuring that all developers on a team are using the same
|
20
|
-
|
18
|
+
Developers can use package.fig files to specify the list of dependencies to use
|
19
|
+
for different tasks. This file will typically be versioned along with the rest
|
20
|
+
of the source files, ensuring that all developers on a team are using the same
|
21
|
+
environments.
|
21
22
|
|
22
23
|
Packages exist in two places: a "local" repository cache in the user's home
|
23
24
|
directory--also called the fig-home--and a "remote" repository on a shared
|
@@ -33,84 +34,85 @@ language agnostic (Java doesn't get preferential treatment), and work with
|
|
33
34
|
executables as well as libraries. And unlike APT, fig is cross platform and
|
34
35
|
project-oriented.
|
35
36
|
|
36
|
-
Installation
|
37
|
-
============
|
38
|
-
|
39
|
-
$ gem install fig
|
40
|
-
|
41
|
-
Or, if running Ruby 1.8.x...
|
42
|
-
|
43
|
-
$ gem install fig18
|
44
|
-
|
45
37
|
Usage
|
46
38
|
=====
|
47
39
|
|
48
40
|
Fig recognizes the following options:
|
49
41
|
|
50
|
-
|
42
|
+
## Flags ##
|
51
43
|
|
52
44
|
-?, -h, --help display this help text
|
53
45
|
-v, --version Print fig version
|
54
|
-
-
|
55
|
-
--
|
56
|
-
--
|
57
|
-
|
58
|
-
|
59
|
-
--file FILE read fig file FILE. Use '-' for stdin. See also --no-file
|
60
|
-
--force force-overwrite existing version of a package to the remote repo
|
61
|
-
-g, --get VAR print value of environment variable VAR
|
62
|
-
-i, --include PKG include PKG (with any variable prepends) in environment
|
63
|
-
--list list packages in $FIG_HOME
|
64
|
-
--list-configs PKG list configurations in package
|
46
|
+
-g, --get VARIABLE print value of environment variable VARIABLE
|
47
|
+
--list-local, --list list packages in $FIG_HOME
|
48
|
+
--list-configs list configurations
|
49
|
+
--list-dependencies list package dependencies, recursively
|
50
|
+
--list-variables list all variables defined/used by package and its dependencies
|
65
51
|
--list-remote list packages in remote repo
|
66
|
-
|
52
|
+
--list-tree for listings, output a tree instead of a list
|
53
|
+
--list-all-configs for listings, follow all configurations of the base package
|
54
|
+
--clean remove package from $FIG_HOME
|
55
|
+
--publish install package in $FIG_HOME and in remote repo
|
56
|
+
--publish-local install package only in $FIG_HOME
|
57
|
+
-c, --config CONFIG apply configuration CONFIG, default is "default"
|
58
|
+
--file FILE read fig file FILE. Use '-' for stdin. See also --no-file
|
67
59
|
--no-file ignore package.fig file in current directory
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
60
|
+
-p, --append VARIABLE=VALUE append (actually, prepend) VALUE to environment variable VARIABLE, delimited by separator
|
61
|
+
-i, --include DESCRIPTOR include package/version:config specified in DESCRIPTOR (with any variable prepends) in environment
|
62
|
+
-s, --set VARIABLE=VALUE set environment variable VARIABLE to VALUE
|
63
|
+
--archive PATH include PATH archive in package (when using --publish)
|
64
|
+
--resource PATH include PATH resource in package (when using --publish)
|
72
65
|
-u, --update check remote repo for updates and download to $FIG_HOME as necessary
|
73
66
|
-m, --update-if-missing check remote repo for updates only if package missing from $FIG_HOME
|
74
|
-
|
67
|
+
-l, --login login to remote repo as a non-anonymous user
|
68
|
+
--force force-overwrite existing version of a package to the remote repo
|
69
|
+
--figrc PATH add PATH to configuration used for Fig
|
75
70
|
--no-figrc ignore ~/.figrc
|
76
71
|
--log-config PATH use PATH file as configuration for Log4r
|
77
72
|
--log-level LEVEL set logging level to LEVEL
|
78
73
|
(off, fatal, error, warn, info, debug, all)
|
74
|
+
-- end of fig options; anything after this is used as a command to run
|
75
|
+
|
76
|
+
Some of these options may also be expressed as statements in a package.fig
|
77
|
+
file. For instance, `--append`, `--archive`, `--resource`, `include`.
|
78
|
+
|
79
|
+
One point of frequent confusion revolves around which statements are concerned
|
80
|
+
with publishing packages, and which are for downloading packages and otherwise
|
81
|
+
modifying the Fig environment. The same Fig file can contain both publish
|
82
|
+
(e.g., `append`, `resource`) and download (e.g., `include`) statements, but you
|
83
|
+
may not want to use the same dependency file for both publishing a package and
|
84
|
+
specifying that same package's dependencies, since for example its "build-time"
|
85
|
+
dependencies may differ from its "include-time" dependencies. Multiple config
|
86
|
+
sections may be helpful in organizing these concerns.
|
87
|
+
|
88
|
+
## Environment Variables Influencing Fig's Behavior ##
|
89
|
+
|
90
|
+
FIG_FTP_THREADS Optional - Size of FTP session pool. Defaults to 16.
|
91
|
+
FIG_HOME Optional - Location of local repo cache. Defaults to $HOME/.fighome.
|
92
|
+
FIG_REMOTE_LOGIN Required for --login, unless $HOME/.netrc is configured.
|
93
|
+
FIG_REMOTE_URL Require for operations involving the remote repository.
|
94
|
+
FIG_REMOTE_USER Required for --login, unless $HOME/.netrc is configured.
|
79
95
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
[--list-remote] When using the `--list-remote` command against an FTP server, fig uses a pool of FTP sessions to improve
|
102
|
-
performance. By default it opens 16 connections, but that number can be overridden by setting the
|
103
|
-
`FIG_FTP_THREADS` environment variable.
|
104
|
-
|
105
|
-
[--login] If the `--login` option is supplied, fig will look for credentials. If
|
106
|
-
environment variables `FIG_REMOTE_USER` and/or `FIG_REMOTE_PASSWORD` are
|
107
|
-
defined, fig will use them instead of prompting the user. If ~/.netrc exists,
|
108
|
-
with an entry corresponding to the host parsed from `FIG_REMOTE_URL`, that
|
109
|
-
entry will take precedence over `FIG_REMOTE_USER` and `FIG_REMOTE_PASSWORD`.
|
110
|
-
If sufficient credentials are still not found, fig will prompt for whatever is
|
111
|
-
still missing, and use the accumulated credentials to authenticate against the
|
112
|
-
remote server. Even if both environment variables are defined, fig will only
|
113
|
-
use them if `--login` is given.
|
96
|
+
## Commands affected by environment variables
|
97
|
+
|
98
|
+
#### `--list-remote` ####
|
99
|
+
|
100
|
+
When using the `--list-remote` command against an FTP server, fig uses a pool
|
101
|
+
of FTP sessions to improve performance. By default it opens 16 connections, but
|
102
|
+
that number can be overridden by setting the `FIG_FTP_THREADS` environment
|
103
|
+
variable.
|
104
|
+
|
105
|
+
#### `--login` ####
|
106
|
+
|
107
|
+
If the `--login` option is supplied, fig will look for credentials. If
|
108
|
+
environment variables `FIG_REMOTE_USER` and/or `FIG_REMOTE_PASSWORD` are
|
109
|
+
defined, fig will use them instead of prompting the user. If ~/.netrc exists,
|
110
|
+
with an entry corresponding to the host parsed from `FIG_REMOTE_URL`, that
|
111
|
+
entry will take precedence over `FIG_REMOTE_USER` and `FIG_REMOTE_PASSWORD`.
|
112
|
+
If sufficient credentials are still not found, fig will prompt for whatever is
|
113
|
+
still missing, and use the accumulated credentials to authenticate against the
|
114
|
+
remote server. Even if both environment variables are defined, fig will only
|
115
|
+
use them if `--login` is given.
|
114
116
|
|
115
117
|
Examples
|
116
118
|
========
|
@@ -121,7 +123,7 @@ Fig lets you configure environments three different ways:
|
|
121
123
|
* From a "package.fig" file in the current directory
|
122
124
|
* From packages included indirectly via one of the previous two methods
|
123
125
|
|
124
|
-
|
126
|
+
## Command Line ##
|
125
127
|
|
126
128
|
To get started, let's define an environment variable via the command line and
|
127
129
|
execute a command in the new environment. We'll set the "GREETING" variable to
|
@@ -135,7 +137,11 @@ Also note that when running fig, the original environment isn't affected:
|
|
135
137
|
$ echo $GREETING
|
136
138
|
<nothing>
|
137
139
|
|
138
|
-
Fig also lets you append environment variables using the system-specified path
|
140
|
+
Fig also lets you append environment variables using the system-specified path
|
141
|
+
separator (e.g. colon on Unix, semicolon on windows). This is useful for adding
|
142
|
+
directories to the PATH, LD_LIBRARY_PATH, CLASSPATH, etc. For example, let's
|
143
|
+
create a "bin" directory, add a shell script to it, then include it in the
|
144
|
+
PATH:
|
139
145
|
|
140
146
|
$ mkdir bin
|
141
147
|
$ echo 'echo $GREETING, World' > bin/hello
|
@@ -143,9 +149,11 @@ Fig also lets you append environment variables using the system-specified path s
|
|
143
149
|
$ fig -s GREETING=Hello -p PATH=bin -- hello
|
144
150
|
Hello, World
|
145
151
|
|
146
|
-
|
152
|
+
## Fig Files ##
|
153
|
+
|
154
|
+
You can also specify environment modifiers in files. Fig looks for a file
|
155
|
+
called "package.fig" in the current directory and automatically processes it.
|
147
156
|
|
148
|
-
You can also specify environment modifiers in files. Fig looks for a file called "package.fig" in the current directory and automatically processes it.
|
149
157
|
This "package.fig" file implements the previous example:
|
150
158
|
|
151
159
|
config default
|
@@ -158,12 +166,12 @@ Then we can just run:
|
|
158
166
|
$ fig -- hello
|
159
167
|
Hello, World
|
160
168
|
|
161
|
-
NOTE: The '@' symbol in a given package.fig file (or in a published
|
162
|
-
file) represents the full path to that file's directory. The
|
163
|
-
above example would
|
164
|
-
|
165
|
-
the
|
166
|
-
|
169
|
+
NOTE: The '@' symbol in a given package.fig file (or in a published
|
170
|
+
dependency's .fig file) represents the full path to that file's directory. The
|
171
|
+
above example would still work if we just used "bin", but later on when we
|
172
|
+
publish our project to the shared repository we'll definitely need the '@',
|
173
|
+
since the project directories will live in the fig-home rather than under our
|
174
|
+
current directory).
|
167
175
|
|
168
176
|
A single fig file may have multiple configurations:
|
169
177
|
|
@@ -177,14 +185,15 @@ A single fig file may have multiple configurations:
|
|
177
185
|
append PATH=@/bin
|
178
186
|
end
|
179
187
|
|
180
|
-
|
188
|
+
## Config Sections ##
|
181
189
|
|
182
190
|
Configurations other than "default" can be specified using the "-c" option:
|
183
191
|
|
184
192
|
$ fig -c french -- hello
|
185
193
|
Bonjour, World
|
186
194
|
|
187
|
-
|
195
|
+
The statements from one config section can be incorporated into another config
|
196
|
+
section via an `include` statement:
|
188
197
|
|
189
198
|
config default
|
190
199
|
include :spanish
|
@@ -195,7 +204,15 @@ A config section can be included in another config section:
|
|
195
204
|
append PATH=@/bin
|
196
205
|
end
|
197
206
|
|
198
|
-
|
207
|
+
Note that config statements cannot be nested within a fig file. I.e. the
|
208
|
+
following is _invalid_:
|
209
|
+
|
210
|
+
config foo
|
211
|
+
config bar
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
## Packages ##
|
199
216
|
|
200
217
|
Let's share our little script with the rest of the team by bundling it into a
|
201
218
|
package and publishing it. First, point the `FIG_REMOTE_URL` environment
|
@@ -204,17 +221,20 @@ you can have it point to a local directory:
|
|
204
221
|
|
205
222
|
$ export FIG_REMOTE_URL=file://$(pwd)/remote
|
206
223
|
|
207
|
-
Before we publish our package, we'll need to tell fig which files we want to
|
224
|
+
Before we publish our package, we'll need to tell fig which files we want to
|
225
|
+
include. We do this by using the "resource" statement in our "package.fig"
|
226
|
+
file:
|
208
227
|
|
209
228
|
resource bin/hello
|
210
229
|
|
211
230
|
config default...
|
212
231
|
|
213
|
-
Now we can share the package with the rest of the team by using the `--publish`
|
232
|
+
Now we can share the package with the rest of the team by using the `--publish`
|
233
|
+
option:
|
214
234
|
|
215
235
|
$ fig --publish hello/1.0.0
|
216
236
|
|
217
|
-
Once the package has been published, we can include it in other environments
|
237
|
+
Once the package has been published, we can include it in other environments
|
218
238
|
with the `-i` or `--include` option. (For the purpose of this example, let's
|
219
239
|
first move the "package.fig" file out of the way, so that it doesn't confuse
|
220
240
|
fig or us.) The "hello/1.0.0" string represents the name of the package and the
|
@@ -225,24 +245,29 @@ version number.
|
|
225
245
|
...downloading files...
|
226
246
|
Hello, World
|
227
247
|
|
228
|
-
The `-u` (or `--update`) option tells fig to check the remote repository for
|
248
|
+
The `-u` (or `--update`) option tells fig to check the remote repository for
|
249
|
+
packages if they aren't already installed locally (fig will never make any
|
250
|
+
network connections unless this option is specified). Once the packages are
|
251
|
+
downloaded, we can run the same command without the `-u` option:
|
229
252
|
|
230
253
|
$ fig -i hello/1.0.0 -- hello
|
231
254
|
Hello, World
|
232
255
|
|
233
|
-
When including a package, you can specify a particular configuration by
|
256
|
+
When including a package, you can specify a particular configuration by
|
257
|
+
appending it to the package name using a colon:
|
234
258
|
|
235
259
|
$ fig -i hello/1.0.0:french -- hello
|
236
260
|
Bonjour, World
|
237
261
|
|
238
|
-
|
262
|
+
## Retrieves ##
|
239
263
|
|
240
264
|
By default, the resources associated with a package live in the fig home
|
241
|
-
directory, which defaults to "$HOME/.fighome". This doesn't always play nicely
|
242
|
-
IDE's however, so fig provides a "retrieve" statement to copy resources
|
243
|
-
the current directory.
|
265
|
+
directory, which defaults to "$HOME/.fighome". This doesn't always play nicely
|
266
|
+
with IDE's however, so fig provides a "retrieve" statement to copy resources
|
267
|
+
from the repository to the current directory.
|
244
268
|
|
245
|
-
For example, let's create a package that contains a library for the "foo"
|
269
|
+
For example, let's create a package that contains a library for the "foo"
|
270
|
+
programming language. Define a "package.fig" file:
|
246
271
|
|
247
272
|
config default
|
248
273
|
append FOOPATH=@/lib/hello.foo
|
@@ -254,15 +279,17 @@ Then:
|
|
254
279
|
$ echo "print 'hello'" > lib/hello.foo
|
255
280
|
$ fig --publish hello-lib/3.2.1
|
256
281
|
|
257
|
-
Create a new "package.fig" file (first moving to a different directory or
|
282
|
+
Create a new "package.fig" file (first moving to a different directory or
|
283
|
+
deleting the "package.fig" we just used for publishing):
|
258
284
|
|
259
285
|
retrieve FOOPATH->lib/[package]
|
260
286
|
config default
|
261
287
|
include hello-lib/3.2.1
|
262
288
|
end
|
263
289
|
|
264
|
-
Upon a `fig --update`, each resource in FOOPATH will be copied into
|
265
|
-
package name (minus
|
290
|
+
Upon a `fig --update`, each resource in FOOPATH will be copied into
|
291
|
+
lib/[package], where [package] resolves to the resource's package name (minus
|
292
|
+
the version).
|
266
293
|
|
267
294
|
$ fig -u
|
268
295
|
...downloading...
|
@@ -270,8 +297,212 @@ package name (minus the version).
|
|
270
297
|
$ cat lib/hello-lib/hello.foo
|
271
298
|
print 'hello'
|
272
299
|
|
273
|
-
|
274
|
-
|
300
|
+
Package Statement Descriptions
|
301
|
+
==============================
|
302
|
+
|
303
|
+
## `add` ##
|
304
|
+
|
305
|
+
Specifies a value to be appended to a `PATH`-like environment variable, e.g.
|
306
|
+
`CLASSPATH` for Java. Does not include the delimiter within the variable, just
|
307
|
+
the component value.
|
308
|
+
|
309
|
+
## `append` ##
|
310
|
+
|
311
|
+
Synonym for `add`.
|
312
|
+
|
313
|
+
## `archive` ##
|
314
|
+
|
315
|
+
Specifies an archive file (either a local path or a URL) that is supposed to be
|
316
|
+
incorporated into the package. This is different from a `resource` in that the
|
317
|
+
contents will be extracted as part of installation.
|
318
|
+
|
319
|
+
## `command` ##
|
320
|
+
|
321
|
+
Specifies a default command to be run for a given `config` when no command is
|
322
|
+
given on the command-line.
|
323
|
+
|
324
|
+
config default
|
325
|
+
command echo Hello there.
|
326
|
+
end
|
327
|
+
|
328
|
+
Cannot be specified outside of a `config` statement. There may not be multiple
|
329
|
+
commands within a given `config`.
|
330
|
+
|
331
|
+
## `config` ##
|
332
|
+
|
333
|
+
A grouping of statements that specifies what is to be done. There must either
|
334
|
+
be a configuration named "default" or you will always have to specify a
|
335
|
+
configuration on the command-line.
|
336
|
+
|
337
|
+
May not be nested. If you wish to incorporate the effects of one configuration
|
338
|
+
into another, use an `include` statement.
|
339
|
+
|
340
|
+
## `include` ##
|
341
|
+
|
342
|
+
Can be used in two ways: to affect configurations and to declare package
|
343
|
+
dependencies.
|
344
|
+
|
345
|
+
### Pull one configuration into another ###
|
346
|
+
|
347
|
+
You can get the effects of one configuration in another by using the name of
|
348
|
+
the other configuration preceded by a colon:
|
349
|
+
|
350
|
+
config a
|
351
|
+
include :b
|
352
|
+
end
|
353
|
+
|
354
|
+
config b
|
355
|
+
...
|
356
|
+
end
|
357
|
+
|
358
|
+
### Declare a package dependency ###
|
359
|
+
|
360
|
+
States that one package should be installed prior to the current one; can
|
361
|
+
specify a version.
|
362
|
+
|
363
|
+
config default
|
364
|
+
include somepackage/1.2.3
|
365
|
+
end
|
366
|
+
|
367
|
+
Dependency version conflicts can be resolved by using `override` clauses.
|
368
|
+
|
369
|
+
Say you've got a "base-dependency" package. Then, in the `package.fig` for
|
370
|
+
"middle-dependency-a" you have
|
371
|
+
|
372
|
+
config default
|
373
|
+
include base-dependency/1.2.3
|
374
|
+
end
|
375
|
+
|
376
|
+
And in the `package.fig` for "middle-dependency-b" you have
|
377
|
+
|
378
|
+
config default
|
379
|
+
include base-dependency/3.2.1
|
380
|
+
end
|
381
|
+
|
382
|
+
Finally, in the `package.fig` for the package you're working on you've got
|
383
|
+
|
384
|
+
config default
|
385
|
+
include middle-dependency-a
|
386
|
+
include middle-dependency-b
|
387
|
+
end
|
388
|
+
|
389
|
+
This will produce a conflicting requirement on "base-dependency". Resolve this
|
390
|
+
by either matching the version of one dependency to another:
|
391
|
+
|
392
|
+
config default
|
393
|
+
include middle-dependency-a override base-dependency/3.2.1
|
394
|
+
include middle-dependency-b
|
395
|
+
end
|
396
|
+
|
397
|
+
Or specify the same version to both:
|
398
|
+
|
399
|
+
config default
|
400
|
+
include middle-dependency-a override base-dependency/2.2.2
|
401
|
+
include middle-dependency-b override base-dependency/2.2.2
|
402
|
+
end
|
403
|
+
|
404
|
+
Multiple `override` clauses can be specified in a single `include` statement.
|
405
|
+
|
406
|
+
## `path` ##
|
407
|
+
|
408
|
+
Synonym for `add`.
|
409
|
+
|
410
|
+
## `resource` ##
|
411
|
+
|
412
|
+
Specifies a file (either a local path or a URL) that is supposed to be
|
413
|
+
incorporated into the package. This is different from an `archive` in that the
|
414
|
+
contents will not be extracted as part of installation.
|
415
|
+
|
416
|
+
## `retrieve` ##
|
417
|
+
|
418
|
+
Gives the installation location for a dependency.
|
419
|
+
|
420
|
+
## `set` ##
|
421
|
+
|
422
|
+
Gives the value of an environment variable. Unlike `add`/`append`/`path`, this
|
423
|
+
is the complete, final value.
|
424
|
+
|
425
|
+
Querying Fig Net Effects
|
426
|
+
========================
|
427
|
+
|
428
|
+
If you've got a long chain of dependencies of packages, it can be challenging
|
429
|
+
to figure out the full effects of it. There are a number of commands for just
|
430
|
+
figuring out what things are coming from.
|
431
|
+
|
432
|
+
## `--list-dependencies` ##
|
433
|
+
|
434
|
+
By itself, this will give you the total set of packages you're pulling in.
|
435
|
+
|
436
|
+
For example, if you have package A which depends upon packages B and C
|
437
|
+
which both depend upon package D, running
|
438
|
+
|
439
|
+
fig --list-dependencies A/1.2.3
|
440
|
+
|
441
|
+
will give you
|
442
|
+
|
443
|
+
B/2.3.4
|
444
|
+
C/3.4.5
|
445
|
+
D/4.5.6
|
446
|
+
|
447
|
+
If there are no dependencies and stdout is connected to a terminal you'll get:
|
448
|
+
|
449
|
+
fig --list-dependencies package-with-no-dependencies/1.2.3
|
450
|
+
|
451
|
+
<no dependencies>
|
452
|
+
|
453
|
+
However, if stdout is not connected to a terminal:
|
454
|
+
|
455
|
+
fig --list-dependencies package-with-no-dependencies/1.2.3 | cat
|
456
|
+
|
457
|
+
[no output]
|
458
|
+
|
459
|
+
### `--list-tree` ###
|
460
|
+
|
461
|
+
If you additionally specify `--list-tree`, you'll get a nested dependency
|
462
|
+
tree:
|
463
|
+
|
464
|
+
fig --list-dependencies --list-tree A/1.2.3
|
465
|
+
|
466
|
+
A/1.2.3
|
467
|
+
B/2.3.4
|
468
|
+
D/4.5.6
|
469
|
+
C/3.4.5
|
470
|
+
D/4.5.6
|
471
|
+
|
472
|
+
If you don't specify a package descriptor, but you've got a package.fig
|
473
|
+
file in the current directory with the same dependencies as package A
|
474
|
+
above, you'll get
|
475
|
+
|
476
|
+
fig --list-dependencies --list-tree
|
477
|
+
|
478
|
+
<unpublished>
|
479
|
+
B/2.3.4
|
480
|
+
D/4.5.6
|
481
|
+
C/3.4.5
|
482
|
+
D/4.5.6
|
483
|
+
|
484
|
+
### `--list-all-configs` ###
|
485
|
+
|
486
|
+
This will follow all of the dependencies using all the configurations in the
|
487
|
+
package descriptor or the package.fig file. This will not follow all
|
488
|
+
configurations in all depended upon packages, only the ones reachable by one of
|
489
|
+
the configurations in the starting package.
|
490
|
+
|
491
|
+
Installation and Development
|
492
|
+
============================
|
493
|
+
|
494
|
+
## Installation ##
|
495
|
+
|
496
|
+
gem install fig
|
497
|
+
|
498
|
+
*NOTE*: When installing Fig on Windows you must first have installed the
|
499
|
+
Development Kit available from http://rubyinstaller.org/downloads. Instructions
|
500
|
+
for installation of the Development Kit are available at
|
501
|
+
https://github.com/oneclick/rubyinstaller/wiki/Development-Kit.
|
502
|
+
|
503
|
+
## Building the gem ##
|
504
|
+
|
505
|
+
rake build
|
275
506
|
|
276
507
|
Community
|
277
508
|
=========
|
@@ -283,4 +514,4 @@ Community
|
|
283
514
|
Copyright
|
284
515
|
=========
|
285
516
|
|
286
|
-
Copyright (c) 2009-
|
517
|
+
Copyright (c) 2009-2012 Matthew Foemmel. See LICENSE for details.
|