1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
% JUST-MRRC(5) | File Formats Manual
NAME
====
just-mr configuration - The format of the configuration used by
**`just-mr`**(1)
DESCRIPTION
===========
The file is read as JSON. Any other serialization describing the same
JSON object is equivalent. We assume, that in JSON objects, each key
occurs at most once; it is implementation defined how repetitions of the
same key are treated.
Location objects
----------------
A *location* is a JSON object with the keys *`"root"`*, *`"path"`*, and
*`"base"`*.
The value for key *`"root"`* is either *`"workspace"`*, *`"home"`*, or
*`"system"`*, which have the following meanings:
- *`"workspace"`* refers to the root of the workspace in which the
`just-mr` invocation was issued (not the workspace of the requested
main repository). This location root is ignored if **`just-mr`** was not
invoked from inside a workspace.
- *`"home"`* refers to the user's home directory.
- *`"system"`* refers to the system root *`/`*.
The value for key *`"path"`* is the relative path of the item to locate
within the location root.
The value for key *`"base"`* is a relative path within the location
root. This path is only relevant for locations of config files. If such
a config file contains relative paths, those will be resolved relative
to the specified base. If omitted, the default value *`"."`* is used.
The just-mrrc format
--------------------
The just-mrrc is given by a JSON object.
- The value for the key *`"config lookup order"`* is a JSON list of
location objects, specifying where to look for multi-repository
configurations (see **`just-mr-repository-config`**(5) for more
detail). The lookup is performed in the same order the location
objects appear in the list.
- The value for the key *`"absent"`*, if provided, is a JSON list
of location objects to search for a file specifying the list of
absent repositories.
- The value for the key *`"local build root"`* is a single location
object, specifying the path to use as the local build root. For more
details, see **`just-mr`**(1).
- The value for the key *`"checkout locations"`* is a single location
object, specifying the path to the file for checkout locations. For
more details, see **`just-mr`**(1).
- The value for the key *`"distdirs"`* is a JSON list of location
objects, specifying where to look for distribution files (usually
collected via the subcommand **`fetch`**). The lookup is performed in
the same order the location objects appear in the list. For more
details, see **`just-mr`**(1).
- The value for the key *`"just"`* is a single location object,
specifying the path to the **`just`** binary to use for execution, if
**`just-mr`** is used as a launcher.
- The value for the key *`"git"`* is a single location object,
specifying the path to the git binary to use in the instances when
**`just-mr`** needs to shell out.
- The value for the key *`"local launcher"`*, if given, is list of
strings setting the default for local launcher for **`just-mr`**;
command-line arguments take precedence over the value in the
configuration file. If the key *`"local launcher"`* is absent, the
default *`["env", "--"]`* is assumed.
- The value for the key *`"log limit"`*, if given, sets the default
value for the log limit, that can be overridden by the command-line
options.
- The value *`"log files"`*, if given, has to be a list of location
objects, specifying additional log files, on top of those specified
on the command line.
- The value for the key *`"remote execution"`* is a JSON object specifying the
remote execution options for **`just-mr`**.
For subkey *`"address"`* the value is a string specifying the remote
execution address in a NAME:PORT format.
For subkey *`"compatible"`* the value is a flag which specifies whether the
remote endpoint uses the original remote execution protocol.
Each subkey value can be overwritten by its corresponding command-line
argument.
- The value for the key *`"remote serve"`* is a JSON object specifying the
remote serve options for **`just-mr`**.
For subkey *`"address"`* the value is a string specifying the remote
serve address in a NAME:PORT format.
Each subkey value can be overwritten by its corresponding command-line
argument.
- The value for the key *`"authentication"`* is a JSON object specifying
client-side authentication options for **`just-mr`**.
For subkey *`"ca cert"`* the value is a string specifying the path to a TLS CA
certificate.
For subkey *`"client cert"`* the value is a string specifying the path to a
TLS client certificate.
For subkey *`"client key"`* the value is a string specifying the path to a TLS
client key.
Each subkey value can be overwritten by its corresponding command-line
argument.
- The value for the key *`"just args"`* is a JSON object. Its keys are
**`just`** subcommands and its value is a JSON list of strings. For the
corresponding subcommand, these strings are prefixed to the **`just`**
argument vector, if **`just-mr`** is used as a launcher.
EXAMPLE
=======
An example just-mrrc file could look like the following:
``` jsonc
{ "config lookup order":
[ {"root": "workspace", "path": "repos.json"}
, {"root": "workspace", "path": "etc/repos.json"}
, {"root": "home", "path": ".just-repos.json"}
, {"root": "system", "path": "etc/just-repos.json"}
]
, "absent":
[ {"root": "workspace", "path": "etc/absent.json"}
, {"root": "home", "path": ".just-absent"}
]
, "local build root": {"root": "home", "path": ".cache/just"}
, "checkout locations": {"root": "home", "path": ".just-local.json"}
, "local launcher": ["env", "--"]
, "log limit": 4
, "log files": [{"root": "home", "path": ".log/just/latest-invocation"}]
, "distdirs": [{"root": "home", "path": ".distfiles"}]
, "just": {"root": "system", "path": "usr/bin/just"}
, "git": {"root": "system", "path": "usr/bin/git"}
, "remote execution": {"address": "10.0.0.1:8980"}
, "just args":
{ "build": ["--remote-execution-property", "OS:Linux"]
, "install": ["--remote-execution-property", "OS:Linux"]
, "rebuild": ["--remote-execution-property", "OS:Linux"]
}
}
```
See also
========
**`just-mr`**(1),
**`just-mr-repository-config`**(5)
|