Version Control with Subversion - Repository Maintenance - svnlook
svnlook
svnlook
is a tool provided by
Subversion for examining the various revisions and
transactions in a repository. No part of this program
attempts to change the repository—it's a
“read-only” tool.
svnlook
is typically used by the repository hooks for reporting the
changes that are about to be committed (in the case of the
pre-commit
hook) or that were just
committed (in the case of the
post-commit
hook) to the repository. A repository administrator may use
this tool for diagnostic purposes.
svnlook
has a straightforward
syntax:
$ svnlook help
general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
Note: any subcommand which takes the '--revision' and '--transaction'
options will, if invoked without one of those options, act on
the repository's youngest revision.
Type "svnlook help <subcommand>" for help on a specific subcommand.
…
Nearly every one of
svnlook
's
subcommands can operate on either a revision or a
transaction tree, printing information about the tree
itself, or how it differs from the previous revision of the
repository. You use the --revision and
--transaction options to specify which
revision or transaction, respectively, to examine. Note
that while revision numbers appear as natural numbers,
transaction names are alphanumeric strings. Keep in mind
that the filesystem only allows browsing of uncommitted
transactions (transactions that have not resulted in a new
revision). Most repositories will have no such
transactions, because transactions are usually either
committed (which disqualifies them from viewing) or aborted
and removed.
In the absence of both the --revision
and --transaction options,
svnlook
will examine the youngest (or
“HEAD”) revision in the repository. So the
following two commands do exactly the same thing when 19 is
the youngest revision in the repository located at
/path/to/repos :
$ svnlook info /path/to/repos
$ svnlook info /path/to/repos --revision 19
The only exception to these rules about subcommands is
the
svnlook youngest
subcommand, which
takes no options, and simply prints out the
HEAD revision number.
$ svnlook youngest /path/to/repos
19
Output from
svnlook
is designed to be
both human- and machine-parsable. Take as an example the output
of the info subcommand:
$ svnlook info /path/to/repos
sally
2002-11-04 09:29:13 -0600 (Mon, 04 Nov 2002)
27
Added the usual
Greek tree.
The output of the info subcommand is
defined as:
-
The author, followed by a newline.
-
The date, followed by a newline.
-
The number of characters in the log message,
followed by a newline.
-
The log message itself, followed by a newline.
This output is human-readable, meaning items like the
datestamp are displayed using a textual representation
instead of something more obscure (such as the number of
nanoseconds since the Tasty Freeze guy drove by). But this
output is also machine-parsable—because the log
message can contain multiple lines and be unbounded in
length,
svnlook
provides the length of
that message before the message itself. This allows scripts
and other wrappers around this command to make intelligent
decisions about the log message, such as how much memory to
allocate for the message, or at least how many bytes to skip
in the event that this output is not the last bit of data in
the stream.
Another common use of
svnlook
is to
actually view the contents of a revision or transaction
tree. The
svnlook tree
command displays
the directories and files in the requested tree. If you
supply the --show-ids option, it will also
show the filesystem node revision IDs for each of those
paths (which is generally of more use to developers than to
users).
$ svnlook tree /path/to/repos --show-ids
/ <0.0.1>
A/ <2.0.1>
B/ <4.0.1>
lambda <5.0.1>
E/ <6.0.1>
alpha <7.0.1>
beta <8.0.1>
F/ <9.0.1>
mu <3.0.1>
C/ <a.0.1>
D/ <b.0.1>
gamma <c.0.1>
G/ <d.0.1>
pi <e.0.1>
rho <f.0.1>
tau <g.0.1>
H/ <h.0.1>
chi <i.0.1>
omega <k.0.1>
psi <j.0.1>
iota <1.0.1>
Once you've seen the layout of directories and files in
your tree, you can use commands like
svnlook
cat
,
svnlook propget
, and
svnlook proplist
to dig into the details
of those files and directories.
svnlook
can perform a variety of
other queries, displaying subsets of bits of information
we've mentioned previously, reporting which paths were
modified in a given revision or transaction, showing textual
and property differences made to files and directories, and
so on. The following is a brief description of the current
list of subcommands accepted by
svnlook
,
and the output of those subcommands:
-
author
-
Print the tree's author.
-
cat
-
Print the contents of a file in the tree.
-
changed
-
List all files and directories that changed in the
tree.
-
date
-
Print the tree's datestamp.
-
diff
-
Print unified diffs of changed files.
-
dirs-changed
-
List the directories in the tree that were
themselves changed, or whose file children were
changed.
-
history
-
Display interesting points in the history of a
versioned path (places where modifications or copies
occurred).
-
info
-
Print the tree's author, datestamp, log message
character count, and log message.
-
lock
-
If a path is locked, describe the lock attributes.
-
log
-
Print the tree's log message.
-
propget
-
Print the value of a property on a path in the
tree.
-
proplist
-
Print the names and values of properties set on paths
in the tree.
-
tree
-
Print the tree listing, optionally revealing the
filesystem node revision IDs associated with each
path.
-
uuid
-
Print the repository's UUID—
U
niversal
U
nique
ID
entifier.
-
youngest
-
Print the youngest revision number.
[an error occurred while processing this directive]
|