NAME
TkCVS - a Tk/Tcl Graphical Interface to CVS and
Subversion
SYNOPSIS
tkcvs [-dir directory] [-root cvsroot]
[-win workdir|module|merge] [-log file]
DESCRIPTION
TkCVS is a Tcl/Tk-based graphical interface to the CVS and
Subversion configuration management systems. It displays the status
of the files in the current working directory, and provides buttons
and menus to execute configuration-management commands on the
selected files. Limited RCS functionality is also present. TkDiff
is bundled in for browsing and merging your changes.
TkCVS also aids in browsing the repository. For Subversion, the
repository tree is browsed like an ordinary file tree. For CVS, the
CVSROOT/modules file is read. TkCVS extends CVS with a method to
produce a browsable, "user friendly" listing of modules. This
requires special comments in the CVSROOT/modules file. See "CVS
Modules File" for more guidance.
OPTIONS
TkCVS accepts the following options.
- -dir directory
- Start TkCVS in the specified directory.
- -help
- Print a usage message.
- -log file
- Invoke a log browser for the specified file. -log and -win are
mutually exclusive.
- -root cvsroot
- Set $CVSROOT to the specified repository.
- -win workdir|module|merge
- Start by displaying the directory browser (the default), the
module browser, or the directory-merge tool. -win and -log are
mutually exclusive.
Examples
- % tkcvs -win module -root /jaz/repository
Browse the
modules located in CVSROOT /jaz/repository
- % tkcvs -log tstheap.c
View the log of the file tstheap.c
Working Directory Browser
The working directory browser shows the files in your local
working copy, or "sandbox." It shows the status of the files at a
glance and provides tools to help with most of the common CVS, SVN,
and RCS operations you might do.
At the top of the browser you will find:
* The name of the current directory. You can change directories
by typing in this field. Recently visited directories are saved in
the picklist.
* The relative path of the current directory in the repository.
If it is not contained in the repository you may import it using
the menu or toolbar button.
* A Directory Tag name, if the directory is contained in the
repository and it has been checked out against a particular branch
or tag. In Subversion, the branch or tag is inferred from the URL
based on the conventional trunk-branches-tags repository
organization.
* The CVSROOT of the current directory if it's under CVS
control, or the URL of the Subversion repository if it's under
Subversion control. If neither is true, it may default to the value
of the $CVSROOT environment variable.
The main part of the working directory browser is a list of the
files in the current directory with an icon next to each showing
its status. You select a file by clicking on its name or icon once
with the left mouse button. Holding the Control key while clicking
will add the file to the group of those already selected. You can
select a contiguous group of files by holding the Shift key while
clicking. You can also select a group of files by dragging the
mouse with the middle or right button pressed to select an area.
Selecting an item that's already selected de-selects that item. To
unselect all files, click the left mouse button in an empty area of
the file list.
* The Date column (can be hidden) shows the modification time of
the file is shown. The format of the date column may be specified
with cvscfg(dateformat). The default format was chosen because it
sorts the same way alphabetically as chronologically.
If the directory belongs to a revision system, other columns are
present.
* The revision column shows which revision of the file is
checked out, and whether it's on the trunk or on a branch.
* The status column (can be hidden) shows the revision of the
file spelled out in text. This information is mostly redundant to
the icon in the file column.
* The Editor/Author/Locker column (can be hidden) varies
according to revision system. In Subversion, the author of the most
recent checkin is shown. In CVS, it shows a list of people editing
the files if your site uses "cvs watch" and/or "cvs edit".
Otherwise, it will be empty. In RCS, it shows who, if anyone, has
the file locked.
The optional columns can be displayed or hidden using the
Options menu.
You can move into a directory by double-clicking on it.
Double clicking on a file will load the file into a suitable
editor so you can change it. A different editor can be used for
different file types (see Configuration Files).
File Status
When you are in a directory that is under CVS or Subversion
control, the file status will be shown by an icon next to each
file. Checking the "Status Column" option causes the status to be
displayed in text in its own column. Some possible statuses are:
- Up-to-date
- The file is up to date with respect to the repository.
- Locally Modified
- The file has been modified in the current directory since being
checked out of the repository.
- Locally Added
- The file has been added to the repository. This file will
become permanent in the repository once a commit is made.
- Locally Removed
- You have removed the file with remove, and not yet committed
your changes.
- Needs Checkout
- Someone else has committed a newer revision to the repository.
The name is slightly misleading; you will ordinarily use update
rather than checkout to get that newer revision.
- Needs Patch
- Like Needs Checkout, but the CVS server will send a patch
rather than the entire file. Sending a patch or sending an entire
file accomplishes the same thing.
- Needs Merge
- Someone else has committed a newer revision to the repository,
and you have also made modifications to the file.
- Unresolved Conflict
- This is like Locally Modified, except that a previous update
command gave a conflict. You need to resolve the conflict before
checking in.
- ?
- The file is not contained in the repository. You may need to
add the file to the repository by pressing the "Add" button.
- [directory:CVS]
- A directory which has been checked out from a CVS repository.
- [directory:SVN]
- The file is a directory which has been checked out from a
Subversion repository. In Subversion, directories are themselves
versioned objects.
- [directory:RCS]
- A directory which contains an RCS sub-directory or some files
with the ,v suffix, presumably containing some files that are under
RCS revision control.
- [directory]
- The file is a directory.
File Filters
You can specify file matching patterns to instruct TkCVS which
files you wish to see. You can also specify patterns telling it
which files to remove when you press the "Clean" button or select
the File->Cleanup menu item.
"Hide" works exactly the way a .cvsignore file works. That is,
it causes non-CVS files with the pattern to be ignored. It's meant
for hiding .o files and such. Any file under CVS control will be
listed anyway.
"Show" is the inverse. It hides non-CVS files except for those
with the pattern.
Buttons
- Module Browser:
- The big button at the upper right opens the module browser.
Opens a module browser window which will enable you to explore
items in the repository even if they're not checked out. In CVS,
this requires that there be entries in the CVSROOT/modules file.
Browsing can be improved by using TkCVS-specific comments in
CVSROOT/modules.
- Go Up:
- The button to the left of the entry that shows the current
directory. Press it and you go up one level.
There are a number of buttons at the bottom of the window.
Pressing on one of these causes the following actions:
- Delete:
- Press this button to delete the selected files. The files will
not be removed from the repository. To remove the files from the
repository as well as delete them, press the "Remove" button
instead.
- Edit:
- Press this button to load the selected files in to an
appropriate editor.
- View:
- Press this button to view the selected files in a Tk text
window. This can be a lot faster then Edit, in case your preferred
editor is xemacs or something of that magnitude.
- Refresh:
- Press this button to re-read the current directory, in case the
status of some files may have changed.
- Status Check:
- Shows, in a searchable text window, the status of all the
files. By default, it is recursive and lists unknown (?) files.
These can be changed in the Options menu.
- Directory Branch Browse:
- For merging the entire directory. In Subversion, it opens the
Branch Browser for "." In CVS, it chooses a "representative" file
in the current directory and opens a graphical tool for directory
merges.
- Log (Branch) Browse:
- This button will bring up the log browser window for each of
the selected files in the window. See the Log Browser section.
- Annotate:
- This displays a window in which the selected file is shown with
the lines highlighted according to when and by whom they were last
revised. In Subversion, it's also called "blame."
- Diff:
- This compares the selected files with the equivalent files in
the repository. A separate program called "TkDiff" (also supplied
with TkCVS) is used to do this. For more information on TkDiff, see
TkDiff's help menu.
- Merge Conflict:
- If a file's status says "Needs Merge", "Conflict", or is marked
with a "C" in CVS Check, there was a difference which CVS needs
help to reconcile. This button invokes TkDiff with the -conflict
option, opening a merge window to help you merge the differences.
- Check In:
- This button commits your changes to the repository. This
includes adding new files and removing deleted files. When you
press this button, a dialog will appear asking you for the version
number of the files you want to commit, and a comment. You need
only enter a version number if you want to bring the files in the
repository up to the next major version number. For example, if a
file is version 1.10, and you do not enter a version number, it
will be checked in as version 1.11. If you enter the version number
3, then it will be checked in as version 3.0 instead. It is usually
better to use symbolic tags for that purpose. If you use rcsinfo to
supply a template for the comment, you must use an external editor.
Set cvscfg(use_cvseditor) to do this. For checking in to RCS, an
externel editor is always used.
- Update:
- This updates your sandbox directory with any changes committed
to the repository by other developers.
- Update with Options:
- Allows you to update from a different branch, with a tag, with
empty directories, and so on.
- Add Files:
- Press this button when you want to add new files to the
repository. You must create the file before adding it to the
repository. To add some files, select them and press the Add Files
button. The files that you have added to the repository will be
committed next time you press the Check In button. It is not
recursive. Use the menu CVS -> Add Recursively for that.
- Remove Files:
- This button will remove files. To remove files, select them and
press the Remove button. The files will disappear from the
directory, and will be removed from the repository next time you
press the Check In button. It is not recursive. Use the menu CVS
-> Remove Recursively for that.
- Tag:
- This button will tag the selected files. In CVS, the -F (force)
option will move the tag if it already exists on the file.
- Branch Tag:
- This button will tag the selected files, creating a branch. In
CVS, the -F (force) option will move the tag if it already exists
on the file.
- Lock (CVS and RCS):
- Lock an RCS file for editing. If cvscfg(cvslock) is set, lock a
CVS file. Use of locking is philosophically discouraged in CVS
since it's against the "concurrent" part of Concurrent Versioning
System, but locking policy is nevertheless used at some sites. One
size doesn't fit all.
- Unlock (CVS and RCS):
- Unlock an RCS file. If cvscfg(cvslock) is set, unlock a CVS
file.
- Set Edit Flag (CVS):
- This button sets the edit flag on the selected files, enabling
other developers to see that you are currently editing those files
(See "cvs edit" in the CVS documentation).
- Reset Edit Flag (CVS):
- This button resets the edit flag on the selected files,
enabling other developers to see that you are no longer editing
those files (See "cvs edit" in the CVS documentation). As the
current version of cvs waits on a prompt for "cvs unedit" if
changes have been made to the file in question (to ask if you want
to revert the changes to the current revision), the current action
of tkcvs is to abort the unedit (by piping in nothing to stdin).
Therefore, to lose the changes and revert to the current revision,
it is necessary to delete the file and do an update (this will also
clear the edit flag). To keep the changes, make a copy of the file,
delete the original, update, and then move the saved copy back to
the original filename.
- Close:
- Press this button to close the Working Directory Browser. If no
other windows are open, TkCVS exits.
Log (Branch) Browser
The TkCVS Log Browser window enables you to view a graphical
display of the revision log of a file, including all previous
versions and any branched versions.
You can get to the log browser window in three ways, either by
invoking it directly with "tkcvs [-log] <filename>", by
selecting a file within the main window of TkCVS and pressing the
Log Browse button, or by selecting a file in a list invoked from
the module browser and pressing the Log Browse button.
If the Log Browser is examining a checked-out file, the buttons
for performing merge operations are enabled.
Log Browser Window
The log browser window has three components. These are the file
name and version information section at the top, the log display in
the middle, and a row of buttons along the bottom.
Log Display
The main log display is fairly self explanatory. It shows a
group of boxes connected by lines indicating the main trunk of the
file development (on the left hand side) and any branches that the
file has (which spread out to the right of the main trunk).
Each box contains the version number, author of the version, and
other information determined by the menu View -> Revision
Layout.
Constructing the branch diagram from Subversion is inefficient,
so the Log Browser counts the tags when doing a Subversion diagram
and pops up a dialog giving you a chance to skip the tag step if
there are too many tags (where "many" arbitrarily equals 10.)
Version Numbers
Once a file is loaded into the log browser, one or two version
numbers may be selected. The primary version (Selection A) is
selected by clicking the left mouse button on a version box in the
main log display.
The secondary version (Selection B) is selected by clicking the
right mouse button on a version box in the main log display.
Operations such as "View" and "Annotate" operate only on the
primary version selected.
Operations such as "Diff" and "Merge Changes to Current" require
two versions to be selected.
Log Browser Buttons
The log browser contains the following buttons:
- Refresh:
- Re-reads the revision history of the file.
- View:
- Pressing this button displays a Tk text window containing the
version of the file at Selection A.
- Annotate:
- This displays a window in which the file is shown with its
lines highlighted according to when and by whom they were last
revised. In Subversion, it's also called "blame."
- Diff:
- Pressing this button runs the "tkdiff" program to display the
differences between version A and version B.
- Merge:
- To use this button, select a branch version of the file, other
than the branch you are currently on, as the primary version
(Selection A). The changes made along the branch up to that version
will be merged into the current version, and stored in the current
directory. Optionally, select another version (Selection B) and the
changes will be from that point rather than from the base of the
branch. The version of the file in the current directory will be
merged, but no commit will occur. Then you inspect the merged
files, correct any conflicts which may occur, and commit when you
are satisfied. Optionally, TkCVS will tag the version that the
merge is from. It suggests a tag of the form
"mergefrom_<rev>_date." If you use this auto-tagging
function, another dialog containing a suggested tag for the
merged-to version will appear. It's suggested to leave the dialog
up until you are finished, then copy-and-paste the suggested tag
into the "Tag" dialog. It is always a good practice to tag when
doing merges, and if you use tags of the suggested form, the Branch
Browser can diagram them. (Auto-tagging is not implemented in
Subversion because, despite the fact that tags are "cheap," it's
somewhat impractical to auto-tag single files. You can do the
tagging manually, however.)
- View Tags:
- This button lists all the tags applied to the file in a
searchable text window.
- Close:
- This button closes the Log Browser. If no other windows are
open, TkCVS exits.
The View Options Menu
The View Menu allows you to control
what you see in the branch diagram. You can choose how much
information to show in the boxes, whether to show empty revisions,
and whether to show tags. You can even control the size of the
boxes. If you are using Subversion, you may wish to turn the
display of tags off. If they aren't asked for they won't be read
from the repository, which can save a lot of time.
Merge Tool for CVS
The Merge Tool chooses a "representative" file in the current
directory and diagrams the branch tags. It tries to pick the
"bushiest" file, or failing that, the most-revised file. If you
disagree with its choice, you can type the name of another file in
the top entry and press Return to diagram that file instead.
The main purpose of this tool is to do merges (cvs update -j rev
[-j rev]) on the whole directory. For merging one file at a time,
you should use the Log Browser. You can only merge to the line
(trunk or branch) that you are currently on. Select a branch to
merge from by clicking on it. Then press either the "Merge" or
"Merge Changes" button. The version of the file in the current
directory will be over-written, but it will not be committed to the
repository. You do that after you've reconciled conflicts and
decided if it's what you really want.
- Merge Branch to Current:
- The changes made on the branch since its beginning will be
merged into the current version.
- Merge Changes to Current:
- Instead of merging from the base of the branch, this button
merges the changes that were made since a particular version on the
branch. It pops up a dialog in which you fill in the version. It
should usually be the version that was last merged.
Module Browser
Operations that are performed on the repository instead of in a
checked-out working directory are done with the Module Browser. The
most common of these operations is checking out or exporting from
the repository. The Module Browser can be started from the command
line (tkcvs -win module) or started from the main window by
pressing the big button.
Subversion repositories can be browsed like a file tree, and
that is what you will see in the Module Browser. CVS repositories
aren't directly browsable, but if the CVSROOT/modules file is
maintained appropriately, TkCVS can display the modules and infer
tree structures if they are present. See the "CVS Modules File"
section.
Using the module browser window, you can select a module to
check out. When you check out a module, a new directory is created
in the current working directory with the same name as the module.
Tagging and Branching (cvs rtag)
You can tag particular versions of a module or file in the
repository, with plain or branch tags, without having the module
checked out.
Exporting
Once a software release has been tagged, you can use a special
type of checkout called an export. This allows you to cleanly check
out files from the repository, without all of the administrivia
that CVS needs to have while working on the files. It is useful for
delivery of a software release to a customer.
Importing
TkCVS contains a special dialog to allow users to import new
files into the repository. In CVS, new modules can be assigned
places within the repository, as well as descriptive names (so that
other people know what they are for).
When the Module Browser displays a CVS repository, the first
column is a tree showing the module codes and directory names of
all of the items in the repository. The icon shows whether the item
is a directory (which may contain other directories or modules), or
whether it is a module (which may be checked out from TkCVS). It is
possible for an item to be both a module and a directory. If it has
a red ball on it, you can check it out. If it shows a plain folder
icon, you have to open the folder to get to the items that you can
check out.
To select a module, click on it with the left mouse button. The
right mouse button will perform a secondary selection, which is
used only for Subversion diff and patch. To clear the selection,
click on the item again or click in an empty area of the module
column. There can only be one primary and one secondary selection.
Repository Browser Buttons
The module browser contains the following buttons:
- Who:
- Shows which modules are checked out by whom.
- Import:
- This item will import the contents of the current directory
(the one shown in the Working Directory Display) into the
repository as a module. See the section titled Importing for more
repository as a module. See the section titled Importing for more
information.
- File Browse:
- Displays a list of the selected module's files. From the file
list, you can view the file, browse its revision history, or see a
list of its tags.
- Check Out:
- Checks out the current version of a module. A dialog allows you
to specify a tag, change the destination, and so on.
- Export:
- Exports the current version of a module. A dialog allows you to
specify a tag, change the destination, and so on. Export is similar
to check-out, except exported directories do not contain the CVS or
administrative directories, and are therefore cleaner (but cannot
be used for checking files back in to the repository). You must
supply a tag name when you are exporting a module to make sure you
can reproduce the exported files at a later date.
- Tag:
- This button tags an entire module.
- Branch Tag:
- This creates a branch of a module by giving it a branch tag.
- Patch Summary:
- This item displays a short summary of the differences between
two versions of a module.
- Create Patch File:
- This item creates a Larry Wall format patch(1) file
of the module selected.
- Close:
- This button closes the Repository Browser. If no other windows
are open, TkCVS exits.
Importing New Modules
Before importing a new module, first check to make sure that you
have write permission to the repository. Also you'll have to make
sure the module name is not already in use.
To import a module you first need a directory where the module
is located. Make sure that there is nothing in this directory
except the files that you want to import.
Press the big "Repository Browser" button in the top part of the
tkcvs UI, or use CVS -> Import WD into Repository from the menu
bar.
In the module browser, press the Import button on the bottom,
the one that shows a folder and an up arrow.
In the dialog that pops up, fill in a descriptive title for the
In the dialog that pops up, fill in a descriptive title for the
module. This will be what you see in the right side of the module
browser.
OK the dialog. Several things happen now. The directory is
imported, the CVSROOT/module file is updated, your original
directory is saved as directory.orig, and the newly created module
is checked out.
When it finishes, you should find the original Working Directory
Browser showing the files in the newly created, checked out module.
Here is a more detailed description of the fields in the Import
Dialog.
- Module Name:
- A name for the module. This name must not already exist in the
repository. Your organization could settle on a single unambiguous
code for modules. One possibility is something like:
-
[project code]-[subsystem code]-[module code]
- Module Path:
- The location in the repository tree where your new module will
go.
- Descriptive Title:
- A one-line descriptive title for your module. This will be
- A one-line descriptive title for your module. This will be
displayed in the right-hand column of the browser.
- Version Number:
- The current version number of the module. This should be a
number of the form X.Y.Z where .Y and .Z are optional. You can
leave this blank, in which case 1 will be used as the first version
number.
Importing a directory into Subversion is similar but not so
complicated. You use the SVN -> Import CWD into Repository menu.
You need supply only the path in the repository where you want the
directory to go. The repository must be prepared and the path must
exist, however.
Importing to an Existing Module (CVS)
Before importing to an existing module, first check to make sure
that you have write permission to the repository.
To import to an existing module you first need a directory where
the code is located. Make sure that there is nothing in this
directory (including no CVS directory) except the files that you
want to import.
Open up the Repository Browser by selecting File/Browse Modules
from the menu bar.
In the Repository Browser, select File/Import To An Existing
Module from the menu bar.
In the dialog that pops up, press the Browse button and select
the name of an existing module. Press the OK to close this dialog
box. Enter the version number of the code to be imported.
OK the dialog. Several things happen now. The directory is
imported, your original directory is saved as directory.orig, and
the newly created module is checked out.
When it finishes, you will find the original Working Directory
Browser showing the original code. If you press the "Re-read the
current directory" button you will see the results of the checked
out code.
Here is a more detailed description of the fields in the Import
Dialog.
- Module Name:
- A name for the existing module. Filled in by the use of the the
Browse button
- Module Path:
- The location in the repository tree where the existing module
is. Filled in by the use of the Browse button.
- Version Number:
- The current version number of the module to be imported. This
should be a number of the form X.Y.Z where .Y and .Z are optional.
You can leave this blank, in which case 1 will be used as the first
version number.
Vendor Merge (CVS)
Software development is sometimes based on source distribution
from a vendor or third-party distributor. After building a local
version of this distribution, merging or tracking the vendor's
future release into the local version of the distribution can be
done with the vendor merge command.
The vendor merge command assumes that a separate module has
already been defined for the vendor or third-party distribution
with the use of the "Import To A New Module" and "Import To An
Existing Module" commands. It also assumes that a separate module
has already been defined for the local code for which the vendor
merge operation is to be applied to.
Start from an empty directory and invoke tkcvs. Open up the
Repository Browser by selecting File/Browse Modules from the menu
bar.
Checkout the module of the local code to be merged with changes
from the vendor module. (Use the red icon with the down arrow)
In the Repository Browser, after verifying that the Module entry
box still has the name the module of the local code to which the
vendor code is to be merged into, select File/Vendor Merge from the
menu bar.
In the Module Level Merge With Vendor Code window, press the
Browse button to select the module to be used as the vendor module.
OK the dialog. All revisions from the vendor module will be
shown in the two scroll lists. Fill in the From and To entry boxes
by clicking in the appropriate scroll lists. Ok the dialog. Several
things happens now. Several screens will appear showing the output
from cvs commands for (1)checking out temp files, (2)cvs merge, and
(3)cvs rdiff. Information in these screens will tell you what
routines will have merge conflicts and what files are new or
deleted. After perusing the files, close each screen. .TP (In
the preceeding dialog box, there was an option to save outputs from
the merge and rdiff operations to files CVSmerge.out and
CVSrdiff.out.)
The checked out local code will now contain changes from a merge
between two revisions of the vendor modules. This code will not be
checked into the repository. You can do that after you've
reconciled conflicts and decide if that is what you really want.
A detailed example on how to use the vendor merge operation is
provided in the PDF file vendor5readme.pdf.
Configuration Files
There are two configuration files for TkCVS. The first is stored
in the directory in which the *.tcl files for TkCVS are installed.
This is called tkcvs_def.tcl. You can put a file called site_def in
that directory, too. That's a good place for site-specific things
like tagcolours. Unlike tkcvs_def.tcl, it will not be overwritten
when you install a newer version of TkCVS.
Values in the site configuration files can be over-ridden at the
user level by placing a .tkcvs file in your home directory.
Commands in either of these files should use Tcl syntax. In other
words, to set a variable name, you should have the following
command in your .tkcvs file:
-
set variablename value
for example:
-
set cvscfg(editor) "gvim"
The following variables are supported by TkCVS:
Startup
- cvscfg(startwindow)
- Which window you want to see on startup. (workdir or module)
- cvscfg(cvsroot)
- If set, it overrides the CVSROOT environment
variable.
GUI
Most colors and fonts can be customized by using the options
database. For example, you can add lines like these to your .tkcvs
file:
-
option add *Canvas.background #c3c3c3
-
option add *Menu.background #c3c3c3
-
option add *selectColor #ffec8b
-
option add *Text.background gray92
-
option add *Entry.background gray92
-
option add *Listbox.background gray92
-
option add *ToolTip.background LightGoldenrod1
-
option add *ToolTip.foreground black
- cvscfg(picklist_items)
- Maximum number of visited directories and repositories to save
in the picklist history
Log browser
- cvscfg(colourA) cvscfg(colourB)
- Hilight colours for revision-log boxes
- cvscfg(tagdepth)
- Number of tags you want to see for each revision on the
branching diagram before it says "more..." and offers a pop-up to
show the rest
- cvscfg(toomany_tags)
- Number of tags in a Subversion repository that's "too many",
ie. will take longer to proecess for the branch diagram than you're
willing to wait. (Building a branch diagram for Subversion is very
inefficient.) If there are more than that number and
cvscfg(confirm_prompt) is true, a dialog will appear asking whether
to process the tags or to draw the diagram without them.
- cvscfg(tagcolour,tagstring)
- Colors for marking tags. For example:
-
set cvscfg(tagcolour,tkcvs_r6) Purple
Module browser
- cvscfg(aliasfolder)
- In the CVS module browser, if true this will cause the alias
modules to be grouped in one folder. Cleans up clutter if there are
a lot of aliases.
User preferences
- cvscfg(allfiles)
- Set this to false to see normal files only in the directory
browser. Set it to true to see all files including hidden files.
- cvscfg(auto_status)
- Set the default for automatic status-refresh of a CVS
controlled directory. Automatic updates are done when a directory
is entered and after some operations.
- cvscfg(auto_tag)
- Whether to tag the merged-from revision when using TkCVS to
merge different revisions of files by default. A dialog still lets
you change your mind, regardless of the default.
- cvscfg(confirm_prompt)
- Ask for confirmation before performing an operation(true or
false)
- cvscfg(dateformat)
- Format for the date string shown in the "Date" column, for
example "%Y/%m/%d %H:%M"
- cvscfg(cvslock)
- Set to true to turn on the ability to use cvs-admin locking
from the GUI.
- cvscfg(econtrol)
- Set this to true to turn on the ability to use CVS Edit and
Unedit, if your site is configured to allow the feature.
- cvscfg(editor)
- Preferred default editor
- cvscfg(editors)
- String pairs giving the editor-command and
string-match-pattern, for deciding which editor to use
- cvscfg(editorargs)
- Command-line arguments to send to the default editing program.
- cvscfg(ldetail)
- Detail level for status reports (latest, summary, verbose)
- cvscfg(mergetoformat)
- cvscfg(mergefromformat)
- Format for mergeto- and mergefrom- tags. The _BRANCH_ part must
be left as-is, but you can change the prefix and the date format,
for example "mergeto_BRANCH_%d%b%y". The date format must be the
same for both. CVS rule: a tag must not contain the characters
`$,.:;@'
- cvscfg(rdetail)
- Detail for repository and workdir reports (terse, summary,
verbose)
- cvscfg(recurse)
- Whether reports are recursive (true or false)
- cvscfg(savelines)
- How many lines to keep in the trace window
- cvscfg(status_filter)
- Filter out unknown files (status "?") from CVS Check and CVS
Update reports.
- cvscfg(use_cvseditor)
- Let CVS invoke an editor for commit log messages rather than
having tkcvs use its own input box. By doing this, your site's
commit template (rcsinfo) can be used.
File filters
- cvscfg(file_filter)
- Pattern for which files to list. Empty string is equivalent to
the entire directory (minus hidden files)
- cvscfg(ignore_file_filter)
- Pattern used in the workdir filter for files to be ignored
- cvscfg(clean_these)
- Pattern to be used for cleaning a directory (removing unwanted
files)
System
- cvscfg(print_cmd)
- System command used for printing. lpr, enscript -Ghr, etc)
- cvscfg(shell)
- What you want to happen when you ask for a shell
- cvscfg(terminal)
- Command prefix to use to run something in a terminal
window
Portability
- cvscfg(aster)
- File mask for all files (* for Unix, *.* for windows)
- cvscfg(null)
- The null device. /dev/null for Unix, nul for windows
- cvscfg(tkdiff)
- How to start tkdiff. Example sh /usr/local/bin/tkdiff
- cvscfg(tmpdir)
- Directory in which to do behind-the-scenes checkouts. Usually
/tmp or /var/tmp)
Debugging
- cvscfg(log_classes)
- For debugging: C=CVS commands, E=CVS stderr output, F=File
creation/deletion, T=Function entry/exit tracing, D=Debugging
- cvscfg(logging)
- Logging (debugging) on or off
Environment Variables
You should have the CVSROOT environment variable pointing to the
location of your CVS repository before you run TkCVS. It will still
allow you to work with different repositories within the same
session.
If you wish TkCVS to point to a Subversion repository by
default, you can set the environment variable SVNROOT. This has no
meaning to Subversion itself, but it will clue TkCVS if it's
started in an un-versioned directory.
User Configurable Menu Extensions
It is possible to extend the TkCVS menu by inserting additional
commands into the .tkcvs or tkcvs_def.tcl files. These extensions
appear on an extra menu to the right of the TkCVS Options menu.
To create new menu entries on the user-defined menu, set the
following variables:
cvsmenu(command)
Setting a variable with this name to a value like "commandname"
causes the CVS command "cvs commandname" to be run when this menu
option is selected. For example, the following line:
-
set cvsmenu(update_A) "update -A"
Causes a new menu option titled "update_A" to be added to the
Causes a new menu option titled "update_A" to be added to the
user defined menu that will run the command "cvs update -A" on the
selected files when it is activated.
(This example command, for versions of CVS later than 1.3, will
force an update to the head version of a file, ignoring any sticky
tags or versions attached to the file).
usermenu(command)
Setting a variable with this name to a value like "commandname"
causes the command "commandname" to be run when this menu option is
selected. For example, the following line:
-
set usermenu(view) "cat"
Causes a new menu option titled "view" to be added to the User
Causes a new menu option titled "view" to be added to the User
defined menu that will run the command "cat" on the selected files
when it is activated.
Any user-defined commands will be passed a list of file names
corresponding to the files selected on the directory listing on the
main menu as arguments.
The output of the user defined commands will be displayed in a
window when the command is finished.
CVS Modules File
If you haven't put anything in your CVSROOT/modules file, please
do so. See the "Administrative Files" section of the CVS manual.
Then, you can add comments which TkCVS can use to title the modules
Then, you can add comments which TkCVS can use to title the modules
and to display them in a tree structure.
The simplest use of TkCVS's "#D" directive is to display a
meaningful title for the module:
meaningful title for the module:
- #D softproj Software Development Projects
- softproj softproj
A fancier use is to organize the modules into a tree which will
mimic their directory nesting in the repository when they appear in
the module browser. For example, suppose we have a directory called
"chocolate" which is organized like this:
- chocolate/
-
truffle/
-
cocoa3/
-
biter/
-
sniffer/
-
snuffler/
To display its hierarchy, as well as make the deepest
directories more accessible by giving them module names, we could
put this in the modules file:
-
#D chocolate Top
Chocolate
-
#D chocolate/truffle Cocoa
Level 2
-
#D chocolate/truffle/cocoa3
Cocoa Level
3
-
#D sniffer Chocolate
Sniffer
-
sniffer chocolate/truffle/cocoa3/sniffer
-
#D snuff Chocolate
Snuffler
-
snuff chocolate/truffle/cocoa3/snuffler
-
#D biter Chocolate
Biter
-
biter chocolate/truffle/cocoa3/biter
When you are installing TkCVS, you may like to add these
additional lines to the modules file (remember to check out the
modules module from the repository, and then commit it again when
you have finished the edits).
These extension lines commence with a "#" character, so CVS
interprets them as comments. They can be safely left in the file
whether you are using TkCVS or not.
"#M" is equivalent to "#D". The two had different functions in
previous versions of TkCVS, but now both are parsed the same way.
SEE ALSO
cvs(1), svn(1)
AUTHOR
Del (del@babel.babel.com.au):
Maintenance and Subversion support: Dorothy Robinson