tla(1)

✨ tla ✨ β€” the arch command line client tool πŸ’…

ok so bestie, welcome to tla (that's the manual page name too, tla(1), in case you were wondering) β€” it's the arch command line client tool and honestly? she's iconic. πŸŽ€


🌸 SYNOPSIS 🌸

like, here's the vibe of how you actually call her:

tla command [ command_options ]
tla command [-h|--help|-H]
tla [-h|--help|-H|-V|--version]

so basically: a command, maybe some options for that command, or if you're just here to ask questions, there's help and version stuff. lowkey perfect. ✨


πŸ’– DESCRIPTION πŸ’–

tla is an implementation of arch. periodt.

and arch? bestie, arch is a version control system. she lets you keep old versions of files and directories (usually source code, because obviously πŸ’…), and she keeps a log of who changed what, when, and why. like SVN, CVS, or RCS β€” but we're not comparing, we're just saying. 😌

and ngl, arch has a number of advantages compared to competing systems. among these are:

🌈 Works on Whole Trees 🌈

arch keeps track of whole trees β€” not just individual files. it's giving main character energy. πŸ¦‹

for example:

  • if you change many files in a tree, arch can record all of those changes as a group rather than file-by-file. obsessed.
  • if you rename files or reorganize a tree, arch can record those tree arrangements along with your changes to file contents. she sees everything. πŸ‘‘

πŸŽ€ Changeset Oriented πŸŽ€

arch doesnΒ΄t simply "snapshot" your project trees. no ma'am. πŸ™ˆ

instead, arch associates each revision with a particular changeset: a description of exactly what has changed. and because of that, arch provides changeset oriented commands to help you:

  • review changesets πŸ”
  • merge trees by applying changesets πŸ”€
  • examine the history of a tree by asking what changesets have been applied to it πŸ“œ
  • and so forth ✨

πŸ’œ Fully Distributed πŸ’œ

arch doesn´t rely on a central repository. literally not needed. 🧚

for example, there is no need to give write access to a projectΒ΄s archive to all significant contributors. instead, each contributor can have their own archive for their work. and arch seamlessly operates across archive boundaries. slay. πŸ’…

πŸ“œ COMMAND OVERVIEW ✨

okay bestie, here's the whole entire menu β€” every tla command that exists, sorted into little friend groups. no skimming, we're going through ALL of them. grab a snack. πŸ“


πŸŽ€ Help

tla help [options]

asks arch for help. when you're lost, this is your emotional support command. πŸ’–


πŸ‘‘ User Commands

tla my-id [options] [id]

prints your id, or changes it to whatever you hand it. your whole arch identity. main character badge. ✨

tla my-default-archive [options] [archive]

prints your default archive, or changes it. it's the "where do i actually live" setting. 🏠

tla register-archive [options] [archive] location

changes an archive location registration. you're telling arch where that archive is registered to be. πŸ’…

tla whereis-archive [options] archive

prints where an archive's location is registered. bestie location services fr fr. πŸ“

tla archives [options] [search regular expression]

reports all your registered archives and their locations β€” and you can filter the list with a search regular expression. πŸ¦‹


🌳 Project Tree Commands

tla init-tree [options] [[archive]/version]

initializes a brand new project tree. the origin story, the birth of the vibe. πŸ‘‘

tla tree-root [options] [dir]

finds the root of a project tree and prints it out. πŸ’–

tla tree-version [options] [dir]

prints the default version for a project tree.

tla tree-id [options] [dir]

prints the tree identifier for a project tree.

tla tree-revision [options] [dir]

also prints the tree identifier for a project tree. same energy as the one above, and we respect that.

tla set-tree-version [options] [archive]/version

sets the default version for a project tree.

tla undo [options] [revision]

undoes changes in a project tree and saves them. the ctrl-z of your dreams. 😌

tla redo [options] [changeset]

redoes changes in a project tree.

tla changes [options] [revision] [-- limit...]

reports about the local changes in a project tree.

tla file-diff [options] file [revision]

shows the local changes to one specific file.

tla diff [options] [revision] [-- files...]

reports about the local changes in a project tree.

tla export [options] [revision] dir

exports all of a tree revision, or just some of it. 🎁


πŸ“¦ Project Tree Inventory Commands

tla inventory [options] [--] [dir]*

does inventory on a source tree. like a stocktake but for your files. 🧾

tla tree-lint [options] [dir]

audits a source tree.

tla lint [options] [dir]

audits a source tree.

tla id [options] file ...

reports the inventory id for a file.

tla id-tagging-method [options] [method]

prints or changes a project tree's id tagging method. πŸ’…

tla add [options] file ...

adds an explicit inventory id.

tla add-id [options] file ...

adds an explicit inventory id.

tla delete-id [options] file ...

removes an explicit inventory id.

tla move-id [options] from to

moves an explicit inventory id.

tla touch [options] file ...

adds an explicit inventory id, and touches the file while it's at it.

tla rm [options] file...

removes a file (or a dir, or a symlink) along with its explicit inventory tag. πŸ’€

tla mv [options] from to OR from1 from2 ... dir

moves a file (or a dir, or a symlink) and its explicit inventory tag. two whole moods: rename it, or yeet a bunch of things into a dir.

tla explicit-default [options] [TAG-PREFIX]

prints or modifies the default ids.

tla default-id [options] [TAG-PREFIX]

prints or modifies the default ids.

tla id-tagging-defaults [options]

prints the default =tagging-method contents. 🌈


🩹 Patch Set Commands

tla changeset [options] ORIG MOD DEST [files]

computes a whole-tree changeset.

tla mkpatch [options] ORIG MOD DEST [files]

computes a whole-tree changeset.

tla apply-changeset [options] CHANGESET [TARGET]

applies a whole-tree changeset.

tla dopatch [options] CHANGESET [TARGET]

applies a whole-tree changeset.

tla show-changeset [options] [dir]

generates a report from a changeset. πŸ“


🏦 Archive Transaction Commands

tla make-archive [options] [name] location

creates a new archive directory.

tla archive-setup [options] [version ...]

creates new categories, branches and versions. the whole family tree, boom. πŸ‘‘

tla make-category [options] category

creates a new archive category.

tla make-branch [options] branch

creates a new archive branch.

tla make-version [options] version

creates a new archive version.

tla import [options] [[archive]/version]

archives a full-source base-0 revision. πŸš€

tla commit [options] [[archive]/version] [-- file ...]

archives a changeset-based revision.

tla get [options] revision [dir]

constructs a project tree for a revision.

tla get-changeset [options] revision [dir]

retrieves a changeset from an archive.

tla lock-revision [options] revision

locks (or unlocks) an archive revision. πŸ”’

tla archive-mirror [options] [from [to] [limit]]

updates an archive mirror.


πŸ—„οΈ Archive Commands

tla abrowse [options] [limit]

prints an outline describing the archive contents.

tla rbrowse [options] [[ARCHIVE_NAME/]LIMIT_REGEX]

prints an outline describing an archive's contents.

tla categories [options] [archive]

lists the categories in an archive.

tla branches [options] [category]

lists the branches in an archive category.

tla versions [options] [branch]

lists the versions in an archive branch.

tla revisions [options] [version]

lists the revisions in an archive version.

tla ancestry [options] [revision]

displays the ancestry of a revision. 🌳

tla ancestry-graph [options] [revision]

displays the ancestry of a revision.

tla cat-archive-log [options] revision

prints the contents of an archived log entry.

tla cacherev [options] [revision]

caches a full source tree in an archive.

tla cachedrevs [options] [version]

lists the cached revisions in an archive.

tla uncacherev [options] revision [dir]

removes a cached full source tree from an archive.

tla archive-meta-info [options] item-name

reports meta-info from an archive. 🏷️

tla archive-snapshot [options] dir [limit]

updates an archive snapshot.

tla archive-version [options]

lists the archive-version in an archive.

tla archive-fixup [options]

fixes ancillary files in an archive. πŸ”§


πŸ““ Patch Log Commands

tla make-log [options] [version]

initializes a new log file entry.

tla log-versions [options]

lists the patch log versions in a project tree.

tla add-log-version [options] [archive]/version

adds a patch log version to a project tree.

tla remove-log-version [options] [archive]/version

removes a version's patch log from a project tree.

tla logs [options] [[archive]/version ...]

lists the patch logs for a version in a project tree.

tla cat-log [options] revision-spec

prints the contents of a project tree log entry.

tla changelog [options] [[archive]/version]

generates a ChangeLog from a patch log. πŸ’–

tla log-for-merge [options] [[archive]/version]

generates a log entry body for a merge.

tla merges [options] INTO [FROM]

reports where two branches have been merged.

tla new-merges [options] [[archive]/version]

lists the tree patches that are new to a version.


🧩 Multi-project Configuration Commands

tla build-config [options] config

instantiates a multi-project config.

tla cat-config [options] config

outputs information about a multi-project config. ✨


🌈 Commands for Branching and Merging

tla tag [options] SOURCE-REVISION TAG-VERSION

creates a continuation revision. 🏷️

tla branch [options] [SOURCE] BRANCH

creates a continuation revision.

tla switch [options] [package]

changes the working trees version.

tla update [options] [version/revision]

updates a project tree.

tla replay [options] [version/revision...]

applies revision changesets to a project tree.

tla star-merge [options] [FROM]

merges mutually merged branches. ⭐

tla apply-delta [options] FROM(REVISION|DIR) TO(REVISION|DIR)

computes a changeset between any two trees or revisions and applies it to a project tree.

tla missing [options] [version]

prints the patches that are missing from a project tree.

tla join-branch [options] version

adds a version as an ancestor of a project tree.

tla sync-tree [options] revision

unifies a project tree's patch-log with a given revision.

tla delta [options] (REVISION|TREE)-A (REVISION|TREE)-B [DESTDIR]

computes a changeset (or a diff) between any two trees or revisions. πŸ’…


πŸ—ƒοΈ Local Cache Commands

tla changes [options] [revision] [-- limit...]

reports about the local changes in a project tree.

tla file-diff [options] file [revision]

shows the local changes to a file.

tla file-find [options] file [revision]

finds a given version of a file.

tla pristines [options] [limit]

lists the pristine trees in a project tree.

tla lock-pristine [options] revision

locks (or unlocks) a pristine tree. πŸ”’

tla add-pristine [options] revision

ensures that a project tree has a particular pristine revision.

tla find-pristine [options] revision

finds a pristine revision and prints the path to it. πŸ“


πŸ“š Revision Library Commands

tla my-revision-library [options] [dir]

prints your revision library path, or changes it.

tla library-config [options] library-dir

configures the parameters of a revision library.

tla library-find [options] revision

finds a revision in the revision library and prints its location.

tla library-add [options] revision

adds a revision to the revision library.

tla library-remove [options] revision

removes a revision from the revision library.

tla library-archives [options]

lists the archives in your revision library.

tla library-categories [options] [archive]

lists the categories in your revision library.

tla library-branches [options] [category]

lists the branches in a library category.

tla library-versions [options] [branch]

lists the versions in a library branch.

tla library-revisions [options] [version]

lists the revisions in a library version.

tla library-log [options] revision

outputs a log message from the revision library.

tla library-file [options] file revision

finds a file in a revision library. πŸ¦‹


πŸ“’ Published Revisions Commands

tla grab [options] location

grabs a published revision. no cap, that's genuinely what it does. 🀲


πŸ› οΈ Miscellaneous Scripting Support

tla parse-package-name [options] name

parses a package name.

tla valid-package-name [options] name

tests a package name for validity. βœ…

tla escape [--unescaped] string

prints strings in escaped or unescaped form. ✨

🫢 HELP 🫢

🌸 tla help

bestie's little doorway to literally every other command β€” it gives you help with arch πŸ’–

Usage: tla help [options]
  • -h, --help β€” pops up a help message and dips out. short and sweet πŸŽ€
  • -H β€” the verbose help message, then exits. she's chatty, we love her πŸ’…
  • -b, --basic β€” show only the basic commands, no extras ✨
  • -V, --version β€” print a release identifier string and exit πŸ¦‹

This command prints a list of the available commands. that's it, that's the whole job πŸ’–

Wanna peek at just the options for one specific command? use:

tla $cmd -h

(where $cmd is the name of the command). and if you want the full lore, the extra explanation about a given command, go:

tla $cmd -H

πŸ‘‘ USER COMMANDS πŸ‘‘

πŸ’œ tla my-id

print or change your id πŸͺͺ

Usage: tla my-id [options] [id]
  • -h, --help β€” Display a help message and exit. πŸŽ€
  • -H β€” Display a verbose help message and exit. πŸ’…
  • -V, --version β€” Display a release identifier string and exit. πŸ¦‹
  • -e, --errname β€” specify program name for errors 🌸
  • -u, --uid β€” print only the UID portion of the ID ✨

With no argument, it prints your arch id. simple as that πŸ’–

With an argument, it records ID-STRING as your id in ~/.arch-params/=id β€” so that's where your whole identity lives, no cap 🫢

Your id gets recorded in various archives and log messages as you use arch. it has to be entirely printable characters and fit on one line. by convention it should look like an email address, like this iconic example:

Jane Hacker <jane.hacker@gnu.org>

The portion of an id string between < and > is called your uid. arch sometimes uses your uid as a fragment when generating unique file names πŸ‘‘

The option -u (--uid) makes only the uid part of your id string get printed. just the inside bits, nothing else πŸ’…

πŸ¦‹ tla my-default-archive

print or change your default archive πŸ—‚οΈ

Usage: tla my-default-archive [options] [archive]
  • -h, --help β€” Display a help message and exit. πŸŽ€
  • -H β€” Display a verbose help message and exit. πŸ’…
  • -V, --version β€” Display a release identifier string and exit. πŸ¦‹
  • -A, --archive β€” Override `my-default-archiveΒ΄ ✨
  • -e, --errname β€” specify program name for errors 🌸
  • -d, --delete β€” unspecify your default archive πŸ’€
  • -s, --silent β€” suppress reassuring messages πŸ™ˆ

With no argument, and without -d, it prints the name of your default archive.

With an argument, it records ARCHIVE as your default archive in ~/.arch-params/=default-archive πŸ’–

With the option -d (--delete) and no argument, it ensures you do not have a default archive set in ~/.arch-params. bye bestie πŸ‘‹

Your default archive is determined this way, in order:

  • If the option -A (--archive) is given and not empty, that archive is the default (which makes this script useful for processing a -A argument that was passed to another script). she's flexible like that πŸ’…
  • If -A is not given, but ~/.arch-params/=default-archive exists and is not empty, that is your default archive. ✨
  • Otherwise, your default archive is the name of the local archive rooted at the argument to -R (--root) or specified in the environment variable ARCHROOT. 🌈

If no default archive can be found by any of these means, the program exits with status 1, printing an error message β€” unless the -s (--silent) option is given. so if you're getting a sad little exit 1, that's why 😭

🌸 tla register-archive

change an archive location registration πŸ“

Usage: tla register-archive [options] [archive] location
  • -h, --help β€” Display a help message and exit. πŸŽ€
  • -H β€” Display a verbose help message and exit. πŸ’…
  • -V, --version β€” Display a release identifier string and exit. πŸ¦‹
  • -f, --force β€” overwrite existing location πŸ”₯
  • --present-ok β€” return 0 even if archive exists βœ…
  • -d, --delete β€” delete archive registration πŸ’€

Records the location of ARCHIVE.

With -d, it removes the registration of a previously registered archive. and when that's accompanied by -f, it overrides permissions on the registration file and doesn't complain if the archive is not registered. permission override, periodt. πŸ’…

A LOCATION should be either a directory name or a distant URL. like, near or far, your call πŸ¦‹

When registering a new archive, if no ARCHIVE's name is passed on the command line, then the archive's name will be read automatically from the archive's meta data. it introduces itself, iconic behavior ✨

Archive locations are stored in ~/.arch-params/=locations πŸ—‚οΈ

You must register the location of a remote archive before you access it. no shortcuts, bestie 🚨

It is not strictly necessary to register the locations of local archives (you can always specify their location using command line arguments and/or environment variables), but registering local archive locations is recommend (for simplicity). lowkey just do it, future you says thank you 🫢

⭐ tla whereis-archive

print an archive location registration πŸ”Ž

Usage: tla whereis-archive [options] archive
  • -h, --help β€” Display a help message and exit. πŸŽ€
  • -H β€” Display a verbose help message and exit. πŸ’…
  • -V, --version β€” Display a release identifier string and exit. πŸ¦‹

Prints the registered location of an archive.

Usually the archive must have been previously registered with "tla register-archive". ✨

As a special exception, if the archive is not registered, but is the name of the archive rooted at the location given with the option -R (--root) or in the environment variable ARCHROOT, then it prints that root directory. surprise shortcut!! 🌈

πŸŽ€ tla archives

report registered archives and their locations πŸ“‹

Usage: tla archives [options] [search regular expression]
  • -h, --help β€” Display a help message and exit. πŸŽ€
  • -H β€” Display a verbose help message and exit. πŸ’…
  • -V, --version β€” Display a release identifier string and exit. πŸ¦‹
  • -n, --names β€” print archive names only 🌸
  • -R, --exclude-remote β€” Exclude MIRROR and SOURCE archives. πŸ™ˆ

Prints a list of registered archives and their locations πŸ’–

If [search regex] is given, then only archives with names that match [search regex] will be shown. filtering, we love to see it ✨

πŸ’– PROJECT TREE COMMANDS πŸ’–

okay bestie, this is the section where you actually live in your tree. setting it up, finding its root, checking its identity, undoing your chaos. it's giving main character energy for your working directory. 🫢


tla init-tree

initialize a new project tree
tla init-tree [options] [[archive]/version]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first
  • --nested β€” initialize a nested project tree.

This makes DIR into a shiny brand-new project tree. ✨

An empty patch-log for VERSION gets created, and VERSION becomes the default place you check stuff in to. no cap, that's the whole vibe.


tla tree-root

find and print the root of a project tree
tla tree-root [options] [dir]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • --accurate β€” error for mid-txn trees
  • -s, --silent β€” exit status only

Finds and prints the root of the project tree that DIR lives inside (or the current directory, if you didn't say).

The --accurate option checks for three possibilities, and bestie, this is the ✨drama✨ part:

  1. The project tree was the subject of a commit that was killed before the log entry was added to the tree's patch log. It is unknown whether or not the commit took place in the archive. The {arch} directory contains the log file as "++mid-commit".
  2. The project tree was the subject of a killed commit, but it is certain the commit took place. The log file is stored as "++commit-definite".
  3. The project tree patch log is fully up-to-date (as far as arch knows).

In case 1, exit with an error and error message. 😭

In case 2, install the log file before printing the tree root and exiting normally.

In case 3, print the tree root and exit normally. slay.


tla tree-version

print the default version for a project tree
tla tree-version [options] [dir]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.

Prints the default version of project tree DIR (or the current directory if you're being lazy about it πŸ’…).


tla tree-id

Print the tree identifier for a project tree
tla tree-id [options] [dir]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.

Prints the patchset identifier that represents the current tree-> I.e. foo@example.com/demo--1.0--patch-4. Defaults to the tree the current directory is in.


tla tree-revision

Print the tree identifier for a project tree
tla tree-revision [options] [dir]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.

Prints the patchset identifier that represents the current tree-> I.e. foo@example.com/demo--1.0--patch-4. Defaults to the tree the current directory is in.


tla set-tree-version

set the default version for a project tree
tla set-tree-version [options] [archive]/version
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first

This operation sets the default version on which to check-in the source tree DIR (default: the current directory) during a commit. πŸŽ€

You can specify the archive for this version as an ordinary command line argument (ARCHIVE/VERSION) or via -R, -A and the environment as usual (try tla my-default-archive --help). iykyk.


tla undo

undo and save changes in a project tree
tla undo [options] [revision]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first
  • -o, --output PATCH-DIR β€” save changeset in PATCH-DIR
  • -n, --no-output β€” do not save the changeset
  • -N, --forward β€” pass the --forward option to `patchΒ΄
  • -q, --quiet β€” no progress reports while computing changeset
  • --unescaped β€” show filenames in unescaped form

Computes a patch set describing the changes from REVISION to the project tree containing DIR. Saves the patch in PATCH-DIR (which must not already exist, bestie, do not test this) and applies the patch in reverse to the project tree containing DIR.

The effect is to remove local changes in the DIR project tree but save them in a convenient form. it's giving "clean up your room but keep everything in a box" 🧚

If REVISION is not specified, the latest ancestor of the default version of project tree is used.

If REVISION is specified as a VERSION, the latest ancestor of the project tree in that VERSION is used.

If DIR is not specified, . is assumed.

If PATCH-DIR is not specified, a temporary file-name of the matching ,,undo-* is used.

If --no-output is specified, the patch set is not saved.

See also tla redo -H and tla changes -H.


tla redo

redo changes in project tree
tla redo [options] [changeset]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -N, --forward β€” pass the --forward option to `patchΒ΄
  • -k, --keep β€” do not delete the patch
  • -q, --quiet β€” no progress reports while computing changeset
  • -d, --dir DIR β€” Operate on project tree in DIR (default `.Β΄)
  • --unescaped β€” show filenames in unescaped form

Applies CHANGESET to the project tree and then deletes CHANGESET. (yes, deletes. that's the deal.)

If CHANGESET is not specified, the highest numbered ,,undo-N directory in the project tree root is used.

If --keep is given, the changeset directory is not deleted.

See also tla undo --help and tla apply-changeset --help.


tla changes

report about local changes in a project tree
tla changes [options] [revision] [-- limit...]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override `my-default-archiveΒ΄.
  • -d, --dir DIR β€” Change to DIR first.
  • -o, --output DIR β€” Save changeset in DIR (implies --keep).
  • -v, --verbose β€” Verbose changeset report.
  • -q, --quiet β€” Suppress progress information
  • --diffs β€” Include diffs in the output.
  • -k, --keep β€” DonΒ΄t remove the output directory on termination.
  • --link β€” hardlink unchanged files to revision library
  • --unescaped β€” show filenames in unescaped form

Generates a patch report describing the differences between the project tree containing DIR (or the current directory) and REVISION. πŸ¦‹

The default patch level for a given version is the latest level for which the project tree has a patch. The default archive and version is as printed by tla tree-version.


tla file-diff

show local changes to a file
tla file-diff [options] file [revision]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -N, --new-file β€” Treat missing file as empty

Prints diffs between FILE and the corresponding file in a cached copy of REVISION. just the one file, just for you πŸ’…

The default patch level for a given version is the latest level for which the project tree has a patch. The default archive and version is as printed by tla tree-version.


tla diff

report about local changes in a project tree
tla diff [options] [revision] [-- files...]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override `my-default-archiveΒ΄.
  • -d, --dir DIR β€” Change to DIR first.
  • -o, --output DIR β€” Save changeset in DIR.
  • -v, --verbose β€” Verbose changeset report.
  • -q, --quiet β€” Suppress progress information
  • -s, --summary β€” Do not include diffs in the output.
  • -k, --keep β€” DonΒ΄t remove the output directory on termination.
  • -L, --latest β€” compare against the latest revision (HEAD) in branch
  • --link β€” hardlink unchanged files to revision library
  • --unescaped β€” show filenames in unescaped form
  • --limit LIMITS β€” limit the diff to LIMITS
  • -D, --diff-options β€” specify options for `diffΒ΄ (for display only)

Generates a patch report describing the differences between the project tree containing DIR (or the current directory) and REVISION.

The default patch level for a given version is the latest level for which the project tree has a patch. The default archive and version is as printed by tla tree-version.


tla export

export all or some of a tree revision
tla export [options] [revision] dir
  • -d, --dir DIR β€” Change to DIR first.
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -s, --silent β€” no output

Extracts REVISION from an archive, creating a new source tree with no control information. Note if export the local tree revision, local modifications will not be included; the exported file will only be copies in the repository.

⚠️ bestie read that again: your local edits do NOT come along for the ride. it's the repository copy only. no cap.

πŸ¦‹ PROJECT TREE INVENTORY COMMANDS πŸ¦‹

tla inventory

inventory a source tree
tla inventory [options] [--] [dir]*
  • -h, --help β€” display help
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” display version info
  • -s, --source β€” list source files
  • -p, --precious β€” list precious files
  • -b, --backups β€” list backup files
  • -j, --junk β€” list junk files
  • -u, --unrecognized β€” list unrecognized files
  • -t, --trees β€” list roots of nested trees
  • -d, --directories β€” list only directories
  • -f, --files β€” list only non-directories
  • -B, --both β€” list both dirs and files
  • --kind β€” indicate file kinds
  • --all β€” include arch control files
  • --nested β€” include nested trees

okay that's the tree stuff πŸ’œ keep going, there's more πŸ‘‘

  • --ids β€” list with ids (source files only) πŸ’…
  • --untagged β€” include files that are missing ids, we love an inclusive queen 🫢
  • --explicit β€” use explicit file ids
  • --implicit β€” permit implicit file ids
  • --tagline β€” permit tagline file ids
  • --names β€” use name-based file ids
  • --unescaped β€” show filenames in unescaped form

With no arguments, it prints a human-readable inventory report. periodt

With category options (--source etc), limit the report to just those files. With no other options, the report includes all sections and files.

The options -d, -f, and -b cancel each other. mutually exclusive, bestie

If a directory is precious, junk, or unrecognized, only the directory name itself is printed -- its contents are not searched. no digging deeper, okay?

Each command option implies the corresponding category option (e.g. "--source-command" implies "--source"). The exit status of the command is ignored. we literally do not care about its exit status

tla tree-lint

(alias for lint) β€” okay bestie, it's giving audit energy.

Usage:

Usage: tla tree-lint [options] [dir]

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -s, --broken-symlinks β€” Just list broken symlinks
  • -u, --unrecognized-files β€” Just list files violating naming conventions
  • -t, --untagged-files β€” Just list files lacking inventory ids
  • -m, --missing-files β€” Just list inventory ids lacking corresponding files
  • -d, --duplicate-ids β€” Just list duplicated ids
  • --strict β€” exit with non-0 status on _any_ oddity
  • --unescaped β€” show filenames in unescaped form

Audit a source tree for missing files, untagged files, duplicate ids, and files not matching recognized naming conventions. full detective mode πŸ”

The default is to list files failing any of those tests. Enabling any of the specific tests disables the rest, unless they're explicitly enabled on the command line. Therefore, "tla tree-lint" is equivalent to "tla tree-lint -sutmd". slay

tla lint

audit a source tree

Usage:

Usage: tla lint [options] [dir]

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -s, --broken-symlinks β€” Just list broken symlinks
  • -u, --unrecognized-files β€” Just list files violating naming conventions
  • -t, --untagged-files β€” Just list files lacking inventory ids
  • -m, --missing-files β€” Just list inventory ids lacking corresponding files
  • -d, --duplicate-ids β€” Just list duplicated ids
  • --strict β€” exit with non-0 status on _any_ oddity
  • --unescaped β€” show filenames in unescaped form

Audit a source tree for missing files, untagged files, duplicate ids, and files not matching recognized naming conventions. full detective mode πŸ”

The default is to list files failing any of those tests. Enabling any of the specific tests disables the rest, unless they're explicitly enabled on the command line. Therefore, "tla tree-lint" is equivalent to "tla tree-lint -sutmd". slay

tla id

report the inventory id for a file

Usage:

Usage: tla id [options] file ...

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • --implicit β€” Use the implicit id tagging method.
  • --tagline β€” Use the tagline id tagging method (default).
  • --explicit β€” Use the explicit id tagging method.
  • --names β€” Use the names id tagging method.
  • --silent β€” No output -- exit status only.
  • --unescaped β€” show filenames in unescaped form

Print a file's inventory id. just the id, bestie

tla id-tagging-method

print or change a project tree id tagging method

Usage:

Usage: tla id-tagging-method [options] [method]

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -d, --dir DIR β€” cd to DIR first
  • --strict β€” exit with error if method not set

Print or change the method by which source files are identified in DIR (or the current directory).

When setting, METHOD must be one of:

names           -- use naming conventions only
implicit        -- use naming conventions but permit
                   for inventory tags
explicit        -- require explicit designation of source
tagline         -- mix names, explicit and arch-tag: methods

When printing, if --strict is provided but no id tagging method is explicitly set, print an error. strict mode activated

tla add

(alias for add-id) β€” same energy, different name.

Usage:

Usage: tla add [options] file ...

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -i, --id ID β€” Specify ID, instead of using auto-generated id.

Create an explicit inventory id for FILE (which may be a regular file, symbolic link, or directory). glow up your tree ✨

tla add-id

add an explicit inventory id

Usage:

Usage: tla add-id [options] file ...

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -i, --id ID β€” Specify ID, instead of using auto-generated id.

Create an explicit inventory id for FILE (which may be a regular file, symbolic link, or directory). glow up your tree ✨

tla delete-id

remove an explicit inventory id

Usage:

Usage: tla delete-id [options] file ...

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.

Remove an explicit inventory id for FILE (which may be a regular file, symbolic link, or directory). bye bestie πŸ’…

tla move-id

move an explicit inventory id

Usage:

Usage: tla move-id [options] from to

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.

Move an explicit inventory id for FILE (which may be a regular file or symbolic link but which must not be a directory). no directories allowed, sorry

tla touch

add an explicit inventory id, touching the file.

Usage:

Usage: tla touch [options] file ...

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -i, --id ID β€” Specify ID, instead of using auto-generated id.

Create an explicit inventory id for FILE (which may be a regular file, symbolic link, or directory). This command also sets the modification and access times of the file, creating it if necessary. touch grass? no, touch file

tla rm

remove a file (or dir, or symlink) and its explicit inventory tag

Usage:

Usage: tla rm [options] file...

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.

This command is suitable as a replacement for rm(1) within any tla tree for any remove operation, regardless of id tagging method. careful, bestie, it deletes

tla mv

move a file (or dir, or symlink) and its explicit inventory tag

Usage:

Usage: tla mv [options] from to   OR   from1 from2 ... dir

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.

This command is suitable as a replacement for mv(1) within any tla tree for any move operation, regardless of id tagging method.

tla explicit-default

print or modify default ids

Usage:

Usage: tla explicit-default [options] [TAG-PREFIX]

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -D, --dir DIR β€” cd to DIR first
  • -d, --delete β€” remove the default
  • -s, --strong β€” use the strong default (default)
  • -w, --weak β€” use the weak default
  • --dont-care β€” use the dont-care default

For files in this directory, use:

ID-PREFIX__BASENAME

as the default explicit id for all files in this directory that do not have an explicit explicit id.

With no arguments, print the previously set ID-PREFIX.

By default, this command sets, prints or deletes a "strong default" -- a default explicit id which overrides implicit ids.

With --weak, set (or print) a weak default id which is overridden by explicit ids.

The --dont-care option sets (or with -d, clears) a flag for that directory that causes unidged files not to be reported as such in "tla tree-lint" reports. dont-care vibes

tla default-id

(alias for explicit-default) β€” same thing, different name.

Usage:

Usage: tla default-id [options] [TAG-PREFIX]

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -D, --dir DIR β€” cd to DIR first
  • -d, --delete β€” remove the default
  • -s, --strong β€” use the strong default (default)
  • -w, --weak β€” use the weak default
  • --dont-care β€” use the dont-care default

For files in this directory, use:

ID-PREFIX__BASENAME

as the default explicit id for all files in this directory that do not have an explicit explicit id.

With no arguments, print the previously set ID-PREFIX.

By default, this command sets, prints or deletes a "strong default" -- a default explicit id which overrides implicit ids.

With --weak, set (or print) a weak default id which is overridden by explicit ids.

The --dont-care option sets (or with -d, clears) a flag for that directory that causes unidged files not to be reported as such in "tla tree-lint" reports. dont-care vibes

tla id-tagging-defaults

print the default =tagging-method contents

Usage:

Usage: tla id-tagging-defaults [options]

Options:

  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.

Print the boilerplate contents that are used to initialize new =tagging-method files. boilerplate but make it cute

🌈 PATCH SET COMMANDS 🌈


πŸ’– tla changeset

bestie, this one computes a whole-tree changeset. iconic behavior.

Usage:

tla changeset [options] ORIG MOD DEST [files]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • --file-list FILES β€” record only diffs of selected files
  • --unescaped β€” show filenames in unescaped form

Create the output directory DESTINATION (it must not already exist). no cap, it has to be brand new. ✨

Compare source trees ORIGINAL and MODIFIED. Create a changeset tree in DESTINATION. it's giving "here's everything that changed" πŸ¦‹

See also tla apply-changeset -H.


πŸŽ€ tla mkpatch

(alias for changeset)

Usage:

tla mkpatch [options] ORIG MOD DEST [files]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • --file-list FILES β€” record only diffs of selected files
  • --unescaped β€” show filenames in unescaped form

Create the output directory DESTINATION (it must not already exist). lowkey important, it cannot exist already πŸ’…

Compare source trees ORIGINAL and MODIFIED. Create a changeset tree in DESTINATION.

See also tla apply-changeset -H.


πŸ¦‹ tla apply-changeset

apply a whole-tree changeset. the moment we've all been waiting for 🫢

Usage:

tla apply-changeset [options] CHANGESET [TARGET]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -N, --forward β€” pass the --forward option to patch
  • -r, --reverse β€” Apply the changeset in reverse
  • --unescaped β€” show filenames in unescaped form

Apply the changeset CHANGESET to the source tree TARGET (default .).

See also tla changeset -H.


🌸 tla dopatch

(alias for apply-changeset)

Usage:

tla dopatch [options] CHANGESET [TARGET]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -N, --forward β€” pass the --forward option to patch
  • -r, --reverse β€” Apply the changeset in reverse
  • --unescaped β€” show filenames in unescaped form

Apply the changeset CHANGESET to the source tree TARGET (default .).

See also tla changeset -H.


⭐ tla show-changeset

generate a report from a changeset. it's giving receipts, but make it readable πŸ“

Usage:

tla show-changeset [options] [dir]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • --diffs β€” include diff output
  • --unescaped β€” show filenames in unescaped form

Produce a human-readable summary of a changeset.


πŸ‘‘ ARCHIVE TRANSACTION COMMANDS πŸ‘‘


πŸ’œ tla make-archive

create a new archive directory. literally building the whole empire from scratch πŸ’…

Usage:

tla make-archive [options] [name] location
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -m, --mirror MASTER β€” create mirror of specified archive
  • -M, --mirror-from MASTER-SOURCE β€” create pull-based mirror of specified archive
  • -l, --listing β€” Keep .listing files up-to-date in this archive.
  • -t, --tla β€” Create a tla format archive.
  • -b, --baz β€” Create a baz format archive (the default).
  • -s, --signed β€” GPG sign the contents of this archive.

NAME is the global name for the archive. bestie it has RULES: it must be an email address with a fully qualified domain name, optionally followed by -- and a string of letters, digits, periods and dashes. no skipping steps fr fr πŸŽ€

With --mirror, label the new archive as a mirror of MASTER. Ordinary commits can not be made to a mirror archive, however the command tla archive-mirror can write to a mirror. so like... only that one special command gets the keys to the kingdom πŸ”‘

Two special forms of this command are available:

tla make-archive --mirror MASTER LOCATION

is equivalent to:

tla make-archive --mirror MASTER MASTER-MIRROR LOCATION

and thus tla archive-mirror MASTER will push changes from MASTER to the newly created mirror.

tla make-archive --mirror-from MASTER-SOURCE LOCATION

is equivalent to:

tla make-archive --mirror MASTER-SOURCE MASTER LOCATION

and thus tla archive-mirror MASTER will pull changes from MASTER-SOURCE to the newly created mirror.

The first of these two special forms is especially handy when creating a remote mirror in which to publish a local repository.

The second special form is handy when creating a local mirror of a remote archive, locally bound to the remote archive's name.

The --tla option creates a tla format archive, the default is to create a Bazaar archive. 🌸


🧚 tla archive-setup

create new categories, branches and versions. the full glow-up pipeline ✨

Usage:

tla archive-setup [options] [version ...]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -f, --file FILE β€” read the list of desired versions from FILE
  • -b, --branches β€” make base-0 tags
  • -c, --cache β€” archive cache when creating base-0 tags

Given a list of categories, branches, and versions, ensure that these exist in the appropriate archive. it's giving "manifesting but it actually works" πŸ’«

For example, starting with an empty archive,:

% tla archive-setup  proja--devo--1.0 projb

creates a category, branch, and version for project A, and a category for project B.

When the --file option is used, the list of items to create is read from a file (use - to indicate standard input).

With the --file option, the option --branches may be provided. In this case, the input should have two items per line: a target version (to create), and a source version to build a tag from. For example, given an input file containg:

proja--devo--1.0  his@foo.com/proja--devo--1.0

with --branches, archive-setup creates a proja version in your default archive, and adds a base-0 revision to that project which is a tag of the latest revision in his@foo.com's archive. (This can make it quite easy to set-up a new archive which contains branches from existing archives, for example.) so basically you can steal... I mean borrow... a whole branch setup 😭 iconic

If --branches is used, the --cache option may also be used. It causes each new base-0 revision to be archive-cached (see tla cacherev -H).


πŸŽ€ tla make-category

create a new archive category. tiny step, big vibes πŸ¦‹

Usage:

tla make-category [options] category
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive

Create CATEGORY as a category in the indicated archive. The category must not already exist. sorry bestie, no duplicates πŸ’…


🌈 tla make-branch

create a new archive branch. branching out, main character energy fr 🌿

Usage:

tla make-branch [options] branch
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive

Create BRANCH as a branch in the indicated archive.

The category containing the branch must already exist. so like, category first, branch second, no cutting the line πŸŽ€


⭐ tla make-version

create a new archive version. the final piece of the setup trio ✨

Usage:

tla make-version [options] version
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive

Create VERSION as a version in the indicated archive. The branch for this version must not already exist. yep, still no duplicates πŸ™ˆ


πŸ”₯ tla import

archive a full-source base-0 revision. this is THE origin story, the first commit ever 🫢

Usage:

tla import [options] [[archive]/version]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive.
  • -d, --dir DIR β€” Change to DIR first.
  • -l, --log FILE β€” Commit with log file FILE.
  • -s, --summary TEXT β€” log with summary TEXT plus log-for-merge output
  • -L, --log-message TEXT β€” log with TEXT
  • -S, --setup β€” Use archive-setup if necessary; implied by default.
  • --no-setup β€” Do not use archive-setup even if necessary.
  • --unescaped β€” show filenames in unescaped form

Archive a from-scratch base revision of the project tree containing DIR (or the current directory). Use this command to create the first revision of a new project. it's giving "hello world but make it official" 🌍

If --log-message is specified without --summary, then TEXT is used both as the summary and the first line of the log body. two jobs, one flag πŸ’…


πŸ’– tla commit

archive a changeset-based revision. the everyday slay πŸ’–

Usage:

tla commit [options] [[archive]/version] [-- file ...]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first
  • -l, --log FILE β€” commit with log file FILE
  • -s, --summary TEXT β€” log with summary TEXT plus log-for-merge output
  • -L, --log-message TEXT β€” log with TEXT plus log-for-merge output
  • --strict β€” strict tree-lint
  • --seal β€” create a version-0 revision
  • --fix β€” create a versionfix revision
  • --out-of-date-ok β€” commit even if out of date
  • --file-list FILE β€” commit only changes to files listed in FILE
  • --write-revision REVISION_FILE_SPEC β€” write the new tree id to REVISION_FILE_SPEC before committing
  • --unescaped β€” show filenames in unescaped form

Archive a revision of the project tree containing DIR (or the current directory).

If there are any automated ChangeLog files, update them before computing the patch set. yes bestie, it tidies up before it commits, we love a self-maintaining queen πŸ‘‘

If --log-message is specified without --summary, then TEXT is used both as the summary and the first line of the log body. bestie that's just how it works πŸ’…


tla get

okay so this one constructs a project tree for a revision ✨

Usage: tla get [options] revision [dir]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip (the deluxe version πŸŽ€).
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄ πŸ‘‘
  • --cache DIR β€” cache root for trees with pristines
  • --no-pristine β€” donΒ΄t save a pristine copy
  • --link β€” hardlink files to revision library instead of copying
  • --library β€” ensure the revision is in a revision library
  • --sparse β€” add library entries sparsely (--link, --library)
  • --non-sparse β€” add library entries densely (--link, --library)
  • -s, --silent β€” no output 🀫
  • --no-greedy-add β€” do not allow greedy libraries to add revisions
  • --unescaped β€” show filenames in unescaped form

Extract REVISION from an archive, creating the new project tree DIR. If DIR is not specified, store the working copy in a subdirectory of the current directory, giving it the name of the revision.

🚨 CAUTION: when using the links option be sure to use copy-on-write on your editor or the revision library will be corrupted. Either way, the project tree must not already exist. like, it literally cannot already exist, no exceptions πŸ™ˆ

tla get-changeset

retrieve a changeset from an archive πŸ¦‹

Usage: tla get-changeset [options] revision [dir]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄

Retrieve the changeset for REVISION and store it in the directory DIR (or a directory named REVISION.patches). DIR must not already exist. that's the vibe check and it must pass πŸ’–


tla lock-revision

lock (or unlock) an archive revision πŸ”’

Usage: tla lock-revision [options] revision
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -u, --unlock β€” release a lock owned by you
  • -b, --break β€” break any existing lock

Acquire the lock needed to create REVISION.

Revision must be the next patch-level in sequence, however, if no patch level is specified, the lock is taken unconditionally. If no version is specified, the latest version is locked. periodt πŸ’…


tla archive-mirror

update an archive mirror πŸͺž

Usage: tla archive-mirror [options] [from [to] [limit]]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • --no-cached β€” donΒ΄t copy cached revisions
  • -s, --summary β€” print the summary of each patch
  • --cached-tags β€” copy only cachedrevs for tags to other archives

If no arguments are given, update your my-default-archiveΒ΄-MIRROR archive with the contents of my-default-archiveΒ΄.

If a [FROM] archive is given, update the [FROM]-MIRROR archive with the contents of the [FROM] archive 🌸

If both [FROM] and [TO] archives are specified, update [TO] with the contents of [FROM]

If LIMIT is provided, it should be a category, branch, version, or revision name. Only the indicated part of FROM will be copied to TO. If LIMIT is a revision, then cached revisions will be copied and deleted to TO. no cap.

(see "tla make-archive -H".). iykyk πŸ‘‘


✨ ARCHIVE COMMANDS ✨

tla abrowse

print an outline describing archive contents πŸ—ΊοΈ

Usage: tla abrowse [options] [limit]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -r, --reverse β€” sort revisions from newest to oldest
  • -s, --summary β€” print a summary of each patch
  • -c, --creator β€” print the creator of each patch
  • -D, --date β€” print the date of each patch
  • -k, --kind β€” show each revision kind (import, changeset or id)
  • -C, --cacherevs β€” show cached revisions
  • -f, --full β€” print full patch level names
  • --desc β€” implies -s -c -D -k -C
  • --local-merges β€” list merges from the same archive
  • --foreign-merges β€” list merges from other archives
  • --merges β€” list all merges
  • --categories β€” show category names only
  • --branches β€” show branch names only
  • --versions β€” show version names only
  • --omit-empty β€” omit empty or unchanged-since items
  • --since SNAP-FILE β€” show revisions after those listed in SNAP-FILE
  • --since-limits β€” limit output to items in the since file
  • --snap SNAP-FILE β€” record the highest revisions shown
  • --force β€” overwrite an existing snap-file

Describe the contents of an archive in outline format. πŸ¦‹

With LIMIT, look only that part of the archive.

LIMIT may be a fully qualified name and may be an archive name.


tla rbrowse

print an outline describing an archive´s contents 🌈

Usage: tla rbrowse [options] [[ARCHIVE_NAME/]LIMIT_REGEX]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string
  • --all β€” search all archives
  • --since SNAP-FILE β€” only show differences since SNAP-FILE
  • --snap SNAP-FILE β€” snap an archive
  • -f, --snap-force β€” force snap writing
  • -r β€” reverse patch logs
  • -s β€” print the summary of matching patches
  • -c β€” print the creator of matching patches
  • -D β€” print the date of matching patches
  • --patch-regex REGEX β€” only show revisions that contain [REGEX] (implies -s)
  • -A, --archive β€” use [archive] instead of default
  • --show-sealed β€” do not hide sealed branches

an outline of an archive will be printed, showing the categories, branches and revisions of the specified archive if no archive is given then my-default-archive is used.

If [LIMIT REGEX] is specified, revisions will only be shown if the category, branch or version matches [LIMIT REGEX]. If --patch-regex [REGEX] is given, then only patchlogs matching [REGEX] will be given πŸ’–


tla categories

list the categories in an archive 🏷️

Usage: tla categories [options] [archive]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄

Print a list of the categories present in an archive.


tla branches

list the branches in an archive category 🌿

Usage: tla branches [options] [category]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄

Print a list of the branches within CATEGORY


tla versions

list the versions in an archive branch πŸ“¦

Usage: tla versions [options] [branch]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -r, --reverse β€” sort from newest to oldest

Print a list of versions within an archive branch.

The list is ordinarily sorted from oldest to newest, but the order can be changed with -r (--reverse). πŸ’«


tla revisions

list the revisions in an archive version πŸŽ€

Usage: tla revisions [options] [version]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -r, --reverse β€” sort from newest to oldest
  • -f, --full β€” list fully qualified names
  • -s, --summary β€” print a summary of each patch
  • -c, --creator β€” print the creator of each patch
  • -D, --date β€” print the date of each patch

Print a list of revisions within an archive version.

The list is ordinarily sorted from oldest to newest, but the order can be changed with -r (--reverse).

With optional arguments specifying patches, list only those patches, if they exist. If a listed patch does not exist, exit with status 1. The -r (--reverse) flag has no effect with optional arguments. πŸ’…


tla ancestry

display the ancestory of a revision 🌳

Usage: tla ancestry [options] [revision]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first
  • -m, --merges β€” show merges into this development line
  • -r, --reverse β€” list oldest to newest
  • -s, --summary β€” print a summary of each patch
  • -c, --creator β€” print the creator of each patch
  • -D, --date β€” print the date of each patch

Print the ancestry of a revision.


tla ancestry-graph

display the ancestory of a revision 🌲

Usage: tla ancestry-graph [options] [revision]
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first
  • -m, --merges β€” show merges into this development line
  • -r, --reverse β€” list oldest to newest
  • -i, --immediate β€” show only the immediate ancestor
  • -p, --previous β€” show the (namespace) previous revision

Print a list describing the ancestry of a revision.


tla cat-archive-log

print the contents of an archived log entry πŸ“œ

Usage: tla cat-archive-log [options] revision
  • -h, --help β€” display a help message and exit.
  • -H β€” display a verbose help message and exit.
  • -V, --version β€” display a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • --headers β€” show only log headers

like, just the headers, bestie πŸŽ€

from its archive. boom β€” that's the whole vibe, bestie: the log message for the revision you asked for, pulled straight out of the archive and printed for you. πŸ’–


πŸ—‚οΈ tla cacherev β€” cache a full source tree in an archive

Usage:

tla cacherev [options] [revision]

Options, bestie, all of them:

  • -h, --help β€” show a help message and dip. ✨
  • -H β€” show a verbose help message and dip. the long one. the yapper. 🫢
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override `my-default-archiveΒ΄. like, do it for a different archive than your usual one. πŸ‘‘
  • --cache DIR β€” cache root for trees with pristines.

So what does it do, you ask? It caches a full-text copy of the indicated revision in the archive. iconic And the payoff? It can speed up subsequent calls to "tla get" for that revision and the ones after it. literally free real estate. πŸ”₯

And if you don't specify a revision but you're chillin' inside a project tree, it caches the latest revision in the default version of that tree. it just knows. πŸ’…


πŸ“œ tla cachedrevs β€” list cached revisions in an archive

Usage:

tla cachedrevs [options] [version]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄.

It reports which revisions of VERSION have been cached as whole trees in the archive. like a little roll call of everything that's already been cached. πŸŽ€

See also "tla cacherev -H". πŸ¦‹


πŸ—‘οΈ tla uncacherev β€” remove a cached full source tree from an archive

Usage:

tla uncacherev [options] revision [dir]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄.

It removes the cached form of REVISION from its archive. bye bye cache. πŸ‘‹

If REVISION is not specified, but the command is run from within a project tree, it uncaches the latest revision in the default version of that tree.

Also see "tla cacherev -H".


πŸ” tla archive-meta-info β€” report meta-info from an archive

Usage:

tla archive-meta-info [options] item-name
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄.

It prints the contents of a meta-info file from an archive. For example:

% tla archive-meta-info name

prints the official name of your default archive. cute lil identity check for your archive. πŸ’œ


πŸ“Έ tla archive-snapshot β€” update an archive snapshot

Usage:

tla archive-snapshot [options] dir [limit]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄.

It updates the directory DIR with a "snapshot" of an archive β€” or, like, the part of the archive that LIMIT points at.

For each archive snapshotted, DIR will contain a file and a subdirectory, where $ARCH is the name of the archive:

./$ARCH.added
./$ARCH/

Similarly, for each category snapshotted, DIR will contain:

./$ARCH/$CAT.added
./$ARCH/$CAT/

and so on, recursively, for branches and versions. it goes all the way down. πŸŒ€

For each revision, the snapshot contains:

./$ARCH/$CAT/$BRANCH/$VERSION/$REVISION.added

and that file contains a copy of the patch log entry for that revision.

Snapshots can be used in combination with other tools (make is suggested) to trigger one-time events in response to new additions to an archive. automation girlies, this one's for you. ⭐


🏷️ tla archive-version β€” list the archive-version in an archive

Usage:

tla archive-version [options]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄.

It prints the archive format identifier string of an arch archive. like the archive's little birth certificate. πŸ“„βœ¨


πŸ”§ tla archive-fixup β€” fix ancillary files in an archive

Usage:

tla archive-fixup [options]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄.

This one is a kind of "catch-all" command β€” it's here to fix the non-standard, non-transactional state of an archive. 🩹

rn its sole function is repairing .listing files in archives that use them. so if your archive is feeling messy in exactly that way, this is the glow-up appointment. πŸ’…

🌸 PATCH LOG COMMANDS 🌸

okay bestie this is the part where tla keeps a little diary for ur tree and honestly it's giving ✨annotated history✨


tla make-log

<h3>initialize a new log file entry πŸŽ€</h3>

Usage:

tla make-log [options] [version]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first

Create (if needed) a log entry file in the root of the project tree containing DIR, for the indicated VERSION. πŸ’–

The name of the new log file is printed to standard output. πŸ¦‹


tla log-versions

<h3>list patch log versions in a project tree 🌈</h3>

Usage:

tla log-versions [options]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -d, --dir DIR β€” cd to DIR first
  • -a, --archive ARCHIVE β€” list only logs for ARCHIVE
  • -c, --category CATEGORY β€” list only logs for CATEGORY
  • -b, --branch BRANCH β€” list only logs for BRANCH
  • -v, --vsn VERSION β€” list only logs for VERSION
  • -r, --reverse β€” reverse the sort order

Print the list of versions for which there are patch logs in the project tree containing DIR (or the current directory). πŸ“‹


tla add-log-version

<h3>add a patch log version to a project tree ✨</h3>

Usage:

tla add-log-version [options] [archive]/version
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first

Add an initially empty list of patch log for VERSION to the project tree containing DIR (or the current directory). 🫢

A project tree patch log is a pre-requisite for checking the directory in on that version, or updating with patches from that version. (yes bestie, prerequisite. u literally cannot do the thing without it.)

Note that versions recorded for a project tree are recorded by fully qualified version names: an archive name plus the name of a version within that archive. πŸ’…


tla remove-log-version

<h3>remove a version's patch log from a project tree πŸ’€</h3>

Usage:

tla remove-log-version [options] [archive]/version
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first

Remove the patch log for VERSION from the project tree containing DIR (or the current directory).

Use this command with caution β€” it erases revision history from the project tree! 🚨 bestie. it is LITERALLY eating ur history. be so fr before u type this one.

tla logs

<h3>list patch logs for a version in a project tree 🌸</h3>

Usage:

tla logs [options] [[archive]/version ...]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first
  • -r, --reverse β€” sort from newest to oldest
  • -s, --summary β€” print the summary of each patch
  • -c, --creator β€” print the creator of each patch
  • -D, --date β€” print the date of each patch
  • --local-merges β€” list merges from the same archive
  • --foreign-merges β€” list merges from other archives
  • --merges β€” list all merges
  • -f, --full β€” print full patch level names

Print the list of patches applied to a project tree DIR (or the current directory) from VERSION. πŸ‘‘


tla cat-log

<h3>print the contents of a project tree log entry πŸŽ€</h3>

Usage:

tla cat-log [options] revision-spec
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first

Retrieve and print the patch log for the indicated revision from a project tree. it's literally cat but for the diary entry bestie πŸ’–


tla changelog

<h3>generate a ChangeLog from a patch log ✨</h3>

Usage:

tla changelog [options] [[archive]/version]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first
  • --no-files β€” exclude file lists from ChangeLog
  • --untagged β€” don't implicitly tag the output file
  • --new-entry PATCH,FILE β€” make FILE the first (top) entry for patch level PATCH

Generate a ChangeLog for VERSION from the patch log for DIR. 🌈


tla log-for-merge

<h3>generate a log entry body for a merge πŸ¦‹</h3>

Usage:

tla log-for-merge [options] [[archive]/version]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first
  • -r, --reverse β€” sort from newest to oldest

Generate a log entry body describing a merge into VERSION. πŸ’Œ


tla merges

<h3>report where two branches have been merged πŸ”₯</h3>

Usage:

tla merges [options] INTO [FROM]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first
  • -r, --reverse β€” sort from newest to oldest
  • -f, --full β€” print full patch level names

Print a list of pairs of patch level names:

        %s   %s   INTO-RVN  FROM-RVN

where each pair indicates that at patch level INTO-RVN of INTO, the patch log entry FROM-RVN was added.

FROM may be a branch name, version name, or revision name. If a branch or version name, all merges from that branch or version are reported. If a revision name, only the merge points for that specific revision are reported.

INTO may be a version name or revision name. If a version name, all merge points within that version are printed. If a revision name, all merge points at that revision or earlier are printed.

Output is sorted using patch-level ordering of the first column. πŸ“Š

Included patches are listed by full name unless FROM is a revision name. If FROM is a revision, --full causes its full name to be printed.


tla new-merges

<h3>list tree patches new to a version ⭐</h3>

Usage:

tla new-merges [options] [[archive]/version]
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -d, --dir DIR β€” cd to DIR first
  • -r, --reverse β€” sort from newest to oldest

List all patch log entries in the tree containing DIR that have not already been merged with VERSION. (the "who even are u" list ✨)


🧚 MULTI-PROJECT CONFIGURATION COMMANDS 🧚


tla build-config

<h3>instantiate a multi-project config πŸ—οΈ</h3>

Usage:

tla build-config [options] config
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -d, --dir DIR β€” cd to DIR first
  • --no-pristines β€” don't create pristine copies
  • --link β€” hardlink files to revision library instead of copying
  • --library β€” ensure revisions are in the revision library
  • --sparse β€” add library entries sparsely (--link, --library)
  • -r, --release-id β€” overwrite ./=RELEASE-ID for this config

Build the named configuration. See also tla cat-config -H. πŸ‘‘


tla cat-config

<h3>output information about a multi-project config πŸŽ€</h3>

Usage:

tla cat-config [options] config
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -d, --dir DIR β€” cd to DIR first
  • -o, --output CFG β€” write the output as config CFG
  • -f, --force β€” overwrite an exiting config (with --output)
  • -s, --snap β€” Show current patch levels of subtree packages.
  • --unescaped β€” show filenames in unescaped form

Parse and print the indicate config file from a project tree πŸ“–

A config file contains blank lines, comment lines starting with #, and config specification lines. The config file called $NAME is stored in a project tree as ./configs/$NAME or as ./$NAME.

A config specification line contains a relative path within a project tree, and a specification of the project or revision to store in that location.

For example, the line:

   ./src/arch   lord@emf.net--2003b/arch--devo--1.0

means that, when building the configuration, the latest revision of arch--devo--1.0 should be created within the tree as ./src/arch.

The project specification can be a branch name, version name or the name of a specific revision.

The option --snap says to examine the project tree to find out which revisions of configured project are printed, and generate a new config specification that references those specific revisions. For example, the output for the line shown above might be:

   ./src/arch  lord@emf.net--2003b/arch--devo--1.0--patch-21

The option --output causes the output from this command to be recorded as a new configuration file (or to replace an existing file if --force is provided). πŸ’Ύ


πŸ’… COMMANDS FOR BRANCHING AND MERGING πŸ’…


tla tag

<h3>create a continuation revision πŸ¦‹</h3>

Usage:

tla tag [options] SOURCE-REVISION TAG-VERSION
  • -h, --help β€” Display a help message and exit.
  • -H β€” Display a verbose help message and exit.
  • -V, --version β€” Display a release identifier string and exit.
  • -A, --archive β€” Override my-default-archive
  • -l, --log FILE β€” commit with log file FILE
  • --no-cacherev β€” Do not cacherev tag even if different archive
  • --seal β€” create a version-0 revision
  • --fix β€” create a versionfix revision
  • -S, --setup β€” Use archive-setup if necessary; implied by default.
  • --no-setup β€” Do not use archive-setup even if necessary.

Create the continuation revision TAG-VERSION (branch point or tag) which is equivalent to SOURCE-REVISION (plus a log entry). ✨ main character energy fr fr

If no log entry is provided, a trivial log entry will be created. πŸ’–


🌿 tla branch β€” create a continuation revision

tla branch [options] [SOURCE] BRANCH
  • -h, --help β€” show a help message and dip. ✨
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override my-default-archive πŸ‘‘
  • -l, --log FILE β€” commit with log file FILE
  • --no-cacherev β€” do not cacherev tag, even if the archive is different
  • --seal β€” create a version-0 revision πŸ”₯
  • --fix β€” create a versionfix revision

So basically: create the continuation revision BRANCH (a branch point or a tag, bestie) which is equivalent to SOURCE β€” plus a log entry, obviously. If no log entry is provided, a trivial one gets created for you, no stress. 🫢

If SOURCE isn't specified, the current project tree revision is used, and the project tree gets switched to BRANCH. The way that just happens for you? iconic.


πŸ”„ tla switch β€” change the working trees version

tla switch [options] [package]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override my-default-archive.
  • -d, --dir DIR β€” change to DIR first.
  • -q, --quiet β€” suppress progress information 🀫

Changes the working tree's version to that of package, and makes it equivalent to revision. It preserves uncommitted changes β€” yes bestie, your messy WIP survives, we love that for you. πŸ’…

Note: tla automatically switches to the latest revision in the supplied version. Not the one you picked. The latest. iykyk. πŸ‘‘

⬆️ tla update β€” update a project tree

tla update [options] [version/revision]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override my-default-archive
  • -d, --dir DIR β€” update project tree in DIR (default .)
  • -N, --forward β€” pass the --forward option to patch
  • --dest DEST β€” instead of modifying the project tree in-place, make a copy of it to DEST and apply the result to that
  • --unescaped β€” show filenames in unescaped form

Updates a project tree by grabbing the latest revision of VERSION (or the default version of the project tree, if you didn't say) and then applying a patch set of the differences between the project tree and the highest revision with which it is up-to-date. So it's a glow-up based on how far behind you actually are. 🌸

If the merge involves conflicts, a warning message is printed, and the new project tree will contain .rej files. Yeah. 😭 .rej files. We've all been there.


🎬 tla replay β€” apply revision changesets to a project tree

tla replay [options] [version/revision...]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override my-default-archive
  • --list FILE β€” read a list of patches to apply
  • --new β€” replay only new patches ✨
  • --reverse β€” reverse the named patch
  • -N, --forward β€” pass the --forward option to patch
  • -d, --dir DIR β€” operate on project tree in DIR (default .)
  • --dest DEST β€” instead of modifying the project tree in-place, make a copy of it to DEST and apply the result to that
  • --skip-present β€” skip patches that contain 1 or more patch logs already in this tree
  • --unescaped β€” show filenames in unescaped form

The result is formed by applying patches in the latest revision of VERSION (or the default version of the project tree), stopping after the first patch that causes conflicts. If multiple VERSIONs are specified, they are applied in turn. πŸ¦‹

If one or more specific REVISIONs (patch-levels included, bestie) is specified instead, then only those patch sets β€” and no others β€” will be applied. periodt.

With the --list option, read a list of patches to apply from FILE (- for standard input). Complete revision names should be listed, one per line. replay will stop at the first patch in the list that causes a merge conflict, leaving behind files with names of the form:

,,replay.conflicts-in --  the name of the patch that caused conflicts

,,replay.remaining    --  the list of patches not yet applied

⭐ tla star-merge β€” merge mutually merged branches

tla star-merge [options] [FROM]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override tree archive
  • -c, --changes OUTPUT β€” generate but don't apply the changeset.
  • -r, --reference VERSION β€” set reference version (default: project tree version)
  • -N, --forward β€” pass the --forward option to patch
  • -t, --three-way β€” perform a 3-way (diff3-style) merge. πŸ”€
  • -d, --dir DIR β€” operate on project tree in DIR (default .)
  • --unescaped β€” show filenames in unescaped form

Merges changes from FROM into the project tree, considering common ancestry from the project tree reference version, REFERENCE (which defaults to the tree version of the project tree). If FROM isn't given, it defaults to the tree revision. πŸ’œ

The whole point of this command is to merge changes between development lines which may have merged in both directions. It uses merge history to try and minimize the spurious conflicts that can arise from "mutual merging". It's giving conflict therapy, honestly. 🧚

FROM indicates a revision (it may be specified as a version name, indicating the latest revision in that version).

TREE is the project tree into which the merge will occur.

Star-merge works by computing the most recent ANCESTOR revision of REFERENCE and FROM, and then applying the changeset:

delta (ANCESTOR, FROM)

to TREE.

The "most recent ancestor" is defined as follows:

MAYBE_ANCESTOR_1 is defined as the highest patch level of FROM in REFERENCE for which both TREE and FROM have a patch log. In other words, it is the latest REFERENCE revision of FROM's version already merged into TREE.

MAYBE_ANCESTOR_2 is the highest patch level in REFERENCE for which both FROM and REFERENCE have a patch log. In other words, it is the latest revision of REFERENCE already merged into FROM.

MAYBE_ANCESTOR_2, if it is not "nil", was merged into FROM at some revision of FROM's version, which we can call LAST_MERGE_INTO_FROM.

If both MAYBE_ANCESTOR_1 and MAYBE_ANCESTOR_2 are nil, star-merge can do nothing. πŸ’€

If just one of MAYBE_ANCESTOR_1 or MAYBE_ANCESTOR_2 is not nil, then that non-nil value is ANCESTOR.

If both MAYBE_ANCESTOR_1 and MAYBE_ANCESTOR_2 are not nil, then LAST_MERGE_INTO_FROM and MAYBE_ANCESTOR_1 are compared (both are revisions in FROM's version). If MAYBE_ANCESTOR_1 is the later revision, then MAYBE_ANCESTOR_1 is ANCESTOR, otherwise, MAYBE_ANCESTOR_2 is ANCESTOR.


🧩 tla apply-delta β€” compute a changeset between any two trees or revisions and apply it to a project tree

tla apply-delta [options] FROM(REVISION|DIR) TO(REVISION|DIR)
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override my-default-archive
  • -N, --forward β€” pass the --forward option to patch
  • --cache DIR β€” specify a cache root for pristine copies
  • -d, --dir DIR β€” operate on project tree in DIR (default .)
  • --dest DEST β€” instead of modifying the project tree in-place, make a copy of it to DEST and apply the result to that
  • --unescaped β€” show filenames in unescaped form

A delta between A and B (both of which may be either a full revision or a project tree) is computed, and then applied to the project tree. ✨

Exit Status Codes:

    0  No conflict during patch
    1  Conflicts occurred during patch
    3  Internal Error

πŸ•΅οΈ tla missing β€” print patches missing from a project tree

tla missing [options] [version]
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override my-default-archive
  • -q, --quiet β€” produce no ordinary output
  • -x, --exit-status β€” exit non-0 if patches are missing
  • -d, --dir DIR β€” cd to DIR first
  • -r, --reverse β€” sort from newest to oldest
  • -s, --summary β€” display a summary of each missing patch
  • -c, --creator β€” display the creator of each missing patch
  • -D, --date β€” display the date of each missing patch
  • -f, --full β€” print full revision names
  • --merges β€” print a merge list for each missing patch
  • --skip-present β€” skip patches that contain 1 or more patch logs already in this tree

Prints a list of patches missing in the project tree containing DIR (or the current directory, if you didn't say) for VERSION (or the default version of the project tree). FOMO check, basically. 😭

The flag --merges means, for each patch, to print the list of patches included in the patch in two columns. For example:

        PATCH-A        PATCH-A
        PATCH-A        PATCH-B
        PATCH-A        PATCH-C

means that PATCH-A includes the changes from PATCH-B and PATCH-C. (Every patch includes at least itself. self-love, we stan. πŸ’…)

With -x, if there are missing patches, the command exits with status 1, otherwise with status 0.

With -q, produce no output.

WARNING: At this time, some error conditions also exit with error status 1, however, in situations where the caller is not concerned with errors, the exit status is still useful. So like... read the room, bestie. ⚠️

πŸͺ’ tla join-branch β€” add a version as an ancestor of a project tree

tla join-branch [options] version
  • -h, --help β€” show a help message and dip.
  • -H β€” show a verbose help message and dip.
  • -V, --version β€” print a release identifier string and dip.
  • -A, --archive β€” override my-default-archive
  • -d, --dir DIR β€” operate on project tree in DIR (default .)
  • --dest DEST β€” instead of modifying the project tree in-place, make a copy of it to DEST and apply the result to that
  • --unescaped β€” show filenames in unescaped form

VERSION--base-0 must be a continuation (e.g. tag). The command replays the changeset for VERSION--base-0 in the project tree, which has the effect of adding the log for the branch β€” making the tag an ancestor of the resulting tree. Found family, but for revisions. 🌈


πŸ”— tla sync-tree β€” unify a project tree's patch-log with a given revision

tla sync-tree [options] revision
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” do the thing on the project tree in DIR (default is `.Β΄)
  • --dest DEST β€” instead of editing the project tree in place, make a copy of it over at DEST and apply the result to that πŸ‘―
  • --unescaped β€” show filenames in unescaped form

The new project tree gets built by grabbing the REVISION and adding all the patch-log entries from REVISION. And no, bestie, no actual merging happens β€” only the patch-log gets changed. That's it. That's the whole move. πŸ’…


tla delta

compute a changeset (or diff) between any two trees or revisions ✨ like literally any two

tla delta [options] (REVISION|TREE)-A (REVISION|TREE)-B [DESTDIR]
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄
  • --cache DIR β€” specify a cache root for pristine copies πŸ«™
  • -n, --no-changeset β€” do not generate a changeset
  • --diffs β€” print the changeset report with diffs (this one implies -n)
  • --unescaped β€” show filenames in unescaped form

Hand it (REVISION|TREE)-A and (REVISION|TREE)-B and tla will build a changeset that comprises the changes between REVISION-A and REVISION-B. Chef's kiss. πŸ‘‘

Example:

tla delta tla--devo--1.1--patch-6             tla--devo--1.1--patch-8
,,changes

So the way this works: it will pull patch-6 and patch-8 from tla--devo--1.1 and compute a changeset, which gets saved in a newly created ,,changes directory. And if you'd rather have a report instead? Just append the --diffs option. Easy. 🌈


LOCAL CACHE COMMANDS πŸŽ€

tla changes

report about local changes in a project tree πŸ” spill the tea about what you did

tla changes [options] [revision] [-- limit...]
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄.
  • -d, --dir DIR β€” change to DIR first.
  • -o, --output DIR β€” save the changeset in DIR (this one implies --keep).
  • -v, --verbose β€” verbose changeset report.
  • -q, --quiet β€” suppress progress information 🀫
  • --diffs β€” include diffs in the output.
  • -k, --keep β€” DonΒ΄t remove the output directory on termination.
  • --link β€” hardlink unchanged files to revision library
  • --unescaped β€” show filenames in unescaped form

It generates a patch report describing the differences between the project tree containing DIR (or the current directory, if you didn't say) and REVISION.

Okay so the default patch level for a given version is the latest level for which the project tree has a patch. And the default archive and version is whatever gets printed by tla tree-version. Periodt. πŸ’…

tla file-diff

show local changes to a file πŸ‘€ just the one file, we're being specific

tla file-diff [options] file [revision]
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -N, --new-file β€” treat a missing file as empty πŸ«₯

It prints the diffs between FILE and the corresponding file in a cached copy of REVISION.

Same deal as before: the default patch level for a given version is the latest level for which the project tree has a patch, and the default archive and version is as printed by tla tree-version. πŸ¦‹

tla file-find

find given version of file πŸ•΅οΈβ™€οΈ where is she

tla file-find [options] file [revision]
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -N, --new-file β€” print a missing file as `/dev/nullΒ΄
  • --unescaped β€” show filenames in unescaped form

It prints the location of the file corresponding to FILE in a cached copy of REVISION.

And yes, once again, bestie: the default patch level for a given version is the latest level for which the project tree has a patch, and the default archive and version is as printed by tla tree-version. πŸ”

tla pristines

list pristine trees in a project tree 🌳 a whole roster

tla pristines [options] [limit]
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -d, --dir DIR β€” cd to DIR first
  • -u, --unlocked β€” return only unlocked pristines πŸ”“
  • -l, --locked β€” return only locked pristines πŸ”’
  • -r, --reverse β€” reverse the sort order πŸ”„

It prints the list of pristine revisions cached in the project tree DIR (or the current directory, if you didn't say). Iconic, honestly. ⭐

tla lock-pristine

lock (or unlock) a pristine tree πŸ” she's protected now

tla lock-pristine [options] revision
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first
  • -u, --unlock β€” unlock, rather than lock πŸ”“

It locks the indicated pristine REVISION in the project tree containing DIR (or the current directory, if you didn't say). This prevents the revision from being automatically recycled. No cap β€” she's staying. πŸ’…

tla add-pristine

ensure that a project tree has a particular pristine revision 🧚 adding her to the collection

tla add-pristine [options] revision
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first

It extracts REVISION from an archive, creating a pristine copy. Then it stores that pristine copy in the current directory's project tree. πŸ“

tla find-pristine

find and print the path to a pristine revision πŸ—ΊοΈ the scavenger hunt command

tla find-pristine [options] revision
  • -h, --help β€” show a help message and bounce πŸ’–
  • -H β€” show a verbose help message and bounce
  • -V, --version β€” print a release identifier string and bounce
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -d, --dir DIR β€” cd to DIR first
  • -u, --unlocked β€” return only an unlocked pristine πŸ”“
  • -l, --locked β€” return only a locked pristine πŸ”’
  • -t, --tree-only β€” search this tree only, not siblings 🌲
  • -s, --silent β€” exit status only 🀐

It prints the location of a pristine copy of the indicated revision. Found her. πŸ’œ

πŸ¦‹ REVISION LIBRARY COMMANDS πŸ¦‹

okay bestie, this is the revision library zone, and it's lowkey the most powerful part of your whole setup β€” it's where tla keeps pristine copies of revisions so it never has to re-download the same thing twice. iconic behaviour honestly πŸ’…


tla my-revision-library

print or change your revision library path

Usage: tla my-revision-library [options] [dir]
  • -h, --help β€” show a help message and dip out.
  • -H β€” show a verbose help message and dip out.
  • -V, --version β€” print a release identifier string and dip out.
  • -e, --errname β€” specify the program name used for errors.
  • -d, --delete β€” unspecify your revision library.
  • -s, --silent β€” suppress those reassuring little messages.
  • --search β€” use the full search path.
  • --add β€” use the full add path.
  • --search-only β€” use the search-only path.
  • --add-only β€” use the add-only path.
  • --first β€” prepend to the path when setting (default is to append).

With no argument, and without -d, it prints the path to your revision library. ✨

With an argument, it records DIR as the path to your revision library in ~/.arch-params/=revision-library.

With the option -d (--delete) and no argument, it makes sure you do not have a revision library path set in ~/.arch-params.

If no revision library is set, the program exits with status 1, printing an error message unless the -s (--silent) option is given. so rude but okay 😭

tla library-config

configure parameters of a revision library

Usage: tla library-config [options] library-dir
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • --greedy β€” make the library greedy.
  • --non-greedy β€” make the library not greedy.
  • --sparse β€” make the library sparse.
  • --non-sparse β€” make the library not sparse.

Set/show various parameters for a revision library. that's it, that's the vibe πŸŽ€


tla library-find

find and print the location of a revision in the revision library

Usage: tla library-find [options] revision
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -e, --errname β€” specify the program name for errors.
  • -s, --silent β€” suppress reassuring messages.

Find REVISION in your revision library and print its path. If the revision isn't there, it prints an error message (unless --silent is specified) and exits with non-0 status. no cap, it will not sugarcoat it πŸ’€


tla library-add

add a revision to the revision library

Usage: tla library-add [options] revision
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -s, --sparse β€” donΒ΄t fill in gaps in the library.
  • --non-sparse β€” fill in gaps in the library.
  • -L, --library LIB β€” specify which library to add to.
  • --for-links PATH β€” require a lib on the same device as PATH.
  • --unescaped β€” show filenames in unescaped form.

Add REVISION to your revision library.

This command has no effect and exits with status 0 if the indicated revision is already in the library. so chill of it, honestly 🫢


tla library-remove

remove a revision from the revision library

Usage: tla library-remove [options] revision
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄

Remove REVISION from your revision library.

If the revision isn't present, it prints an error message and exits with non-0 status. 😭


tla library-archives

list the archives in your revision library

Usage: tla library-archives [options]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.

List all archives with records in the revision library. the full roster, bestie πŸ“‹


tla library-categories

list the categories in your revision library

Usage: tla library-categories [options] [archive]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄

List all categories within a given archive in the revision library.


tla library-branches

list the branches in a library category

Usage: tla library-branches [options] [category]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄

List all branches within CATEGORY in the revision library.


tla library-versions

list the versions in a library branch

Usage: tla library-versions [options] [branch]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -r, --reverse β€” sort from newest to oldest.

List all versions within a particular archive/branch with records in the revision library. newest first with -r, chef's kiss πŸ‘‘


tla library-revisions

list the revisions in a library version

Usage: tla library-revisions [options] [version]
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -r, --reverse β€” sort from newest to oldest.
  • -f, --full β€” list fully qualified names.
  • -s, --summary β€” print a summary of each patch.
  • -c, --creator β€” print the creator of each patch.
  • -D, --date β€” print the date of each patch.

List all revisions within a particular archive/version with records in the revision library.


tla library-log

output a log message from the revision library

Usage: tla library-log [options] revision
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -s, --silent β€” suppress reassuring messages.

Print the log message for REVISION from the library. the receipts, fr fr πŸ“œ


tla library-file

find a file in a revision library

Usage: tla library-file [options] file revision
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • --id β€” interpret FILE as an inventory id.
  • --this β€” interpret FILE as a file within a project tree.

Find FILE in REVISION in your revision library and print its path. If the revision or file isn't present, it prints an error message and exits with non-0 status. 😀


🌈 PUBLISHED REVISIONS COMMANDS 🌈

tla grab

grab a published revision

Usage: tla grab [options] location
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.

Grabs a published revision from LOCATION. just grab it bestie, it's yours now πŸ’…


🧚 MISCELLANEOUS SCRIPTING SUPPORT 🧚

scripting girlies, this section is for you ✨

tla parse-package-name

parse a package name

Usage: tla parse-package-name [options] name
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -A, --archive β€” override `my-default-archiveΒ΄
  • -a, --arch β€” print the archive name.
  • --non-arch β€” print the non-archive part of the name.
  • -c, --category β€” print the category name.
  • -b, --branch β€” print the branch name.
  • -p, --package β€” print the package name.
  • -v, --vsn β€” print the version id.
  • --package-version β€” print the category--branch--version
  • -l, --lvl β€” print the patch level.
  • --patch-level β€” synonym for --lvl.

Options -b, -B, -p, -v, and -l cancel each other. pick a lane bestie 🚫

For -b, -v, and -l, just the id string is printed without "--".

For -p, the output is "<basename>--<branch>".


tla valid-package-name

test a package name for validity

Usage: tla valid-package-name [options] name
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • -e, --errname β€” specify the program name for errors.
  • --archive β€” require an explicit archive.
  • --no-archive β€” prohibit an explicit archive.
  • -c, --category β€” require a category.
  • -p, --package β€” require category, permit branch.
  • -v, --vsn β€” require a version number.
  • -l, --patch-level β€” require a patch level.
  • --lvl β€” synonym for --patch-level.
  • -t, --tolerant β€” tolerate more specific names.

Exit with status 0 if PACKAGE is a valid package name, status 1 otherwise. simple as that πŸ’–

By default, it requires a basename or a basename plus branch label.

Options -v and -l cancel -b and vice versa.

Option -l implies -v.

If an error name is specified (-e or --errname), then invalid names cause an error message on stdout. Otherwise, the exit status is the only output. sneaky but useful πŸ‘€

By default, validation is strict. For example, -b checks for a valid basename and does not permit a branch label or version number.

With -t, more specific names are permitted. For example, -b will permit a branch name, version number, and patch level. glow-up mode ✨


tla escape

print strings in escaped or unescaped form

Usage: tla escape [--unescaped] string
  • -h, --help β€” show a help message and exit.
  • -H β€” show a verbose help message and exit.
  • -V, --version β€” print a release identifier string and exit.
  • --unescaped β€” show filenames in unescaped form.

Using Pika escaping rules. yes, Pika, like the lil guy 🐭 iconic name choice ngl

πŸ’– ENVIRONMENT πŸ’–

okay so these are the little environment variables that quietly control how arch/tla behaves. lowkey iconic, highkey important. set them, love them, export them bestie ✨

  • EDITOR β€” if $EDITOR is set, arch uses its value as the path of the text editor it launches whenever it needs you to type some text in. If it is not set, then log messages have to be handed over on the command line with the -L parameter, or dropped into the file that tla make-log creates. no editor, no typing, no vibes 😭
  • HOME β€” your home directory, aka the place where arch goes looking for .arch-cache/ and .arch-params/ 🏠
  • http_proxy, HTTP_PROXY β€” if $http_proxy or $HTTP_PROXY is set, arch uses its value as the URL of the proxy to use for WebDAV accesses. and listen, $http_proxy has higher priority than $HTTP_PROXY, so lowercase wins the crown πŸ‘‘ If neither one is set, no proxy is used. periodt.
  • TMPDIR β€” if $TMPDIR is set, arch makes its temporary files in that directory. otherwise it just goes with /tmp πŸ—‚οΈ

πŸŽ€ FILES πŸŽ€

here's where all your stuff actually lives, bestie. screenshot this, fr fr πŸ“Έ

  • ${HOME}/.arch-cache/ β€” the directory where arch caches archive data πŸ—ƒοΈ
  • ${HOME}/.arch-params/ β€” the directory where all of your settings are stored. your whole personality, basically πŸ’…
  • ${HOME}/.arch-params/hook β€” the hook script that gets called after every single execution of tla. yes, every one. it's giving main character energy πŸ¦‹
  • ${HOME}/.arch-params/signing/ β€” the directory where the commands for signing and checking signatures are kept ✍️

🌈 SEE ALSO 🌈

so... this section exists. and it is empty. like, genuinely empty. not a single cross-reference, not one little companion manpage, nothing. the section is just standing there, gorgeous, with no plans. πŸ’€

ngl, that's the whole section. moving on! 🫢


and that's a wrap on the entire tla(1) page, bestie β€” you made it all the way to the end and I'm so proud of you πŸ˜­πŸ’–

one last thing: the very bottom of this page has the footer, and that footer is where you'll find which source and version this page came from, plus the date it was put together. so if you ever need to know exactly which edition of the manual you're reading, peek at the last line. iykyk ✨

go forth and version your trees, queen. slay. πŸ‘‘πŸŒΈ

πŸ“¦ where this page comes from