|
NAMEfhist - file historySYNOPSISfhist filename... option...fhist -Help fhist -VERSion DESCRIPTIONThe fhist program is used to keep track of the successive versions of a file. Using this program, you can remember all of your changes to a file, and get back any one of the old versions. The uses of this ability are:
The fhist program manipulates modules. A module is simply any text file that you are interested in keeping versions of. For example, a source file doit.c is a module, and so is a documentation file howto.doc. The module name includes the suffix of the file (as in the above examples). However, pathnames are not part of a module name, so that /usr/dbell/bar.c cannot be a legal module name. A module name is limited to 12 characters since the fhist program needs two extra characters for its own purpose. Keyword SubstitutionIt is possible to have information about the state of the file inserted into the file. See the -Modify and -No‐Keywords options, below, for more infromation.OPTIONSThe following options are understood:
Modules are stored in a directory, called the module
storage directory. The default directory is FHIST, and therefore is
located relative to your current directory. This is convenient when you are in
a directory containing many modules, and you want a local storage directory to
contain just those modules. If you use the -p option, then you can
locate the storage directory anywhere you choose. This is useful if you choose
to have a common storage directory for all of your files, independent of where
they actually are used.
The files inside of the storage directory should not be changed by you. Doing so will probably corrupt your edit history, causing errors when you extract old revisions. For your information, though, each module is stored as two files in the directory. The one with the .s suffix is a copy of the newest version of the module, with one extra line at the beginning. The one with the .e suffix is the edit history of the module, and contains the information needed to extract previous revisions of the module. Thus if the edit history is ever corrupted, you will at least have the most recent version of the module.
To use the fhist program for the first time, you
need to create your storage directory. Therefore, cd to the directory
where you want it to be, which is probably the directory containing the
modules you want to save the revisions of. Then create the directory
FHIST (or some other name if you don't want to use the default name).
To start using a module under fhist, you must first use the -CReate option. This creates the initial edit for that module in the storage directory, with the contents of the specified module as the initial edit. Thus, if you have a source file prog.c, then the command: fhist prog.c -create The -CReate option may be combined with the -Update or -Conditional_Update options to create the file if required.
To save another revision of the module, you use the
-Update option. This updates the files in the storage directory to
include the latest changes. Remarks are again asked for so that you can
document why you made this edit. Thus, to continue the example, after editing
prog.c, the command:
fhist prog.c -u The fhist program handles quota or disk full problems during a create or update operation without damage occurring to the edit history files. If an edit cannot be completed because of such problems, the edit is backed out completely, and you will get an error message about the disk problem. There is no need for any error recovery in this case, other than retrying the update when more disk space is available. The fhist program also disables signals during the critical file operations, so you do not have to worry about damaging the edit history files because of attempts to quit out of the program. The -CReate option may be combined with the -Update or -Conditional_Update options to create the file if required.
In either the -CReate or -Update options,
the file containing the new version of the module defaults to the same name as
the module. In the example, the module prog.c was created and updated
from the data in the file prog.c. When you wish the data to come from
some other file, you can use the -Input option, which specifies the
input file to use for the data. For example, if you wanted to update
prog.c, but from a filename called newprog.c, then the command:
fhist prog.c -u -i newprog.c
Remarks can be read from a file instead of from the
terminal. The -Remarks option can be used to specify a file name
containing the remarks. If there is no file name following the -Remarks
option, then no remarks at all are used. The command:
fhist prog.c -u -r
To retrieve a previous revision of a module, you specify
the name of the module and use the -Extract option to specify the edit
number you want retrieved. Edit numbers are assigned sequentially starting
with 1. Thus the initial version of the module has edit number 1, the first
revision has edit number 2, and so on until the latest revision. If the
-Extract option is not used, or if no edit number is supplied for it,
then the latest edit number is extracted. Therefore, this is the default
action if no options at all are specified.
Edit numbers can also be zero, negative, or be a name with an optional offset. The number zero represents the latest edit number, and negative numbers indicate edit numbers backwards from the latest edit number. Edit names represent edit numbers whose name had been set by using the -Name option. For example, if edit number 10 was associated with the name foo, then the edit name foo represents 10, foo‐4 represents edit number6, and foo+2 represents edit number 12. The special reserved names oldest and newest refer to the oldest and newest versions of the module in the edit history. As an example of retrievals, assume that you have saved ten versions of the module prog.c. The following commands will then extract the versions of the file with the specified edit numbers:
The output filename is again defaulted to the module name. So when the module prog.c is extracted, the specified version of the module is written to the prog.c file. In order to prevent accidental overwriting of a file, the fhist program will by default ask you if overwriting is permitted if that would occur. A common mistake is to edit prog.c, and then try to update the module, but forget to specify the -u option. Then the fhist program would try to extract the newest version of the module, and thus overwrite the file with the new changes. Asking the question allows you to notice your mistake, and prevent the overwriting.
You can change the output filename using the
-Output option. Thus, the command:
fhist prog.c -o newprog.c
When extracting a file, the fhist program looks
for and updates special character sequences in the first few lines of the
file. These special sequences are used for documentation purposes, such as
describing the edit number the file is from. For speed of extraction and
updating, these sequences are usually limited to the first 25 lines of the
file, since the fhist program then does not have to examine the entire
file. The -Modify option can be used to change the number of lines to
be modified from the default value of 25. Specifying zero totally disables the
special character sequences, whereas specifying a very large number will cause
the sequences to be checked for each line of the file (and thus slow the
fhist program down).
Each special sequence is of the form [# keyword value, keyword value, ..., keyword value #] , where each keyword describes an item, and each value is the value for the preceding keyword. The keywords can be in upper or lower case, or both. The single space following the [#, following each comma, and preceding the #] must be present. If the sequence is wrong, an unknown keyword is used, the line is longer than 200 characters, or more than four keywords are used, then the whole line will not be changed. The current keywords which can be used are the following:
In order to use this special character sequence, you simply insert it into your module inside of a comment (within the first few lines). When this is done, the value parts of the sequence can be null. For example, if you want to put a special sequence into a program called delete.c, then you could edit the first few lines as follows: /* * Delete - program to delete files * [# Edit, Date #] */ /* * Delete - program to delete files * [# Edit 23, Date 8‐Aug‐89 #] */ When updating a module, it is never necessary to edit these sequences, as any old values will be removed and replaced with the new ones. Also, when using the -d or -du options (described below), lines with these sequences compare as if the values were null, and thus will not cause spurious differences. During an update, the special character sequences are read and any edit value found is compared against the current edit number of the module. If they differ, then the update fails. This provides an interlock check for the case of two users extracting the same version of a file, editing it, and then both updating it without knowledge of each other. In this case, the second user would fail, and then he can merge his edits with the previous user's edit and then retry the update. This checking is disabled if there is no special character sequence containing the edit keyword, the edit number value is null, or if the -Forced_Update option is used to indicate that the check is not needed.
This option is used to display the differences between
two versions of a module, or a file and a version of a module. There are three
modes for this action, depending on how many edit numbers are supplied. These
modes are illustrated by the following examples:
This option accepts the -Input option to specify the file to be compared. When using the -Difference option, the output defaults to the terminal. Therefore, you must use -Output if you wish the differences saved to a file. Using -Quick with -Difference will only output a quick summary of the changes, instead of the detailed changes. This summary only supplies the number of lines inserted, deleted, and unchanged between the files. Using -What with -Difference will display all of both files, showing in detail what the differences are using change bars. The -Difference option may need to write one or two temporary files in order to extract old versions of a module to be compared. These files have names like T$n_nnn . They are deleted again just before differences are output, so that stopping the output before it is complete will not leave these files around. The temporary files are usually written to the current directory. If this is not reasonable because of permission or quota problems, then you can specify the directory for writing the temporary files into. This is done by defining the TMPDIR environment variable to be the path of the directory.
This option combines the effects of the
-Difference and -Update options. It displays the differences
between a file and the latest version of a module. If there are any
differences, it then proceeds to perform an update of the module with that
file, asking for remarks as usual. This option is very useful when used with
wildcarded module names. Then you can update just those modules which were
changed by an edit session, and see the changes for each module before typing
the appropriate remark for each module.
You may specify both of the -Difference and -Update options, or you may use this option. The results are identical.
This option conditionally updates a module. That is, it
will only do an update if there are any differences between a file and the
latest version of a module. This is convenient when related changes are made
to many modules in a directory, and one command using wildcards can update
just those modules that were changed.
The -CReate option may be combined with the -Update or -Conditional_Update options to create the file if required.
This option is used to find out if a file does not match
the latest version of a module. If so, a message is given. If the file does
match, no output occurs. This option is thus useful to determine which files
have been modified and in need of updating. The -ALL option is
defaulted for this option, since it is usually used for all modules. For
example,
fhist -CHeck
This option is used to permanently remove early edits
from an edit history. This is useful if you wish to cut down on the amount of
disk space taken by an edit history file, or when you want to start another
release of a file, and want a copy of the edit history file for that new
release. The option takes an edit number to preserve, and all edits in the
edit history file before that edit are deleted, and can no longer be
referenced. For example, to keep only the current edit plus the previous 10
edits of the module file, you could use the command:
fhist file -prune -10
This option can be used with any of the action options.
It means perform the operation for all modules in the module storage
directory. Alternatively, you can specify multiple module names on the command
line, and the actions will be performed with those modules. You cannot specify
both -ALL and module names.
When using multiple modules or the -ALL option, the -Input and -Output options have a slightly different meaning. In these cases, the -Input and -Output arguments are a directory name which contains filenames with the same name as the module names. If the argument is not a directory, then an error is given. This feature is useful for example, to extract all the modules and place them into some remote directory, as in: fhist -all -e -o tempdir You should be careful when specifying numeric edit numbers for multiple modules. Most probably, a particular edit number is not appropriate for multiple modules, since changes corresponding to a particular edit number are not usually related. Using named edits avoids these problems. As an example, if you wanted to extract every module which had an edit that was named rev3, then you could use the command: fhist -all -e rev3 Some other useful examples of commands which use multiple modules are: fhist *.c -create fhist -check -all fhist -cu -all
This option can be specified with any other action, and
outputs status information about the progress of the action. This is useful
for debugging of problems, or just for amusement when the system is slow or a
large file is being processed. It accepts a numeric argument to indicate the
verbosity for output. The levels are as follows:
See the file lib/en/man1/o_help.so. See the file lib/en/man1/o_version.so. See the file lib/en/man1/o__rules.so. See the file lib/en/man1/z_fne.so. See the file lib/en/man1/z_binary.so. See the file lib/en/man1/z_exit.so. See the file lib/en/man1/z_ref.so. See the file lib/en/man1/z_cr.so.
Visit the GSP FreeBSD Man Page Interface. |