This section contains subcommands of the mtn automate command,
used for scripting monotone. All give output on stdout
; they may
also give useful chatter on stderr
, including warnings and error
messages.
1.2
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
The output does not include rev1, rev2, etc., except if
rev2 is itself an ancestor of rev1, then rev2 will be
included in the output.
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
The output will include one of the argument revisions only if that revision is
an ancestor of all other revisions given as arguments.
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
The output does not include rev1, rev2, etc., except that if
rev2 is itself a descendant of rev1, then rev2 will be
included in the output.
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
0c05e8ec9c6af4224672c7cc4c9ef05ae8bdb794 27ebcae50e1814e35274cb89b5031a423c29f95a 5830984dec5c41d994bcadfeab4bf1bf67747b89 4e284617c80bec7da03925062a84f715c1b042bd 27ebcae50e1814e35274cb89b5031a423c29f95a 657c756d24fb65213d59f4ae07e117d830dcc95b
The output as a whole is alphabetically sorted by line; additionally,
the parents within each line are alphabetically sorted.
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
276264b0b3f1e70fc1835a700e6e61bdbe4c3f2f
ignore_branch
.
net.venge.monotone net.venge.monotone.win32
If a branch name is ignored by means of the Lua hook
ignore_branch
, it is neither printed, nor can it be matched by
a pattern.
tag "monotree-0.1" revision [8a121346ce2920b6f85df68b3b620de96bd14a8d] signer [de84b575d5e47254393eba49dce9dc4db98ed42d] branches "net.venge.monotone.contrib" "net.venge.monotone.contrib.monotree" tag "monotree-0.2" revision [5d288b39b49613b0d9dca8ece6b9a42c3773f35b] signer [de84b575d5e47254393eba49dce9dc4db98ed42d] branches "net.venge.monotone.contrib.monotree" tag "monotree-0.3" revision [35cff8e8ba14155f5f7ddf7965073f514fd60f61] signer [de84b575d5e47254393eba49dce9dc4db98ed42d] branches "net.venge.monotone.contrib.monotree" tag "monotree-0.4" revision [f1afc520474f83c58262896ede027ef77226046e] signer [de84b575d5e47254393eba49dce9dc4db98ed42d] branches "net.venge.monotone.contrib.monotree"
All stanzas are formatted by basic_io. Stanzas are separated by a blank line. Values will be escaped, '\' to '\\' and '"' to '\"'.
Each stanza has exactly the following four entries:
Stanzas are printed in arbitrary order.
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61 75156724e0e2e3245838f356ec373c50fa469f1f
6265ab1312fbe38bdc3aafa92441139cb2b779b0
birth
key
path "added" new_type "file" fs_type "file" status "added" "known" changes "content" path "attributes_altered" old_type "file" new_type "file" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "known" changes "attrs" path "dropped" old_type "file" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "dropped" path "ignored~" fs_type "file" status "ignored" path "missing" old_type "file" new_type "file" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "missing" path "original" old_type "file" new_path "renamed" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" path "patched" old_type "file" new_type "file" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "known" changes "content" path "patched_and_attributes_altered" old_type "file" new_type "file" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "known" changes "content" "attrs" path "renamed" new_type "file" old_path "original" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "known" path "unchanged" old_type "file" new_type "file" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "known" path "unknown" fs_type "file" status "unknown"
Two files swapped in both the revision manifest and the workspace:
path "original" old_type "file" new_path "unchanged" new_type "file" old_path "unchanged" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" path "unchanged" old_type "file" new_path "original" new_type "file" old_path "original" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known"
Recorded in the revision manifest that two files were swapped, but they were not actually swapped in the workspace. Thus they both appear as patched:
path "original" old_type "file" new_path "unchanged" new_type "file" old_path "unchanged" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" changes "content" path "unchanged" old_type "file" new_path "original" new_type "file" old_path "original" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" changes "content"
Rename (in the manifest and the workspace) foo to bar; add (in the manifest and the workspace) new file foo:
path "foo" old_type "file" new_path "bar" new_type "file" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "added" "known" path "bar" new_type "file" old_path "foo" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "known"
Rotated files foo -> bar -> baz -> foo (in the manifest and the workspace):
path "foo" old_type "file" new_path "bar" new_type "file" old_path "baz" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" path "bar" old_type "file" new_path "baz" new_type "file" old_path "foo" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" path "baz" old_type "file" new_path "foo" new_type "file" old_path "bar" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known"
Recorded in the revison manifest the rotation of files foo -> bar -> baz -> foo, but the actual files in the workspace were not moved, so monotone interprets all files as having been patched:
path "foo" old_type "file" new_path "bar" new_type "file" old_path "baz" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" changes "content" path "bar" old_type "file" new_path "baz" new_type "file" old_path "foo" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" changes "content" path "baz" old_type "file" new_path "foo" new_type "file" old_path "bar" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "rename_target" "known" changes "content"
Dropped from the manifest but not removed in the workspace and thus unknown:
path "dropped" old_type "file" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "dropped" "unknown"
Added in the manifest but not in the workspace, and thus missing:
path "added" new_type "file" fs_type "none" status "added" "missing"
Recorded a rename in the manifest, but not moved in the workspace, and thus unknown source and missing target:
path "original" old_type "file" new_path "renamed" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" "unknown" path "renamed" new_type "file" old_path "original" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "missing"
Moved in the workspace but no rename recorded in the manifest, and thus missing source and unknown target:
path "original" old_type "file" new_type "file" fs_type "none" status "missing" path "renamed" fs_type "file" status "unknown"
Renamed in the manifest and the workspace and patched:
path "original" old_type "file" new_path "renamed" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" path "renamed" new_type "file" old_path "original" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "known" changes "content"
Renamed and restricted to original or renamed:
path "original" old_type "file" new_path "renamed" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" path "renamed" new_type "file" old_path "original" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "known" changes "content"
Renamed and restricted to original with the --no-corresponding-renames option:
path "original" old_type "file" new_path "renamed" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source"
Renamed and restricted to renamed with the --no-corresponding-renames option:
path "renamed" new_type "file" old_path "original" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "known" changes "content"
File is missing, an unversioned directory is in the way:
path "missing_file" old_type "file" new_type "file" fs_type "directory" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "invalid" changes "content"
Directory is missing, an unversioned file is in the way:
path "missing_directory" old_type "directory" new_type "directory" fs_type "file" status "invalid"
Directory source renamed to target, target is missing, an unversioned file is in the way:
path "source" old_type "directory" new_path "target" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" path "source/a" old_type "file" new_path "target/a" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_source" path "target" new_type "directory" old_path "source" fs_type "file" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "invalid" path "target/a" new_type "file" old_path "source/a" fs_type "none" birth [cb271687054afd3c2b873c8994f206f08fb240d3] status "rename_target" "missing"
path
line, and contains
up to seven lines. The order of the lines is not important, and may
change in future revisions, except that the first line will always be
path
.
A file will also be labeled missing if it is in a directory
that is ignored due to a regular expression in .mtn-ignore, but
is also in the revision manifest. A warning is issued in this case.
'key' the hex-encoded hash of the key used to sign this certificate. 'signature' a string indicating the status of the signature. Possible values of this string are: 'ok' : the signature is correct 'bad' : the signature is invalid 'unknown' : signature was made with an unknown key 'name' the name of this certificate 'value' the value of this certificate 'trust' is this certificate trusted by the defined trust metric? Possible values of this string are: 'trusted' : this certificate is trusted 'untrusted' : this certificate is not trusted
key [5cd3b3a7ad2e8645e8887af193ee522dc59112e4] signature "ok" name "author" value "emile@alumni.reed.edu" trust "trusted" key [5cd3b3a7ad2e8645e8887af193ee522dc59112e4] signature "ok" name "branch" value "net.venge.monotone" trust "trusted" key [5cd3b3a7ad2e8645e8887af193ee522dc59112e4] signature "ok" name "changelog" value "propagate from branch 'net.venge.monotone.annotate' (head 76a886ef7c8ae12a4bba5fc2bd252557bf863aff) to branch 'net.venge.monotone' (head 2490479a4e4e99243fead6d627d78291fde592f0) " trust "trusted" key [5cd3b3a7ad2e8645e8887af193ee522dc59112e4] signature "ok" name "date" value "2005-05-20T20:19:25" trust "trusted"
l6:leavese l7:parents40:0e3171212f34839c2e3263e7282cdeea22fc5378e o3:key11:foo@bar.come l4:cert40:0e3171212f34839c2e3263e7282cdeea22fc53783:foo3:bare
[ 'o' <string> <string> [ <string> <string> [ ... ] ] 'e' ] 'l' <string> [ <string> [ ... ] ] 'e'
The input is a series of commands. The command name plus arguments are
provided as 'l' <string> [<string> ...] 'e', where <string> = <size> colon
<data> . This may optionally be preceded by a set of key=value pairs
(command options) as 'o' <string> <string> [<string> <string> ...] 'e', where
strings come in pairs, key followed by value. For flag options that
don't take values, specify the second string as zero length; 0:
.
The space between the ending 'e' of one group of strings and the beginning
'l' or 'o' of the next is reserved. Any characters other than whitespace
will cause an error.
format-version: 2 0:m:41:7706a422ccad41621c958affa999b1a1dd644e79 0:l:1:0 ... 1:e:38:misuse: key 'test@test' already exists 1:l:1:2 ... 2:w:39:skipping file '\' with unsupported name 2:m:144: path "" old_type "directory" new_type "directory" fs_type "directory" birth [276264b0b3f1e70fc1835a700e6e61bdbe4c3f2f] status "known" ... 3:t:34:c:certificates;k:keys;r:revisions; 3:t:12:c=0;k=0;r=0; 3:t:13:c#0;k#0;r#64; 3:t:14:c#0;k#0;r#128; 3:t:6:c;k;r; ...
format-version
,
which denotes the version of the stdio format used throughout the
session. The original format had no such version output, so our
numbering starts with "2" here.
Headers are separated from each other by single newline character '\n'
and the last is separated from the following output by a pair of newline
characters.
After a command has been issued, one or more packets are returned for it. A packet looks like:
<command number>:<stream>:<size>:<output>
<command number>
is a decimal number specifying which command this output
is from. It is 0 for the first command, and increases by one each time.
<stream>
is an identifier for which output stream this packet represents,
allowing multiple streams to be multiplexed over the channel. The following
streams are presently defined; more streams may be added later.
m
: this stream represents the normal ("main") stdout automate output of
the command, formatted as described in the description for that command.
e
: this stream represents any (unstructured) error message data.
Internally, this maps to calls to the E()
print macros that would
normally be written by the command to the program's stderr stream, if the
automate sub-command had been called directly rather than via ”'stdio”'.
w
: this stream represents any (unstructured) warning message data.
Internally, this maps to calls to the W()
print macro that would
normally be written by the command to the program's stderr stream, if the
automate sub-command had been called directly rather than via ”'stdio”'.
p
: this stream represents any (unstructured) progress message data.
Internally, this maps to calls to the P()
print macro that would
normally be written by the command to the program's stderr stream, if the
automate sub-command had been called directly rather than via ”'stdio”'.
t
: this stream represents ticker updates, which may be used
by a user interface to display the progress of a command.
The output for this channel can be described as follows:
<output> ::= <definition><payload><end>
<definition> ::= <shortname> ':' <longname> <eol>
<payload> ::= <total_count><advance>+
<end> ::= <shortname> <eol>
<total_count> ::= <shortname> '=' <count> <eol>
<advance> ::= <shortname> '#' <count> <eol>
<shortname> ::= "\w+"
<longname> ::= "[^;]+"
<count> ::= ['0'-'9']+
<eol> ::= ';'
The definition tells the implementor the short name and long name of any upcoming ticker event. The names and meanings are command-specific and are therefore explained in the sections for the particular commands which support ticker output.
The total_count
might be 0 right at the start and can later be changed
to a different number if the command later on knows a more exact value. If
this is the case, this stanza is output again with this new value. A
constant total_count
of 0 means that the command may continue to run
for a undefined amount of time until the end stanza appears.
The advance tells the implementor how much work has been done so far.
Finally, the end stanza is printed just before the ticker ends (i.e. the work has been done).
All counts output absolute, raw values; no modulation takes place. It
is usually the case that definition, total_count
, advance and
end are output in separate stanzas. It is also possible that two or
more parallel tickers output their stanzas at the same time, in this
case it's ensured that the output does not get intermixed; first
all definitions are output, afterwards all total_counts, and so on.
Note: The ticker format used for stdio is fixed and cannot be selected explicitely via the global --ticker option. However, if you run an automate command outside of stdio you can set a different ticker type, f.e. count, dot or none.
l
: this stream marks the termination of a command and all of
its streams and carries the return code of the command in the payload.
A return code "0" stands for success, "1" for an error which occurred within the stdio interface (f.e. syntax errors or missing privileges) before the command is run and finally "2" for any other command-specific error.
<size>
is the number of bytes in the output.
<output>
is a piece of the output of the command.
Trying to run the automate stdio
or automate remote_stdio
sub-commands will exit the particular command with return code "1".
get_passphrase
hook is set up locally.
automate
commands to be run against a database that is
being used to serve netsync connections.
automate stdio
. Note that the commands run with
automate remote_stdio
may conform to a different interface_version,
because they are handled by a remote instance of monotone.
There will be some extra chatter on stderr unless --quiet is given.
get_remote_automate_permitted
hook has to be
configured to include every command which should be executable over this
interface.
For both, the client and the server, keyboard interaction is disabled,
just as if --non-interactive is specified. Actions which require
operations on password-encrypted private keys will therefor fail unless the
get_passphrase
hook is set up locally and / or remotely.
Remote options must be given as a single token, ie
--branch=foo or -bfoo. This is because the local and remote
monotones may not understand exactly the same options (so the local monotone
cannot know if an option given as --branch or -b should be
followed by an argument), and because the server sees this as an
automate remote_stdio
connection (so it expects the options to already
be parsed).
automate
command to be run against a database that is
being used to serve netsync connections, without having its input and output
encoded as by automate stdio
.
The output will be whatever output the remote command generates.
Remote diagnostic messages are written to standard error, prefixed either
with mtn: remote error:
, mtn: remote warning:
or
mtn: remote message:
to make them distinguishable from local
diagnostics. Tickers are not supported over this interface. If you need
remote ticker support, please use automate remote_stdio.
get_remote_automate_permitted
hook has to be
configured to include every command which should be executable over this
interface.
Keyboard interaction is disabled on the server, just as if
--non-interactive would have been specified on server startup.
Actions which require operations on password-encrypted private keys will
therefor fail unless a get_passphrase
hook is set up remotely.
Note: The linebreaks are not part of the actual format, but have been added for better readability.
0:p:62:doing anonymous pull; use -kKEYNAME if you need authentication 0:p:25:connecting to monotone.ca0:0:p:29:finding items to synchronize: 0:t:34:c:certificates;k:keys;r:revisions; 0:t:12:c=0;k=0;r=0; 0:t:13:c#0;k#0;r#64; 0:t:14:c#0;k#0;r#128; [...] 0:t:6:c;k;r; 0:t:44:>:bytes in;<:bytes out;c:certs in;r:revs in; 0:t:16:>=0;<=0;c=0;r=0; 0:t:21:>#420;<#1344;c#0;r#0; 0:t:22:>#1165;<#1741;c#0;r#0; [...] 0:t:24:>#20839;<#14882;c#0;r#1; 0:t:24:>#20839;<#14882;c#3;r#1; 0:t:24:>#20839;<#14882;c#4;r#2; 0:t:24:>#20839;<#14882;c#6;r#2; 0:t:24:>#20863;<#14930;c#8;r#2; 0:t:8:<;>;c;r; 0:p:36:successful exchange with monotone.ca 0:l:1:0
If these commands are run over stdio, the stdio ticker format is used (for a description of this format, check automate stdio).
The following ticker types are printed out during the refinement phase:
c
: The number of certs found for an upcoming synchronization
k
: The number of keys found for an upcoming synchronization
r
: The number of revisions found for an upcoming synchronization
After refinement the actual synchronization between the two nodes start. The ticker stanzas in this phase are the following:
>
: The number of incoming bytes
<
: The number of outgoing bytes
c
: The number of incoming certs (only pull and sync)
C
: The number of outgoing certs (only push and sync)
r
: The number of incoming revisions (only pull and sync)
R
: The number of outgoing revisions (only push and sync)
hash [...]
line instead of separate
public_hash [...]
and private_hash [...]
lines.
name "tbrownaw@gmail.com" hash [475055ec71ad48f5dfaf875b0fea597b5cbbee64] public_location "database" "keystore" private_location "keystore"
format_version "1" new_manifest [bfe2df785c07bebeb369e537116ab9bb7a4b5e19] old_revision [429fea55e9e819a046843f618d90674486695745] patch "ChangeLog" from [7dc21d3a46c6ecd94685ab21e67b131b32002f12] to [234513e3838d423b24d5d6c98f70ce995c8bab6e] patch "std_hooks.lua" from [0408707bb6b97eae7f8da61af7b35364dbd5a189] to [d7bd0756c48ace573926197709e53eb24dae5f5f]
All stanzas are formatted by basic_io. Stanzas are separated by a blank line. Values will be escaped, '\' to '\\' and '"' to '\"'.
Possible values of this first value are along with an ordered list of basic_io formatted stanzas that will be provided are:
'format_version' used in case this format ever needs to change. format: ('format_version', the string "1") occurs: exactly once 'new_manifest' represents the new manifest associated with the revision. format: ('new_manifest', manifest id) occurs: exactly one 'old_revision' represents a parent revision. format: ('old_revision', revision id) occurs: either one or two times 'delete represents a file or directory that was deleted. format: ('delete', path) occurs: zero or more times 'rename' represents a file or directory that was renamed. format: ('rename, old filename), ('to', new filename) occurs: zero or more times 'add_dir' represents a directory that was added. format: ('add_dir, path) occurs: zero or more times 'add_file' represents a file that was added. format: ('add_file', path), ('content', file id) occurs: zero or more times 'patch' represents a file that was modified. format: ('patch', filename), ('from', file id), ('to', file id) occurs: zero or more times 'clear' represents an attr that was removed. format: ('clear', filename), ('attr', attr name) occurs: zero or more times 'set' represents an attr whose value was changed. format: ('set', filename), ('attr', attr name), ('value', attr value) occurs: zero or more times
These stanzas will always occur in the order listed here; stanzas of
the same type will be sorted by the filename they refer to. The 'delete'
and following stanzas will be grouped under the corresponding 'old_revision'
one.
Options excl and depth work just like in mtn commit.
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61
28ce076c69eadb9b1ca7bdf9d40ce95fe2f29b61
format_version "1" dir "" file ".htaccess" content [e3915658cb464d05f21332e03d30dca5d94fe776] file "AUTHORS" content [80d8f3f75c9b517ec462233e155f7dfb93379f67] file "ChangeLog" content [fc74a48c7f73eedcbe1ea709755fbe819b29736c] file "LICENSE" content [dfac199a7539a404407098a2541b9482279f690d] file "README" content [440eec971e7bb61ccbb61634deb2729bb25931cd] file "TODO" content [e0ea26c666b37c5f98ccf80cb933d021ee55c593] file "branch.psp" content [b28ece354969314ce996f3030569215d685973d6] file "common.py" content [1fdb62e05fb2a9338d2c72ddc58de3ab2b3976fe] file "config.py.example" content [64cb5898e3a026b4782c343ca4386585e0c3c275] file "error.psp" content [7152c3ff110418aca5d23c374ea9fb92a0e98379] file "fileinbranch.psp" content [5d8536100fdf51d505b6f20bc9c16aa78d4e86a8] file "headofbranch.psp" content [981df124a0b5655a9f78c42504cfa8c6f02b267a] file "help.psp" content [a43d0588a69e622b2afc681678c2a5c3b3b1f342] file "html.py" content [18a8bffc8729d7bfd71d2e0cb35a1aed1854fa74] file "index.psp" content [c621827db187839e1a7c6e51d5f1a7f6e0aa560c] file "monotone.py" content [708b61436dce59f47bd07397ce96a1cfabe81970] file "revision.psp" content [a02b1c161006840ea8685e461fd07f0e9bb145a3] file "rss_feed.gif" content [027515fd4558abf317d54c437b83ec6bc76e3dd8] file "tags.psp" content [638140d6823eee5844de37d985773be75707fa25] file "tarofbranch.psp" content [be83f459a152ffd49d89d69555f870291bc85311] file "test.py" content [e65aace9237833ec775253cfde97f59a0af5bc3d] attr "mtn:execute" "true" file "utility.py" content [fb51955563d64e628e0e67e4acca1a1abc4cd989] file "viewmtn.css" content [8d04b3fc352a860b0e3240dcb539c1193705398f] file "viewmtn.py" content [7cb5c6b1b1710bf2c0fa41e9631ae43b03424a35] file "wrapper.py" content [530290467a99ca65f87b74f653bf462b28c6cda9]
All stanzas are formatted by basic_io. Stanzas are separated by a blank line. Values will be escaped, '\' to '\\' and '"' to '\"'.
Possible values of this first value are along with an ordered list of basic_io formatted stanzas that will be provided are:
'format_version' used in case this format ever needs to change. format: ('format_version', the string "1") occurs: exactly once 'dir': represents a directory. The path "" (the empty string) is used to represent the root of the tree. format: ('dir', pathname) occurs: one or more times 'file': represents a file. format: ('file', pathname), ('content', file id) occurs: zero or more times
In addition, 'dir' and 'file' stanzas may have attr information included. These are appended to the stanza below the basic dir/file information, with one line describing each attr. These lines take the form ('attr', attr name, attr value).
Stanzas are sorted by the path string.
attr "foo" "bar" state "added" attr "baz" "bat" state "dropped" attr "foobar" "foobat" state "unchanged"
All stanzas are formatted by basic_io. Stanzas are separated by a blank line and ordered by attribute name. Values will be escaped, '\' to '\\' and '"' to '\"'.
Each attribute stanza also contains another entry which tells the status of attribute. This entry can have one of the following four values:
The status 'changed' can come up if an attribute foo has been dropped and added afterwards with another value, like
$ mtn attr drop file.txt foo ; mtn attr set file.txt foo baz
If an attribute has been dropped, the output will still return the previously set value of the dropped attribute for convenience (obviously this is no longer recorded in the current workspace).
The complete format:
'attr': represents an attribute. format: ('attr', key, value), ('state', [unchanged|changed|added|dropped]) occurs: zero or more times
If zero or more revisions are given, the command behaves as follows:
============================================================ --- guitone/res/i18n/guitone_de.ts 9857927823e1d6a0339b531c120dcaadd22d25e9 +++ guitone/res/i18n/guitone_de.ts 0b4715dc296b1955b0707923d45d79ca7769dd3f @@ -1,6 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS><TS version="1.1"> <context> + <name>AncestryGraph</name> + <message> [...]
If you've downloaded a release, see INSTALL for installation instructions. If you've checked this out, the generated files are not included, and you must use "autoreconf --install" to create them. "make html" for docs, or read the .info file and / or man page.
If a revision id is given, the file's contents in that specific revision
are printed. If no revision is given, the workspace's revision is used.
If you've downloaded a release, see INSTALL for installation instructions. If you've checked this out, the generated files are not included, and you must use "autoreconf --install" to create them. "make html" for docs, or read the .info file and / or man page.
This command does not just take two file ids, because the revision ids
and paths are needed to check for manual merge and file encoding
attributes.
If you've downloaded a release, see INSTALL for installation instructions. If you've checked this out, the generated files are not included, and you must use "autoreconf --install" to create them. "make html" for docs, or read the .info file and / or man page.
net.venge.monotone
hash [...]
line instead of separate
public_hash [...]
and private_hash [...]
lines.
hash [475055ec71ad48f5dfaf875b0fea597b5cbbee64] given_name "tbrownaw@gmail.com" local_name "tbrownaw@gmail.com" public_location "database" "keystore" private_location "keystore" hash [3ac4afcd86af28413b0a23b7d22b9401e15027fc] given_name "tomfa@debian.org" local_name "tomfa@debian.org" public_location "database" hash [115fdc73d87a5e9901d018462b21a1f53eca33a1] given_name "underwater@fishtank.net" local_name "underwater@fishtank.net" public_location "keystore" private_location "keystore"
get_local_key_name
hook.
The keys are ordered by hash value.
[rdata bdf3b10b5df0f17cc6c1b4b3351d84701bda59ed] H4sIAAAAAAAA/0XQS27DMAwE0L1PIfgArb4kte62NzACg5SoJEBsF7aRurev0UVzgJl5mLas E+/jU9ftvsymd33Xzfo9Tjzfm267GSgGwVarz6Valx0KtFYwii9VqUFCqJQ5X7puedRx1ef9 r2rwHlSbi+BUSrF4xn1p0RInkmxTbmwREp/BL97LzfQfN56v+rlc+860dZnMED01jhILkURJ Ul0KPpGN1ueUwDHyiXF66Ywx+2IGD+0Uqg8aCzikAEzZNRXPmJKlkhMxSHuNzrofx/uq2/J4 6njV/bZsu/zMPOlbOY4XJSD5KOrwXGdwpDGdfotZayQHKTAi5fRPqUWKcAMMIQfAjOK0nkfm 6tFacjYgBPV46X4BtlpiNYUBAAA= [end]
[rcert bdf3b10b5df0f17cc6c1b4b3351d84701bda59ed branch njs@pobox.com bmV0LnZlbmdlLm1vbm90b25l] K90i1XHHmaMEMuwbPifFweLThJl0m7jigh2Qq6Z7TBwNJ6IMOjXWCizv73cacZ1CtzxFDVwQ SlqhNWiPQWxdcMp+Uuo+V8IFMKmvxVSTuVDukLMuNAQqpGL5S+a+tEj68NMq+KLKuL8kAAPc RoFD7GQlTS35S3RHWA4cnvqn+8U= [end] [rcert bdf3b10b5df0f17cc6c1b4b3351d84701bda59ed date njs@pobox.com MjAwNi0wNC0wOFQxMTo1MDowMA==] araz9A8x6AlK6m6UhwnhUhk7cdyxeE2nvzj2gwaDvkaBxOq4SN23/wnaPqUXx1Ddn8smzyRY HN08xloYc0yNChp3wjbqx20REcsTg3XE4rN/sgCbqqw5hVT22a5ZhqkfkDeoeJvan0R0UBax ngKYo9eLuABNlmFX2onca75JW1E= [end] [rcert bdf3b10b5df0f17cc6c1b4b3351d84701bda59ed author njs@pobox.com bmpzQHBvYm94LmNvbQ==] BLPOYhgLsAN+w7CwOsv9GfXnG3u7RNF1DTrWdn0AnYE1e+ptgTeMVWUI18H4OGL0B7wm08rv Pxk/hvsb8fBn1Kf5HDDO2pbjJ0xVzI9+p+TR0y5jJNZlVSTj+nvtPgvK9NzsdooYWnwlWmJv bOkAzQcZb8NMh8pbQkdHbR5uzMo= [end] [rcert bdf3b10b5df0f17cc6c1b4b3351d84701bda59ed changelog njs@pobox.com MjAwNi0wNC0wOCAgTmF0aGFuaWVsIFNtaXRoICA8bmpzQHBvYm94LmNvbT4KCgkqIG5ldHh4 L3Jlc29sdmVfZ2V0aG9zdGJ5bmFtZS5jeHggKHJlc29sdmVfaG9zdG5hbWUpOiAjaWZkZWYg b3V0CglXaW4zMi1pbmNvbXBhdGlibGUgZXJyb3IgcmVwb3J0aW5nIGNhbGwuCg==] Ncl4L/oEPctzVQixTKA6FrLceeHnLiXfeyeFDNmtUFYg9BMUcjWkeyKmaWknLvOcHortxjto K6pQ9E8S7zI+TpzFAhssg5a///rFL0+2GJU3t6pcHs6LC0Q4tbqzwKd/5+8GwT1gphbM1wm7 KuzKthwqD3pp49GbgTrp8iWMTr0= [end]
[fdata 229c7f621b65f7e4970ae5aaec993812b9daa1d4] H4sIAAAAAAAA/z2OO27DMBBEe51ioMaNrJzBpQAjTXKBBTW0CJPcgFw6yO1DCkG62Q/em83j R9vlRez6naPKzh2CwkipXFBJbO8fn7f7HV4LQq4mMYoFzdMYSnMj1xXY/lnuoHt2kB2hQpst PREPZhaxvvchskIKkdU6xsXWvQsk76MOUquGVolZmmmh0+xxvf7JZ5jCFXbU4KZ1muYkT+Kw FOez5q6uLuh9+9eoQawhez3Fp+VtHJNkfMmDHfALzWYfcAgBAAA= [end]
[fdelta 597049a62d0a2e6af7df0b19f4945ec7d6458727 229c7f621b65f7e4970ae5aaec993812b9daa1d4] H4sIAAAAAAAA/0WOy0oEMRBF9/mKS2/c9LQg4t5lw+BGf6BIKtNhkpSkKop/b9II7m49OOfu eHp5dnvEj/SHL0aQ75qFAgcQGmcm5RXKjP3t/eP1ekWUhlTVKGeyJNXNoXU/s27AP8sf7O8D ZEdSSLd1JMaNKzeysY8ps4Iao4oNjM99eFdQDbMOSldDV8ZC3aSxlxpxufzJF5jANx6oyS2b c0uhO+OwkpezZhCvK0bf8TVrMLZUo5zi0/I4j4UqPunGA+B+AfHvKEIPAQAA [end]
content_mark [276264b0b3f1e70fc1835a700e6e61bdbe4c3f2f]
The complete format:
'content_mark' the hexadecimal id of the revision the content mark is attached to
file "foo"
The complete format:
'file' the file name corresponding to "file name" (arg 2) in the target revision
domain "database" entry "default-exclude-pattern" "" entry "default-include-pattern" "net.venge.monotone*" entry "default-server" "monotone.ca" domain "known-servers" entry "monotone.ca" "3e6f5225bc2fffacbc20c9de37ff2dae1e20892e" entry "monotone.mtn-host.prjek.net" "a52f85615cb2445989f525bf17a603250381a751" entry "venge.net" "70a0f283898a18815a83df37c902e5f1492e9aa2"
mtn automate set_db_variable database default-server off.net
mtn automate drop_db_variables known-servers
70a0f283898a18815a83df37c902e5f1492e9aa2
format_version "1" new_manifest [0000000000000000000000000000000000000004] old_revision [] add_dir "" add_file "foo" content [5bf1fd927dfb8679496a2e6cf00cbe50c1c87145]
4c2c1d846fa561601254200918fba1fd71e6795d
mtn automate cert 4c2c1d846fa561601254200918fba1fd71e6795d author tester@test.net
If no revs are given, they default to the first two heads that would
be chosen by the merge command for the current branch. If no
workspace is present, the branch may be given by the –branch
option.
resolved_user
conflict resolution; use resolved_*_left
for single file conflicts. Add resolved_keep_left,
resolved_keep_right
resolutions.
directory_loop_created
changed to directory_loop
.
This is intended to be used before a merge; an external tool can guide the user thru resolving each conflict in turn, then do the merge.
The same file format is output by the conflicts store command, which also allows specifying user conflict resolutions. The file syntax for the resolutions is given here, so an external tool can set them directly.
For more information on conflicts, Merge Conflicts.
Note that this cannot be used to show conflicts that would occur in an
update, since in that case one revision is the workspace.
left [532ab5011ea9e64aa212d4ea52363b1b8133d5ba] right [b94a03a922c2c281a88d8988db64e76a32edb6a1] ancestor [ead03530f5fefe50c9010157c42c0ebe18086559]
If there are no conflicts, the ancestor revision is not output, and no conflict stanzas are output.
Attribute changed in both branches, or dropped in one:
conflict attribute node_type "file" attr_name "attr1" ancestor_name "foo" ancestor_file_id [bab2022ff2ed13501a8a83bcc6bd53f5042141be] left_name "foo" left_file_id [bab2022ff2ed13501a8a83bcc6bd53f5042141be] left_attr_value "valueX" right_name "foo" right_file_id [bab2022ff2ed13501a8a83bcc6bd53f5042141be] right_attr_value "valueZ" conflict attribute node_type "file" attr_name "attr2" ancestor_name "foo" ancestor_file_id [bab2022ff2ed13501a8a83bcc6bd53f5042141be] left_name "foo" left_file_id [bab2022ff2ed13501a8a83bcc6bd53f5042141be] left_attr_value "valueY" right_name "foo" right_file_id [bab2022ff2ed13501a8a83bcc6bd53f5042141be] right_attr_state "dropped"
Missing root directory:
conflict missing_root left_type "pivoted root" ancestor_name "foo" right_type "deleted directory" ancestor_name "foo"
Directory deleted and/or renamed:
conflict orphaned_directory right_type "deleted directory" ancestor_name "" left_type "renamed directory" ancestor_name "" left_name "bar" conflict orphaned_file right_type "deleted directory" ancestor_name "foo" left_type "added file" left_name "foo/baz" left_file_id [f5122a7f896cb2dd7ecaa84be89c94ab09c15101] conflict orphaned_file right_type "deleted directory" ancestor_name "foo" left_type "renamed file" ancestor_name "bar" ancestor_file_id [ac4c6d06436632e017bb7d3ea241734e8899f8ce] left_name "foo/baz" left_file_id [ac4c6d06436632e017bb7d3ea241734e8899f8ce] conflict multiple_names left_type "renamed directory" ancestor_name "" left_name "aaa" right_type "renamed directory" ancestor_name "" right_name "bbb" conflict duplicate_name left_type "renamed directory" ancestor_name "foo" left_name "" right_type "renamed directory" ancestor_name "bar" right_name "" conflict multiple_names left_type "renamed directory" ancestor_name "foo" left_name "a/foo" right_type "renamed directory" ancestor_name "foo" right_name "b/foo"
Directory loop created:
conflict directory_loop left_type "renamed directory" ancestor_name "foo" left_name "bar/foo" right_type "renamed directory" ancestor_name "bar" right_name "foo/bar"
File content changed (this may be resolvable by the internal line merger), file also renamed:
conflict content node_type "file" ancestor_name "bar" ancestor_file_id [f0ef49fe92167fe2a086588019ffcff7ea561786] left_name "bar" left_file_id [08cd878106a93ce2ef036a32499c1432adb3ee0d] right_name "bar" right_file_id [0cf419dd93d38b2daaaf1f5e0f3ec647745b9690] resolved_internal conflict content node_type "file" ancestor_name "foo" ancestor_file_id [50bf338804db2685a575124c8c8371d06b65c523] left_name "bar" left_file_id [f1bb6fff2ad16d67143d89fc374ede7abec5d437] right_name "baz" right_file_id [b966b2d35b99e456cb0c55e4573ef0b1b155b4a9]
resolved_internal
is a conflict resolution. If the file
contents in the two revs can be successfully merged by the internal
line merger, resolved_internal
is output.
File added and/or renamed:
conflict duplicate_name left_type "added file" left_name "bar" left_file_id [ba4637112ee3e55a6106d647d6c4e04a6643f8eb] right_type "added file" right_name "bar" right_file_id [fe6d523f607e2f2fc0f0defad3bda0351a95a337] conflict duplicate_name left_type "renamed file" ancestor_name "foo" ancestor_file_id [c6864a8456855c48afe83488a47501fe8b94bd57] left_name "bar" left_file_id [c6864a8456855c48afe83488a47501fe8b94bd57] right_type "added file" right_name "bar" right_file_id [c809d71002ec57a2f1d10221f05993012a491436] conflict duplicate_name left_type "renamed file" ancestor_name "foo" ancestor_file_id [918f3642b57a5e2dd13ee874e3dc2518a53ab4b4] left_name "abc" left_file_id [918f3642b57a5e2dd13ee874e3dc2518a53ab4b4] right_type "renamed file" ancestor_name "bar" ancestor_file_id [bdf46a521d5f1dd54c31dda15e99ff6b0c80394a] right_name "abc" right_file_id [bdf46a521d5f1dd54c31dda15e99ff6b0c80394a]
File renamed to different names:
conflict multiple_names left_type "renamed file" ancestor_name "foo" ancestor_file_id [e80910e54d0bdea1b6d295ada320b87aaf9fdc23] left_name "bar" left_file_id [e80910e54d0bdea1b6d295ada320b87aaf9fdc23] right_type "renamed file" ancestor_name "foo" ancestor_file_id [e80910e54d0bdea1b6d295ada320b87aaf9fdc23] right_name "baz" right_file_id [e80910e54d0bdea1b6d295ada320b87aaf9fdc23]
Invalid file name (_MTN in root directory):
conflict invalid_name left_type "pivoted root" ancestor_name "foo" right_type "added directory" right_name "foo/_MTN" conflict invalid_name left_type "pivoted root" ancestor_name "foo" right_type "renamed file" ancestor_name "bad/_MTN" ancestor_file_id [629d9e5d254241abf4b46f108fb53189e314e41d] right_name "foo/_MTN" right_file_id [629d9e5d254241abf4b46f108fb53189e314e41d]
Revisions that don't share a common ancestor:
left [161e426c3b0c3f98d0be225f69d6f893ce8e0442] right [0e3260f51acd1e98c40666557eb6c0eefeae5f02] ancestor [] conflict missing_root conflict duplicate_name left_type "added directory" left_name "" right_type "added directory" right_name ""
All possible conflict resolutions:
resolved_drop_left resolved_drop_right resolved_keep_left resolved_keep_right resolved_internal resolved_rename_left file resolved_rename_right file resolved_user_left file resolved_user_right fileFor single file conflicts, the
resolved_*_left
resolution name is used.
See Conflicts, for more information on conflict resolutions.
Then each conflict is listed in a basic_io stanza. Stanzas are separated by blank lines.
Each conflict stanza starts with a conflict
line, and contains
up to eleven lines. The order of the lines is not important, and may
change in future revisions, except that the first line will always be
conflict
.
When the conflicts involve files, the file ids are output, so the file
contents can be retrieved efficiently via automate get_file
,
to aid in conflict resolution.
Only the resolved_internal conflict resolution is output by
this command; the other conflict resolutions are inserted in a
conflicts file by conflicts resolve_first or an external
tool, and read by merge.
/home/jim/juice
"foo"
or
'foo'
will not work, but "'foo'"
or '"foo"'
will.
Complex types are also supported, anything which can be evaluated as valid
Lua expression can be given as input, including nested tables and functions,
like f.e. {1,true,{['func'] = function(...) return ... end }}
function
, thread
, userdata
and lightuserdata
are not
serialized, but set to nil
in the dump.
Please note that nil
values in tables are not printed since Lua does not
distinguish between unset and not existing entries in a table like other
programming languages do.
[1] = "Output";
Two numeric return values:
[1] = 3; [2] = 4.4;
A nested table:
[1] = { ["bar"] = { [1] = 1; [2] = 2; [3] = 3; }; };
A callback function:
[1] = nil --[[function]];