Commits can be tagged with arbitrary user-controlled. These tags can then be used to filter logs, control push and pull operations, and augment other operations.
Tags are structured as a
key=value map, where each key must be unique.
For example, creating a commit with
build=nightly and later updating it
build=archive will overwrite the previous value. As a convenience,
the value can be omitted, in which case the empty string will be used. This
lets tags be used as labels, such as
titan commit -t nightly ....
A commit can be created with any number of tags set through titan commit. Tags can be added or modified by titan tag, and removed by titan delete.
Tags are displayed as part of titan log:
$ titan log postgres commit 428f81caf63d4314b8f41a31aad2e8b1 User: Eric Schrock Email: Eric.Schrock@delphix.com Date: 2019-10-23T20:23:57Z Tags: foo=bar baz Commit message
Filtering by Tag¶
A number of commands can be augmented by specifying one or more
to filter commits by tag. These commands include:
When tag options are specified, only matching commits (or the latest matching commit for pull, push, and checkout) are included. The commits must match all specified tags. If both a key and value are specified, then the tag must match both exactly. If only a key is specified, then any value will be considered a match, as simply the existence of the tag is sufficient. Like tag creation, this allows the value to be optional, treating the tags more like labels with no explicit value:
$ titan log -t baz -t foo=bar postgres commit 428f81caf63d4314b8f41a31aad2e8b1 User: Eric Schrock Email: Eric.Schrock@delphix.com Date: 2019-10-23T20:23:57Z Tags: foo=bar baz Commit message
All tags must match for a commit to be included. There is no way to specify that one or more tags match (logical OR).