/*
* aegis - project change supervisor
* Copyright (C) 1995-1998, 2001-2006, 2008 Peter Miller
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
* .
*
* if you cange this file, don't forget to change
* man5/aefstate.5
*/
#include
type fingerprint =
{
youngest = time;
oldest = time;
crypto = string;
};
/*
* This field is a list of all the files in a transaction.
*/
src =
[
{
/*
* This file names the file. The name is relative to
* the root of the baseline directory tree.
*/
file_name = 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.
*/
uuid = string;
/*
* This field describes what is being done with the file.
*/
action = file_action;
/*
* For an active branch, this field records the current
* "head revision" of the file.
*
* For a completed branch, this field records the edit
* number the file assumed upon integration completion.
*
* For a change, or a completed branch, this field
* is only meaningfuil in the completed state, where
* it records the edit number the file assumed upon
* integration completion.
*/
edit = history_version;
/* As above, but no longer used. */
edit_number = string;
/*
* For a branch, this field records the edit number of
* the file when it was copied from the parent branch.
*
* For a change, this field record the edit number of the
* file when it was copied from the branch (or ancestor)
* into the change.
*/
edit_origin = history_version;
/* As above, but no longer used. */
edit_number_origin = string;
/*
* This field is only valid for changes, not branches.
* It records a new edit_number_origin to be given to the
* branch once integration is complete. (This field only
* present between being_developed and being_integrated,
* inclusive.)
*/
edit_origin_new = history_version;
/* As above, but no longer used. */
edit_number_origin_new = string;
/*
* This field describes what function the file serves.
*/
usage = file_usage;
/*
* This field remembers when the source file itself was
* last modified (os_mtime also checks ctime to make
* sure it is not being faked out). If the file_time
* has changed, the fingerprint is checked.
*/
file_fp = fingerprint;
/*
* This field is set by a successful 'aegis -DIFFerence'
* command to the last modified time of the difference
* file. It is only present between the
* 'being_developed' and 'being_integrated' states,
* inclusive (for both changes *and* branches). This
* allows checking that the files have not been modified
* at the develop_end, review_pass and integrate_begin
* state transitions.
*/
diff_file_fp = fingerprint;
/*
* This field is set by a successful 'aegis -DIFFerence'
* command to the last modified time of the difference
* file. It is only present in the 'being integrated'
* state.
*/
idiff_file_fp = fingerprint;
/*
* 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.
*/
architecture_times =
[
{
/*
* This field is one of the patterns named in
* the outer "architecture" field.
*/
variant = string;
/*
* This field records the last time the last
* successful 'aegis -Test' command was run for
* this specific architecture variant.
*/
test_time = time;
/*
* This field records the last time the last
* successful 'aegis -Test -BaseLine' command
* was run for this specific architecture
* variant.
*/
test_baseline_time = time;
}
];
/*
* To change the name of a file, a combination of aerm
* and aenf are 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.
*/
move = string;
/*
* 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.
*/
locked_by = integer;
/*
* The change which is about to create this file for the
* first time. Same caveat as above.
*/
about_to_be_created_by = integer;
/*
* For each change file that is acting on a project file
* from a deeper level than the immediate parent
* project, the file needs to be added to the immediate
* parent project. Same caveat as above.
*/
about_to_be_copied_by = integer;
/*
* The change which last deleted this file. We never
* throw them away, becase (a) it may be created again,
* and more imortant (b) we need it to recreate earlier
* deltas.
*/
deleted_by = integer;
/*
* This field is used to remember the correlation
* between source files and test files. It is updated
* by aeipass. It is only present for projects and
* branches. It is only present for source files (not
* build files and not test files).
*/
test = [ string ];
/*
* This field is an arbitrary list of names and values.
* They are expected to be generated by the integration
* build, and are transferred at aeipass.
*/
metrics = metric;
/*
* This field tracks whether this incarnation of the file
* was executable at `develop end' time. This mode
* is 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. Until then, the mode if the file itself is
* the authority.
*/
executable = boolean hide_if_default;
/*
* This field records the file attributes. Users may edit this
* field using the aegis --file-attributes --edit command.
* These attributes are for users only; Aegis ignores them.
*/
attribute = attributes;
}
];