summaryrefslogtreecommitdiff
path: root/man/8/applylog
diff options
context:
space:
mode:
Diffstat (limited to 'man/8/applylog')
-rw-r--r--man/8/applylog237
1 files changed, 237 insertions, 0 deletions
diff --git a/man/8/applylog b/man/8/applylog
new file mode 100644
index 00000000..19f9c6fe
--- /dev/null
+++ b/man/8/applylog
@@ -0,0 +1,237 @@
+.TH APPLYLOG 8
+.SH NAME
+applylog, updatelog \- log-based updates
+.SH SYNOPSIS
+.B install/applylog
+[
+.B -c
+] [
+.B -e
+] [
+.B -n
+] [
+.B -s
+] [
+.B -u
+] [
+.B -g
+] [
+.B -v
+] [
+.BI -T " timefile"
+]
+.I clientlog
+.I clientroot
+.I serverroot
+[
+.I path
+\&...
+]
+.PP
+.B install/updatelog
+[
+.BI -p " proto"
+] [
+.BI -r " root"
+] [
+.BI -t " now gen"
+] [
+.B -c
+] [
+.BI -x " path"
+]
+.I log
+[
+.I path
+\&...
+]
+.SH DESCRIPTION
+These two commands allow distribution of updates (eg, to the Inferno tree)
+based on a log of changes since a previous update.
+Notionally, one
+.I server
+system is the primary for a set of files, and one or more
+.I client
+systems maintain replicas of that set,
+although in some applications server and client might be the same machine.
+.PP
+.I Applylog
+is run on a client, to update the file tree rooted at
+.IR clientroot .
+The server's version of the tree is rooted at
+.I serverroot
+on the client,
+typically by being mounted there (see
+.IR bind (1)).
+.I Applylog
+takes the current state of the replica from the entries in
+.IR clientlog ,
+and applies a set of changes represented by log entries read from its standard input.
+Those entries are provided by the server.
+Each change is examined to see whether the file to which it applies is in the expected state.
+If so, the change is applied without comment; otherwise, there is a conflict caused by
+a local change to the replica tree independently from the primary.
+By default,
+.I applylog
+diagnoses the conflict and does not apply the change.
+It accepts the following options:
+.TP
+.B -c
+Resolve inconsistencies in favour of the client: leave the replica as is.
+.TP
+.B -e
+Exit with an error status on any error, including inconsistency between client and server.
+.TP
+.B -n
+Print on standard output a list of changes that would be made, and list any conflicts,
+but do not change the tree or update the log.
+.TP
+.B -s
+Resolve inconsistencies in favour of the server: make the replica match the server's state.
+.TP
+.B -u
+Make file ownership in the replica match that on the server.
+.TP
+.B -g
+Make group ownership in the replica match that on the server.
+.TP
+.B -v
+Print a summary of each log entry as it is examined.
+.TP
+.BI -T " timefile"
+Read a time and sequence number from
+.I timefile
+and apply only log entries with stamps greater than that.
+On successful completion, if the
+.B -n
+option is not given, update the
+.I timefile
+with the stamp of the last log entry processed successfully.
+.PP
+The scope of an update in a tree can be restricted to a particular set of
+.I paths
+listed on the command line.
+They should all be relative path names.
+.PP
+.I Updatelog
+is run on a server to produce a sequence of log entries representing changes
+to the primary tree since a previous log was produced.
+It can also be run on a client to see how its replica state differs from that recorded in a log.
+It accepts the following options:
+.TP
+.BI -p " proto"
+Use
+.I proto
+as the prototype for the file system, as described by
+.IR proto (6)
+(default:
+.BR /lib/proto/all ).
+.TP
+.BI -r " root"
+The replica is rooted at
+.I root
+(default:
+the current directory,
+.BR . ).
+.TP
+.BI -t " now gen"
+Make log entries use time
+.I now
+and initial sequence number
+.IR gen .
+The defaults are the current time and 0.
+.TP
+.B -c
+Produce output only for content and metadata changes, not additions or deletions.
+.TP
+.BI -x " path"
+Exclude
+.I path
+and its subtrees from consideration.
+.PP
+By default,
+.I updatelog
+produces log entries describing changes, additions and deletions to all files in
+.I root
+but the scope can be limited by giving a different
+.IR proto ,
+explicitly listing trees to consider as
+.I paths
+on the command line, and
+by giving one or more
+.B -x
+options to exclude particular paths,
+in any desired combination.
+.SS Log file format
+.PP
+A log file is a text file with one line representing each change to the tree.
+Each line has the form:
+.IP
+.I "time gen verb path serverpath mode uid gid mtime length"
+[
+.I sum
+\&...
+]
+.PP
+where:
+.RS
+.TP
+.I "time, gen"
+are decimal numbers that order the sequence of requests:
+.I time
+is typically the time in seconds of the epoch at which the entry was made;
+.I gen
+is a monotonically increasing sequence number
+.PD
+.TP
+.I verb
+is an action:
+.RS
+.PD0
+.TP
+.B a
+add file
+.I path
+.TP
+.B c
+change the contents of file
+.I path
+.TP
+.B d
+delete
+.I path
+.TP
+.B m
+change the metadata (permissions, ownership) for
+.I path
+.RE
+.PD
+.TP
+.I path
+the name of the file on the client
+.TP
+.I serverpath
+the name of the file on the server with the contents for
+.IR path ,
+or simply
+.L -
+when the server and client file names are the same
+.TP
+.I "mode, uid, gid, length, mtime"
+the resulting metadata (except for
+.B d
+where the metadata is that for the file to be deleted)
+.TP
+.I sum
+is the MD5 checksum of the file's contents
+.RE
+.SH SOURCE
+.B /appl/cmd/install/applylog.b
+.br
+.B /appl/cmd/install/logs.b
+.br
+.B /appl/cmd/install/updatelog.b
+.SH SEE ALSO
+.IR fs (1),
+.IR kfs (4),
+.IR proto (6)