The Hackerlab at `regexps.com`

## The arch Changeset Format

up: arch Meets hello-world next: Customizing the inventory Naming Conventions prev: Speeding up arch by Caching Revisions in Archives

An arch changeset is a directory containing a number of files and subdirectories. Each is described below.

Files:

            orig-dirs-index
            mod-dirs-index
            orig-files-index
            mod-files-index

Format:

            <file path><tab><id>

Sorting:

            sort -k 2

These contain indexes for all files and directories added, removed, or modified between the two trees.

Files:

            original-only-dir-metadata
            modified-only-dir-metadata

Format:

            <metadata><tab><name>

Sorting:

            sort -t '<tab>' -k 2

The field `<metadata>` contains literal output from the program `file-metadata` given the options `--permissions` . Some example output is:

            --permissions 777

That output is also suitable for use as options and option arguments to the program `set-file-metadata` . Future releases `arch` might add additional flags (beside just `permissions` ).

The list records the file permissions for all directories present in only one of the two trees.

Directories:

            removed-files-archive
            new-files-archive

Each of these directories contains complete copies of all files that occur in only the original tree (`removed-files-archive` ) or modified tree (`new-files-archive` ). Each saved file is archived at the same relative location it had in its source tree, with permissions (at least) preserved.

Directory:

            patches

This directory contains a tree whose directory structure is a subset of the directory structure of the modified tree. It contains modification data for directories and files common to both trees.

For a file stored in the modified tree at the path `new_name` , the `patches` directory may contain:

            new_name.link-orig

                    The original file is a symbolic link.
                    `new_name.link-orig' is a text file containing the
                    target of that link plus a final newline.

                    This file is only present if link target has changed,
                    or if the link was replaced by a regular file.

            new_name.link-mod

                    The modified file is a symbolic link and this file
                    is a text file containing the target for the link plus
                    a final newline.

                    This file is only present if the link target has
                    changed, or if the link replaces a regular file.

            new_name.original

                    This is a complete copy of the file from the original
                    tree, preserving (at least) permissions.

                    This file is only present if the file was replaced by
                    a symbolic link, or if the file contents can not be
                    handled by `diff(1)'.

            new_name.modified

                    This is a complete copy of the file from the modified
                    tree, preserving (at least) permissions.

                    This file is only present if the file replaces a
                    symbolic link, or if the file contents can not be
                    handled by `diff(1)'.

            new_name.patch

                    This is a standard context diff between the original
                    file and modified file.  One popular version of diff
                    (`GNU diff') generates non-standard context diffs by
                    omitting one copy of lines of context that are
                    identical between the original and modified file, so
                    for now, `.patch' files may have the same bug.
                    Fortunately, the only popular version of `patch'
                    (``GNU patch'') is tolerant of receiving such input.

            new_name.meta-orig
            new_name.meta-mod

                    File metadata (currently only permissions) changed
                    between the two versions of the file.  These files
                    contain output from the `file-metadata' program with
                    the flags `--symlink --permissions', suitable for
                    comparison to similar output, and for use as options
                    and option arguments to `set-file-metadata'.

                    These files are also included if a regular file has
                    replaced a symbolic link or vice versa.

            new_name/=dir-meta-orig
            new_name/=dir-meta-mod

                    Directory metadata (currently only permissions) changed
                    between the two versions of the directory containing
                    these files.  These files contain output from the
                    `file-metadata' program with the flags `--symlink
                    --permissions', suitable for comparison to similar
                    output, and for use as options and option arguments to
                    `set-file-metadata'.

Note: If a regular file (or symbolic link) replaces a directory, or vice versa, this is recorded as a file (or link) removed (or added) in one tree and added (or removed) in the other.

arch Meets hello-world: A Tutorial Introduction to The arch Revision Control System
The Hackerlab at `regexps.com`