The Hackerlab at `regexps.com`

## Multi-Tree Projects

up: arch

Large projects are often most naturally divided into a number of independently maintained sub-projects. For example, `arch` itself consists of six separate projects:

            ./src
                    A generic top-level source file for combining
                    projects.

            ./src/arch
                    arch itself.  That is, the `arch' command and all of
                    the shell scripts that implement it.

            ./src/file-utils
                    Generic utilities for operating on files and
                    directories.

            ./src/ftp-utils
                    A scriptable FTP client.

            ./src/hackerlab
                    The hackerlab C library.

            ./src/text-utils
                    Generic utilities for operating on text files.

In an `arch` source tree, each of those sub-directories is a separate project tree (each has its own `{arch}` subdirectory; each was initialized by the command `larch init-tree` ; each is in a separate category in the repository).

To put all the pieces together, use the `arch` configuration commands :

(TO BE DOCUMENTED:)

Config file format, e.g.:

        ./configs/regexps.com/devo.arch:

        #
        # Check out an arch distribution from the devo branches.
        # Latest revisions.
        #

        ./src                   lord@regexps.com--2002/package-framework--devo
        ./src/arch              lord@regexps.com--2002/arch--devo
        ./src/file-utils        lord@regexps.com--2002/file-utils--devo
        ./src/ftp-utils         lord@regexps.com--2002/ftp-utils--devo
        ./src/hackerlab         lord@regexps.com--2002/hackerlab--devo
        ./src/shell-utils       lord@regexps.com--2002/shell-utils--devo
        ./src/text-utils        lord@regexps.com--2002/text-utils--devo

and

      % larch build-config --help
      instantiate a multi-project tree
      usage: build-config [options] config-name

       -V --version                  print version info
       -h --help                     display help

       --silent                      no output (except odd errors)
       --quiet                       brief output
       --report                      default output
       --verbose                     maximal output
       --debug                       debugging output
       -d --dir DIR                  cd to DIR first

      Build the named configuration based on the specification
      in the "configs" subdirectory at the root of the project
      tree.

and

      % larch update-config --help

      update a multi-project tree
      usage: update-config [options] config-name

       -V --version                  print version info
       -h --help                     display help

       --silent                      no output (except odd errors)
       --quiet                       brief output
       --report                      default output
       --verbose                     maximal output
       --debug                       debugging output

       -d --dir DIR                  cd to DIR first

       --force                       pass the --force flag to update

      Update the named configuration based on the specification
      in the "configs" subdirectory at the root of the project
      tree.

and

        % larch replay-config --help

        replay a multi-project tree
        usage: replay-config [options] config-name

         -V --version                  print version info
         -h --help                     display help

         --silent                      no output (except odd errors)
         --quiet                       brief output
         --report                      default output
         --verbose                     maximal output
         --debug                       debugging output

         -d --dir DIR                  cd to DIR first

        Update the named configuration based on the specification
        in the "configs" subdirectory at the root of the project
        tree.

and

        % larch record-config --help

        record a revision-specific configuration
        usage: record-config [options] config-name new-config-name

         -V --version                  print version info
         -h --help                     display help

         --silent                      no output (except odd errors)
         --quiet                       brief output
         --report                      default output
         --verbose                     maximal output
         --debug                       debugging output

         -d --dir DIR                  cd to DIR first

         -f --force                    overwrite an existing config

        Update the named configuration based on the specification
        in the "configs" subdirectory at the root of the project
        tree.

and

        % larch show-config --help

        show the revision frontier of a configuration
        usage: show-config [options] config-name

         -V --version                  print version info
         -h --help                     display help

         --silent                      no output (except odd errors)
         --quiet                       brief output
         --report                      default output
         --verbose                     maximal output
         --debug                       debugging output

         -d --dir DIR                  cd to DIR first

        Print the revision frontier specified by the named configuration
        in the "configs" subdirectory at the root of the project
        tree.

arch: The arch Revision Control System
The Hackerlab at `regexps.com`