vadm(1)
π vadm(1) Β· ShapeTools π
β¨ NAME β¨
vadm - manipulate and administer version object base π
β¨ SYNOPSIS β¨
vadm [ version binding options ] [ options ] [ action ] name..
Options: [ -?fq ] [ -cache ] [ -force ] [ -help ] [ -nomail ] [ -quiet ]
[ -stdin ] [ -version ]
Actions: [ -alias version alias name ] [ -attr attribute ]
[ -chaut user ] [ -chmod protection ] [ -chown user ]
[ -delattr attribute name ] [ -d (or -delete) ]
[ -l (or -lock) [version binding] ] [ -newgen ] [ -promote ]
[ -set description | note | intent ] [ -setc comment leader ]
[ -unlock [version binding] ] [ -unpromote ]
vattr [ version binding options ] attribute name..
vrm [ version binding options ] name..
sbmt [ version binding options ] name..
publ [ version binding options ] name..
accs [ version binding options ] name..
frze [ version binding options ] name..
β¨ DESCRIPTION β¨
Okay bestie, vadm is a general purpose command that handles basically ALL the admin stuff for parts of an AtFS object repository π
Need to lock or unlock an AtFS object so it can be modified? π vadm has you. Want to delete one particular object instance? ποΈ vadm. It also does symbolic (alias) names for version objects π·οΈ, promoting or unpromoting certain version objects from one status to another π, changing an object's access permissions π, setting or editing the descriptive entry of particular version objects π, setting or editing an eventual change intention π, and setting or unsetting object attributes like the author or any user defined attributes π. Main character energy, no cap.
vattr and vrm are short forms for vadm -attr and vadm -delete. Check the descriptions of the -attr and -delete options for the deets π¦.
sbmt, publ, accs, and frze are alternate program names for vadm that handle status-change operations for version objects. See the description of option -promote for details π.
The typical command invocation is made up of one or more command options, version binding options that define the versions to act upon, an action specifier that says what kind of action to perform, and a set of object names that define the starting subset of the object base you're going to manipulate π§.
Object names can be written in bound version notation, which identifies one particular version of an object, like mkattr.c[2.4] πΈ. You can also use a previously assigned symbolic name instead of a numerical version identification, like mkattr.c[tools-V4R3] β¨.
π Bestie, make sure to escape the bracket symbols when usingcsh(1)ortcsh(1), because those shells have their own meaning for brackets.
β¨ OPTIONS β¨
For version selection, you can give any version binding option described on the vbind(1) manual page, or add a version bind directive in brackets to the file name π―.
-?,-helpβ pulls up brief instructions on usingvadmπ-cacheβ applies the requested operation to objects living in the derived object cache ποΈ. The set of actions you can perform on binary pool objects is limited, so don't expect miracles π-f,-forceβ don't ask for confirmation when deleting versions from a history π€-nomailβ suppresses the notification mail to the user holding the lock on a history when you break that lock (the-unlockoption) π-q,-quietβ shhh π€« suppresses any prompts, informal messages, and user dialogues. Default values get assumed for everything that would otherwise be asked interactively. Super useful for batch operation π€-stdinβ forcesvadmto read a descriptive text, note, or intent from standard input when the-setaction is selected. The note is used for all specified AtFS objects. Otherwise, your favorite editor (taken from theEDITORenvironment variable) pops up ποΈ-versionβ prints version information about thevadmprogram itself. No action gets performed on the database, so it's just a peek π
vadm performs all of its operations upon a specified set of AtFS version objects. If no such set is specified, the operation is applied to the most recently saved versions of the named object(s) π.
β¨ ACTIONS β¨
The kind of action you want is indicated by a keyword. The following actions are defined π:
-alias version alias nameβ assigns the alias alias name to the specified version π·οΈ. The name works as an alias for the version number, so it must be different from any other symbolic name assigned to any version object in a particular object history. You can give the same symbolic name to version objects in different object histories, though. An object history is usually denoted by a name, similar to a file's name. Using alias names is a simple but effective way to tie together component members of a system configuration. Typical symbolic names look something likeMysystem_Release_4.22, which tells you that version objects with this name are part of release 4.22 of that system π§-attr attrnameβ returns the value of the named attribute π. This can be a standard attribute or a user defined attribute. Check the list below for a complete list of standard attribute names π-attr attrname[+|-]=[@|^|!|*]valueβ defines a user defined attribute called attrname and sets it to value for all specified version objects β¨. This can also set the value of certain standard attributes (see the list below) π- A single equal sign (
=) sets, or resets, the value of the object to the specified value. Any previous values get overwritten π +=, the "plus-equal", appends the specified attribute value to the current value of the referenced attribute β-=, the "minus-equal", should remove the specified value from the given attribute. In the current implementation, removal of single values is not supported π- There are four basic kinds of user defined attribute values: genuine values, reference values, execution values, and pointer values. The kind is determined when the value gets set π§
- If the first character of value is an at sign (
@), the rest of value is the name of a file, and that file's contents become the attribute's value. This substitution happens immediately, so the attribute ends up with a genuine value π. If the filename is-, the value gets read from standard input β¨οΈ - If the first character is a circumflex (
^), the rest of value is a file name whose contents get substituted for the attribute when it's cited π - If the first character of value is an exclamation mark (
!), the rest is the name of a program whose standard output gets substituted for the attribute when it's cited πͺ. Execution values can make highly dynamic attributes, or even a primitive form of event triggers β‘ - An asterisk (
*) as the first character means a pointer to another version. In that case the remainder of value must be a valid bound filename π
- If the first character of value is an at sign (
- User defined attributes can be any length. Any sequence of ASCII characters is allowed to make up an attribute value, except
\01(control-A) π«. If attrname was already set to some value, the previous value gets replaced by the newly specified one π«Ά
- A single equal sign (
-attr @attrfileβ with a@filenameargument, the-attroption reads the names and values of user defined attributes from the named file π. Each entry (each line) in the attribute file must have the format described above. The file's last character must be a newline character π-chaut userβ sets user as the author of a particular revision ποΈ. Normally the author of a revision is whoever saved that revision. But certain permissions are tied to the author attribute, so sometimes you need to change it π-chmod protectionβ changes the access permission code of the specified version objects to the supplied three-octal-digit protection π. Permissions are centered around UNIX' notions of owner, group, and world access, plus the access categories read, write, and execute. These permissions are inherited upon save from the permissions of the file representing the busy object of an AtFS history. Seechmod(2)for details π-chown userβ sets user as the owner of an entire object history π. This option is not supported on BSD type systems, as only the superuser may change the owner of a file π-delattr attrnameβ deletes the user defined attribute attrname from the set of attributes associated with the specified version objects ποΈ-d,-deleteβ removes the specified version objects from the object base, provided the objects' status is saved π. Any other status indicates that some kind of project interaction concerning this object might be in progress. If the programmer wants to delete such a version object anyway, they have to-unpromotethat object's status to saved before it can actually be deleted π§Ή
π Bestie, only saved versions can be deleted. Any other status means something might be going on with the project, so double-check before you go for it.
-l,-lock [version binding]: okay so this one tries to reserve the privilege to add a new version to an object's history π That way, programmers working on the same object base can't clobber each other's saves with concurrent updates π If the lock works, you get write permission on the matching files in the development directory β¨ When you set a new lock, vadm asks for an optional description of your planned changes π- To lock an object history successfully, no other programmer can have it locked, and you need write permission on the AtFS subdirectory hosting the object base π
- ShapeTools lets you lock single generations inside a history, so
-lockoptionally takes an argument naming a generation. The default is the most recent generation. The argument can be a generation number (e.g.2), a version number (e.g.1.4), or a version alias (e.g.release-4.7) π
-newgen: main character energy πΈ This opens a new generation by duplicating the version you point at. The version has to be locked first. Any existing busy versions get ignored by this action π ββοΈ If you don't specify a version binding, the last saved version is taken by default π-promote: this one bumps thestateattribute of the specified objects up to the next-better value π¦ An object instance can be in one of six states:busy,saved,proposed,published,accessed, orfrozen. Version states are meant to tie into visibility and operational restrictions (see for example-delete) inside a complex project environment π- Ngl, the version states don't do much yet π Project library support isn't really there, so they have very little actual functionality. Once fully implemented, certain transitions could only be triggered by appropriately authorized users. The
busyβsavedandsavedβproposedtransitions would be triggered by regular programmers, and the rest would have to be initiated by the project administrator π - Each transition matches a specific action or interaction in a general software project communication scheme. The project support system under development is going to functionally support these actions, so manually manipulating object states won't be necessary anymore (except, perhaps, for manual adjusting of ill situations) π©Ή
- The state transitions line up with these actions:
- Ngl, the version states don't do much yet π Project library support isn't really there, so they have very little actual functionality. Once fully implemented, certain transitions could only be triggered by appropriately authorized users. The
save (busyβsaved, performed by programmer)
sbmt (savedβproposed, performed by programmer)
accpt (proposedβpublished, performed by project administrator)
accs (publishedβaccessed, performed by any project member)
release (accessedβfrozen, performed by project administrator)
- vadm has a different interface to the status control facilities, through the program aliases
sbmt,publ,accs, andfrze. These match the conceptual project interactions submit, publish, access, and freeze πsbmt(submit): a team programmer does this when a work result, like a completed change request, gets proposed for inclusion in the official system configuration. The status becomesproposedβ¨publ(publish): usually done by members of the quality assurance group when a work result proposed by a team programmer gets approved and included in the current official system configuration. The status becomespublishedπ§accs(access): happens during configuration identification, when component versions of a (sub-)product get incorporated into some other (partial) (sub-)system configuration. The status becomesaccessedπ¦frze(freeze): also happens during configuration identification, when a global release of the entire system configuration gets established. The status becomesfrozenπ§
-set [description | note | intent]: lets you set or modify the descriptive text for an AtFS history object (the entire version history) βοΈ The note usually describes how a version object differs from its preceding version, or it's an entry describing a planned change π Re-setting the change intention can be appropriate if a previously set change intent got consumed by asbmtcommand that kept the lock on the object history π- vadm checks your environment for the
EDITORvariable and invokes whatever program it names. IfEDITORisn't set, the system's default editor gets activated instead π - You can write an arbitrary-length descriptive or note entry in the editor. When you leave the editor, the resulting text gets stored with the object history or the specified version objects π
- vadm checks your environment for the
-setc comment_string: setscomment_stringas the character or sequence of characters that opens a comment line within the formalism of the document π Thatcomment_stringgets prepended to the lines of the log history whenever the$__log$attribute is expanded within the text of a revision π«Ά-unlock: this gives up the privilege you reserved to update an object's history and clears the write permission on the corresponding files π The owner of an object history can use-unlockto break a lock set by any programmer. It's super useful for resolving deadlock situations caused by careless use of-lock, or for exceptional circumstances that need an immediate update to the object history even when the lock holder isn't around π¨ The previous owner of a broken lock gets notified by a mail message π¬- Mail notifications can get annoying π For example, if a development tree gets moved to another system or domain with locked busy-versions, the owner has to break the locks to check the busy-versions back into the version archives at the new site.
- To avoid this, the switch
-nomailcan be used to suppress mail notification π€« - Any change intention expressed earlier (see
-lock) will be cleared β¨ - Technically, the owner of an object history is the owner of the AtFS subdirectory hosting the object base π
-unpromote: reverses a state transition carried out through a prior-promoteπ The same remarks about functional embedding (and thus hiding the state transitions) that hold for-promotehold for-unpromotetoo π«Ά
β¨ PREDEFINED ATTRIBUTE NAMES β¨
Okay so here's the squad of built-in attributes vadm already knows about π§ Each one has a name, a meaning, and the kind of value it takes. Those little footnote numbers are lowkey important, so don't skip the legend at the bottom π
aliasβ version alias names π. Value: list of alias names, like"vadm-4.2pre7"or"ShapeTools-1.4". Footnotes 1, 3.atimeβ time of last access π. Value: e.g."Tue Jan 14 18:47:06 1992". Footnote 3.authorβ user who saved a version βοΈ. Value:user@do.ma.in(the domain name usually doesn't include the hostname). Footnotes 1, 3.cachekeyβ unique key for cached versions π. Value: a compound numeric built from creation date, process id, and a serial number, e.g.740148430.18469.6. Footnote 3.cleadβ comment line leader symbol π¬. Value: depends on file type, e.g."# "for Shapefiles. Footnote 1.ctimeβ time of last status change π°οΈ. Value: asatime.Descriptionβ descriptive text for module π. Value: multi line text. Footnote 2.dsizeβ size of the delta to the previous version, in bytes π. Value: numeric.generationβ major revision number π±. Value: numeric. Footnotes 1, 3.Headerβ RCS-style version header π§Ύ. Value: text.Intentβ change intent π―. Value: multi line text. Footnote 2.hostβ name of current host π₯οΈ. Value: e.g."avalanche". Footnote 3.Logβ cumulative descriptive entries of all versions, from the first up to this one π. Value: multi line text.lock/lockerβ user who locks a history π. Value: asauthor. Footnote 3.ltimeβ time of last lock transaction β°. Value: asatime. Footnote 3.modeβ access protection π‘οΈ. Value: e.g.-rw-r--r--. Footnote 1.mtimeβ time of last modification βοΈ. Value: asatime. Footnote 3.nameβ name part of an object identifier π·οΈ. Value: e.g."foo"for"foo.c". Footnote 3.noteβ short note describing the changes in this version ποΈ. Value: multi line text. Footnotes 1, 2.ownerβ user who owns the repository this version is archived in π. Value: asauthor. Footnotes 1, 3.predβ bound version identifier of the preceding version β¬ οΈ. Value: e.g."foo.c[3.22]"or"n/a".revisionβ minor revision number πΏ. Value: numeric. Footnotes 1, 3.rtimeβ last time the history was locked π. Value: asatime.selfβ bound version identifier for this version πͺ. Value: e.g."foo.c[3.23]".selfpathβ bound version identifier for this version, including path πΊοΈ. Value: e.g."/usr/proj/sample/foo.c[3.23]".sizeβ size of the version in bytes π¦. Value: numeric. Footnote 3.state/statusβ version status π¦. Value: symbolic integers (busy, saved, proposed, published, accessed, and frozen). Footnotes 1, 3.stimeβ time when the version was saved πΎ. Value: asatime. Footnote 3.succβ bound version identifier of the successive version β‘οΈ. Value: aspred.syspathβ pathname part of an object identifier π. Value: e.g."/usr/proj/sample"for"/usr/proj/sample/foo.c". Footnote 3.typeβ suffix part of an object identifier π§©. Value: e.g."c"for"foo.c". Footnote 3.unixnameβ UNIX file name of this version π. Value: e.g."foo.c".unixpathβ UNIX file name of this version, including path π€οΈ. Value: e.g."/usr/proj/sample/foo.c".versionβ compound version number made of the generation and revision numbers π’. Value: e.g."3.22". Footnotes 1, 3.vtimeβ version time: modification time for busy versions, or save time for saved/cached versions β. Value: asatime.xpoffβ pseudo attribute that turns off subsequent attribute expansions π . Value:none.xponβ pseudo attribute that turns subsequent attribute expansion on π. Value:none.
π Footnotes
- 1 β may be modified by
vadm -attr name=value. - 2 β may be modified by
vadm -set <type>. - 3 β recognized by attr* predicates in version bind rules (see
bindrules(7)).
πΈ ENVIRONMENT πΈ
EDITORβ the only environment variable listed here. The page doesn't say anything more about it, so that's all the tea β
π¦ SEE ALSO π¦
save(1), retrv(1), vl(1), vbind(1) β the sibling pages, iykyk π
π AUTHORS π
Uli.Pralle@cs.tu-berlin.de, Axel.Mahler@cs.tu-berlin.de, Andreas.Lampen@cs.tu-berlin.de β the squad who made this π«Ά
And that's the whole page, bestie! π We covered vadm 4.10, last updated Friday, July 9, 1993. Go forth and attribute responsibly, you absolute legend π β¨
π¦ where this page comes from
- debian bookworm: atfs 1.4pl6-15+b1
- ubuntu jammy: atfs 1.4pl6-15
- ubuntu noble: atfs 1.4pl6-16.1build1
- ubuntu resolute: atfs 1.4pl6-17
- ubuntu stonking: atfs 1.4pl6-17
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms