Provided by: aegis_4.24.3-3_amd64 bug

NAME

        aefstate - aegis file state file

SYNOPSIS

        project/info/change/[0-9]/[0-9][0-9][0-9].fs

DESCRIPTION

        A file state file is used to store information about the files in a transaction.  These
        files are created and maintained by aegis.  These files should not be edited by humans.
        These files is owned by the project owner and group.

CONTENTS

        src = [ { ... }, ... ];
                This field is a list of all the files in the change.  The records have the form

                file_name = string;
                        This file names the file.  The name is relative to the root of the
                        baseline directory tree.

                uuid = string;
                        This field uniquely identifies the file for its entire lifetime.  This
                        field remains constant across file renames.  The value of this field
                        shall be formatted as a valid UUID, all in lower case.

                action = (create, modify, remove, insulate, transparent);
                        This field describes what is being done with the file.

                        create  The file is being created.  Once integrated, the edit fields
                                record the file version created and stored in the history.

                        modify  The file is being created.  Once integrated, the edit fields
                                record the file version stored in the history.

                        remove  The file is being created.  The edit field is only informational,
                                and describes the file version at the time it was removed from
                                the repository.

                        insulate
                                The file is insulating a development directory from changes to
                                the baseline, it shall be uncopied before development may end.
                                This action shall only be present in changes.  It shall never  be
                                present in branch change state files.

                        transparent
                                The file wasonce present in the branch, however it is desired
                                that the ancestor version "show through".  This is the equivalent
                                of "uncopy" for branches.  When the branch is integrated, this
                                file will be omitted.

                edit = { ... };
                        For a project or an active branch, this field records the head revision
                        of the file.  For a completed change or branch, this field records the
                        revision number after integrate pass.

                        revision = string;
                                This is the edit number, as reported by the history_get_command
                                in the project config file at integrate pass time.

                        encoding = (none, quoted_printable, base64);
                                This field records the encoding used when the file was added to
                                the history at integrate pass time, as configured by one of the
                                history_put_command or history_get_command and history_content_‐
                                limitation fields of the project config file.

                                none    No encoding was applied to the file.  Either it had no
                                        binary characters, or the history tool is able to cope
                                        with binary files.

                                quoted_printable
                                        The MIME Quoted Printable encoding (see RFC 1521) has
                                        been used to escape the binary characters of the file
                                        content.

                                base64  The MIME Base 64 encoding (see RFC 1521) has been used to
                                        encode the file content.

                                The history_content_limitation field of the project config file
                                is used to determine which files need encoding.  The size of the
                                encoded file is compared to determine which of quoted printable
                                and base 64 encodings is used; the smaller is chosen.

                edit_number = string;
                        This field is obsolescent.  It is only present for backwards
                        compatibility.  It has been replaced by the edit field.

                edit_origin = { ... };
                        This field records the edit number of the file when it was added to the
                        change or branch.  In changes, this field is not present for new files.
                        (A change file is out of date if it's edit number_origin field does not
                        equal the edit_number field in the project.)

                        It has the same fields, with the same meaning, as the edit field, above.

                edit_number_origin = string;
                        This field is obsolescent.  It is only present for backwards
                        compatibility.  It has been replaced by the edit_origin field.

                edit_origin_new = { ... };
                        This field records the edit number of the file to replace the
                        edit_number_origin field in the branch at integrate pass time.  This is
                        used to perform cross branch merging.  This field cleared at integrate
                        pass time.

                        It has the same fields, with the same meaning, as the edit field, above.

                edit_number_origin_new = string;
                        This field is obsolescent.  It is only present for backwards
                        compatibility.  It has been replaced by the edit_origin_new field.

                usage = (source, config, build, test, manual_test);
                        This field describes what function the file serves.

                file_fp = fingerprint;
                        This field records the last time modified of the source file.  It is only
                        present between the being_developed and being_integrated states,
                        inclusive (for both changes and branches).  It is not present for files
                        which are being deleted.  This field is used to determine if a difference
                        has been done, or a test has been done if the source file is a test, and
                        if the file has been tampered with before state transitions.

                        The fingerprint consists of the following fields:

                        youngest = time;
                                The youngest time see for this file with this fingerprint.

                        oldest = time;
                                The oldest time see for this file with this fingerprint.

                        crypto = string;
                                This field records a cryptographically strong fingerprint for the
                                file.  There is no known method of constructing a file to match a
                                given fingerprint, and there is less than 1 in 2**200 chance that
                                two files will have the same fingerprint.  Thus if the
                                fingerprint is the same, the file can reliably assumed to be the
                                same.

                diff_file_fp = fingerprint;
                        This field records the last time modified of the difference file when the
                        last aegis -DIFFerence command was run.  It is only present between the
                        being_developed and being_integrated states, inclusive (for both changes
                        and branches).  This field is used to determine if a difference has been
                        done, and if the difference file has been tampered with before state
                        transitions.

                idiff_file_fp = fingerprint;
                        This field records the last time modified of the integration difference
                        file when the last aegis -DIFFerence command was run.  It is only present
                        in the being_integrated state.  This field is used to determine if a
                        difference has been done.

                architecture_times = [{ ... }];
                        This field records the time of various operations for each variant named
                        in the architecture field.  It is only present in the being_developed and
                        being_integrated states.  This field is used to determine if a test has
                        been done, and thus optimize test runs.

                        variant = string;
                                This field is one of the patterns named in the architecture
                                field.

                        test_time = time;
                                This field records the last time the last successful aegis -Test
                                command was run for this specific pattern instance.

                        test_baseline_time = time;
                                This field records the last time the last successful aegis -Test
                                -BaseLine command was run for this specific pattern instance.

                move = string;
                        To change the name of a file, a combination of deleting the old name and
                        creating the new name is used.  With deleted files, this field is used to
                        say where it went.  With new files, this field is used to say where it
                        came from.

                locked_by = integer;
                        The change which locked this file.
                        Caveat: this field is redundant, you can figure it out by scanning all of
                        he change files.  Having it here is very convenient, even though it means
                        multiple updates.

                about_to_be_created_by = integer;
                        The change which is about to create this file for the first time.  Same
                        caveat as above.

                about_to_be_copied_by = integer;
                        For each change file that is acting on a project file from a deeper
                        baseline than the immediate parent project's baseline, the file needs to
                        be added to the immediate parent project.  Note that this field says that
                        this file record is a place marker, so that it can be deleted again
                        should the change not be integrated for some reason.

                deleted_by = integer;
                        The change which last deleted this file.  We never throw them away,
                        because (a) it may be created again, and more important (b) we need it to
                        recreate earlier deltas.

        test = [ string ];
                This field is used to remember test correlations for source files.  This is used
                by aet(1) to suggest suitable tests.

        metrics = [ { ... } ];
                This field is used to describe various file metrics.  It is committed during
                aeipass(1), when the file is added to the history.  The name must be given, and
                exactly one value.

                name = string;
                        This is the name of the metric.  This field must be set.

                value = real;
                        This is the value of the metric.  This field must be set.  (If you have
                        an integer-valued metric, just use integers, Aegis will cope.  If you
                        have a string-valued metric, assign integers to the enumerands.)

        executable = boolean;
                This field is used to remember whether the source file had any executable
                permission bits set at develop end time.  This mode will be restored (taking the
                project umask into account) when the file is copied.

                This field is only meaningful for changes in the completed state, because this
                field is only set by aeip(1).  Until then, the mode if the file itself is the
                authority.

        attribute = [ { ... } ];
                This is a list of (name,value) pairs, defining user specified attributes.

                name = string;
                        The name of the attribute.  By convention, names which start with an
                        upper-case letter will appear in listings, and lower-case will not.
                        Attribute names are case-insensitive.

                value = string;
                        The value of the attribute.

                Arguably, most file properties which may be altered by the user (and some that
                can't) should be of this form.  Due to an accident of history, this is not the
                case.

WRITING REPORT SCRIPTS

        When attempting to access these fields from within the report generator, you need a code
        fragment similar to the following:
                auto ps, pfs;
                ps = project[project_name()].state;
                fps = ps.src["somefile"];
                auto cs, cfs;
                cs = ps.branch.change[change_number()];
                cfs = cs.src["somefile"];
        Notice that the top-level fields of the file state are not available, but instead are
        mapped onto the relevant project file and change file src arrays.

        All of the src member fields mentioned in the man page can now be accessed as members of
        the pfs or cfs variables.

SEE ALSO

        aegis(5)
                aegis file format syntax

COPYRIGHT

        aegis version 4.24.3.D001
        Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
        2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Peter Miller

        The aegis program comes with ABSOLUTELY NO WARRANTY; for details use the 'aegis -VERSion
        License' command.  This is free software and you are welcome to redistribute it under
        certain conditions; for details use the 'aegis -VERSion License' command.

AUTHOR

        Peter Miller   E-Mail:   millerp@canb.auug.org.au
        /\/\*             WWW:   http://www.canb.auug.org.au/~millerp/