CvsGraph
A CVS/RCS repository grapher
Old changes:
Changes for 1.6.0
- Fix all numeric author ID
- Changed acceptable mail policy. See below in this file
- Fix incomplete parsing of access keyword in rcsfile
- Fix missing branch_bgcolor in manpage
- Fix author names with spaces but not in @ encapsulation
- Added multiple merge_{from,to,color} matching. Now several regex
combinations are allowed to run concurrently.
- Added dynamic colors and strings for more flexibility in visual
representations of the tree.
- Added keyword rev_idtext to define the revision ID in a revision
box. Normally this would show the revision number, but can now be
changed dynamically.
- Fix dashed lines when stripped revisions have mergepoints attatched
Changes for 1.5.2
- Fix POSIX compliance in timezone handling. Only putenv() is used now.
- Fix branch-count when branches get folded.
- Fix configure script to detect gd-2 problems (Thanks to Russell Yanofsky)
- Work around CVSNT wrong keyword ordering breaking rcsfile(5) ordering
- Fix complaining about a new CVSNT keyword properties
- Fix mergepoint1 syntax used by CVSNT allowing revision numbers as argument
- Fix merge lines to untagged revisions when strip_untagged is active
Changes for 1.5.1
- Added patch from Henrik Carlqvist
- added option rev_hidenumber for disabling revision number display.
- added option tag_ignore_merge for disabling merge_from/merge_to display if
matched with tag_ignore.
- added resorting of branches on how many revisions they have. This saves
space under circumstances.
- Added option merge_findall so that merge_from/merge_to tags can have multiple
matches.
- Added the patches supplied by Ville Skyttä
- fixed spelling in the manpages and config file
- fixed & -> & problem in config
- fixed generics in wrapper example
- Added a fix for the zimezone problem as suggested by Henrik Carlqvist by
using the environment.
- Fixed a bug in the detection of branch-numbers in the logical ,v file
structure (reported by Daniel Dumitrache). The branch was deduced from the
revision, but that would fail for revision numbers that are like magic
branch-numbers (x.x.0.x) because they were interpreted. These revision numbers
are now correctly handled.
- Added patch from Gordon Hollingworth to use mergepoints as implemented by
CVSNT. Adapted the patch to enable both tag-detected merges and mergepoints to
be shows at the same time.
- Changed the warning behaviour so that known CVS/CVSNT extension phrases
don't generate warning messages that mess up the generated image.
- Implemented selection of png compression level with image_compress and enable
interlacing (progressive load) for both png and jpeg images with image_interlace.
Changes for 1.5.0
- Add regex method for ignoring tags in the generation of the graph. Old
trees are overpolulated and this is a way to reduce it even further. New config
options tag_ignore, tag_nocase and tag_negate.
- Added drawing of partial trees. You now can select a subtree based on a
revision number, branch number or symbolic tag to show only that part of the
tree. New config option branch_subtree selects which part is shown. If the
subtree is empty, then the whole tree is shown.
- Most error and warning messages are now displayed in the graph, instead of
being written to stderr. This enables you to see an image eventhough errors
might be present. The old method would generate a corrupt image. New
configuration options include msg_color and msg_font to control the looks of
it. Messages are always printed at the bottom of the image.
- Fixed a bug in the folding code where subtrees would not fold correctly.
- Added diff links in the map-generation for detected merges so that you can
get the differences in merge-operations. The options map_merge_href and
map_merge_alt must be set accordingly.
Changes for 1.4.1
- 19-Jul-2004: Fixed the version number to be 1.4.1
- Fix a longstanding date-bug in showing local time. Now timezone is
accounted for.
- Fix the CVSNT habbit of adding info to the tag in symbols. The trailing
data is skipped for now. I might use it later on; it contains a date and
comments on tags.
- Fix the author recognition for CVSNT with broken rcsfile(5) format. This
might not be a total remedy, but should fix some.
- Fix XHTML <br> to be <br /> and add HTML-izing '&' to
& and '"' to "
- Fix execution flags of regexec().
- Fix the sizeof(void *) vs sizeof(int) problem. Now look for int, long and
long long in configure.
- Add the arrow patch and adapted to be more configurable.
- Fix manual page typo. Documentation and other aesthetic related fixes.
Changes for 1.4.0
- Fix warnings in readconf on some 'older' compiler systems.
- Implement new option to generate proper maps for different levels of HTML.
The option -x[34x] determines HTML 3.x (default), HTML 4.x or XHTML style maps.
- Implement a scheme to visualize merges based on tag names. If tags are
consistently named at the mergepoint and the destination, then these points can
be detected using regular expressions. Several new configuration options,
merge_*, describe the tags. Thanks to Andy Wood for sending me an inspiring
patch, testing and discussions.
- Implemented HTMLizing of expansion with %(...%). This prevents a possible
cross site scripting exploit when you use '<', '>' or '"' in tagnames.
This is a remote chance (you must be stupid to use these characters in a
tagname) but anyway, your system can be under attack.
- Fixed backing up in the lexer. This improves speed slightly because no rule
requires lookahead over one character anymore.
- Fixed a bug in the initial placing of left to right displaying.
- Half-fixed a bug in the kerning code, where a loop-safeguard was triggered
way too soon (at 100 iterations). This has now been changed to 10000, but
should be dependent on the number of drawable branches, as the function is at
least order O(N^2). However, more analysis is required to ensure safe guarding
under all circumstances.
- Implemented folding of empty branches. Many uses of CVS create many
branches on the same revision but have no commits on them. This occurs often
with stable files like .cvsignore files and the like. A new configuration
option branch_fold enables imaging consequtive brances with no commits in the
same branch-box. This reduces images by a huge factor (28000x1700 ->
2100x2300, i.e. a factor of 10). It also speeds up drawing considerably. The
branch_fold option is on by default.
- Fix duplicate branch-boxes (branch_dupbox=true). No duplicates should be
created if there are no commits on a specific branch. There is no reason for
having two boxes on top of each other.
- Implement folding for all branches on the same branchpoint if empty. New
option branch_foldall controls this behavior. See cvsgraph.conf(5) for details.
The imagemap is configured to map all branches within the box.
Changes for 1.3.0
- Implement a workaround for browsers that do not understand unordered
y-coordinates in the imagemap when generated upside down.
- Fix the slowness of CvsGraph when parsing very large (typically -kb files) by
bypassing the parsing of the actual deltatext. On my machine (K6-2/500/256M
it makes a difference of 7.5s vs 0.04s on a 93MByte file, without counting
disk-overhead; with disk-overhead it takes 12.5s). Downside is that the
logentry cannot be expanded if the file is not parsed in full (see below).
Use option parse_logs to enable log-expansions.
- Implemented logentry expansions using %l and %L. You must enable full parsing
(option parse_logs) for this to work.
- Fixed a possible buffer overflow in the string expansion. However, this is a
very low-risk overflow, since it will trash the heap and _not_ the stack.
Furthermore, you need to pass strings from CGI directly to cvsgraph without
any checks to come even close to trash the heap.
- Fixed a segfault on IRIX in the bsearch calls. These lookups could be called
with a NULL pointer and IRIX's libc doesn't like that.
- Implement left to right and right to left images. The entire tree can now be
drawn horizontally when option left_right is set. Using both left_right and
upside_down results in right to left images.
- Implement limits on how many tags are printed in a revision box using new
config parameter rev_maxtags. Ellipsis (...) are printed if the limit becomes
active.
- Changed the configure script to handle libraries more intelligently. This
should be able to handle static libraries better.
Changes for 1.2.0
- The entire tree can now be drawn upside-down. This is usefull if you have
many revisions in a trunk and want to see the latest first. The configuration
includes an option 'upside_down' with a boolean argument. You can override the
default value on the command-line with the '-u' switch, which will negate the
configured value. The imagemap generation also supports this, so you will
still be able to point and shoot on and between the revisions.
- You can now instruct CvsGraph to ommit all revisions that are not tagged.
This is highly usefull for very large trees/trunks to reduce the produced image
size. Note that the first and the last revision in a trunk are not hidden. A
new configuration option 'strip_untagged' with boolean argument enables this
feature. Alternatively, the command-line provides option '-s' wich negates the
value set in the configuration file. You can also strip the first revision if
it is untagged using '-S' and/or strip_first_rev.
- The boxes to identify the branches can now be drawn on both sides of the
trunk. Configuration option 'branch_dupbox' with boolean argument activates
this feature, which is usefull when the tree is drawn upside-down.The
command-line option '-b' negated the configured value.
- Configuration no longer requires a configuration file. All options can now
be entered on the commandline using '-O'. CvsGraph will still read the
configuration file if one is avaliable, but it is no longer an error if none is
found.
- If no file is entered on the command-line, then the input is taken from
standard input, like all decent *nix programs.
- ViewCVS (http://viewcvs.sourceforge.net) is now officially supporting the
use of CvsGraph in their code as of version 0.8. So, no bad hacks needed
anymore to get it working, and it always looks nice :-)
- Implemented string drawing using freetype interface of libgd. It looks very
nice, but it is significantly slower than gd's standard bitmap fonts. Extra
configuration parameters *_ttfont and *_ttsize set font and size. Option
use_ttf enables ttf rendering. Note that gd's bitmap fonts are used as a
fallback in case where the ttfont contains errors or is not found.
- The branch tag color and font can now be set separately using branch_tag_*
configuration options.
- It is now possible to draw the connector lines between the boxes thicker by
setting thick_lines to something else than 1. Maximum thickness is limited to
lines of 11 pixels wide.
- Transparent backgrounds can now be generated by setting transparent_bg option
to true in the configuration.
Changes for 1.1.3
- Fixed a coredump in empty string handling
- Implemeted diffs from branches to branchpoint (thanks to Ed Rapoport for the diff)
Changes for 1.1.2
- Fixed quiet mode to shut up when dead tags are encountered
- Fixed configure bug not recognizing --with-xx arguments
- Fixed manpage link to homepage
- Fixed default configuration to contain entities for < and >
- Extended the string expansion for all paths to expand to either with or without trailing '/'
- Added the php3 wrappers to the repository
- Fixed the multiple root option and files in the Attic in cvsweb.cgi (diff on homepage)
Changes for 1.1.1
- Implemented background colors
- Implemented shadows for the revision/branch box
- Implemented diff links in the imagemap
- Revisions can now have extra text, like date of commit, state and author
Changes for 1.1.0
- Major rewrite of a lot of code. CvsGraph will no longer call rlog to get the
logs of a RCS/CVS file. Instead it will read the repository file directly. This
enables the proper evaluation of the tree structure in the repository when revision
numbers are not in order
- Branches are now compacted horizontally so that a tree with many branches doesn't
take too much space
- Branches with no revisions are now shown
- Branches and revisions which are not in sequence or do not start at 1.1 are now
properly plotted
- Minor configure updates
- Implementation of imagemaps. CvsGraph can now generate html-code that allows linking
in the form of imagemaps. You can test an example on this site when browsing the CvsGraph
source
- Some configuration parameters have changed. It is now also possible to add custom
expansion string from the command-line using -[0-9]. See cvsgraph.conf for details
- The executable has become significantly larger because of table optimization in flex.
You can disable the optimization in configure with '--disable-speed'. This will slow the
execution, but reduce the size (approx. 60k vs 350k)
Changes for 1.0.1
- Fixed sorting of revisions
- Now using autoconf to detect/select old/new versions of gd
- Capability to generate png and jpeg formats
Changes for 1.0.0