source: trunk/doc/readme.txt @ 978

Last change on this file since 978 was 978, checked in by Peter Johansson, 14 years ago

refs #429. Convert copyright statements to UTF-8

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-trac-wiki
File size: 11.3 KB
[3]1$Id: readme.txt 978 2009-12-12 20:09:41Z peter $
[978]3Copyright (C) 2005 Jari Häkkinen
4Copyright (C) 2006, 2007, 2008 Jari Häkkinen, Peter Johansson
[847]5Copyright (C) 2009 Peter Johansson
[813]7This file is part of svndigest,
9svndigest is free software; you can redistribute it and/or modify it
10under the terms of the GNU General Public License as published by the
11Free Software Foundation; either version 3 of the License, or (at your
12option) any later version.
14svndigest is distributed in the hope that it will be useful, but
15WITHOUT ANY WARRANTY; without even the implied warranty of
17General Public License for more details.
19You should have received a copy of the GNU General Public License
20along with svndigest. If not, see <>.
[341]24= About svndigest =
[341]26Svndigest traverses a directory structure (controlled by subversion)
[149]27and calculates developer statistics for all subversion controlled
[187]28entries. The result is written to a sub-directory of a user
[188]29specifiable target directory (default is the current working
[341]32== Statistics ==
[149]34To understand what statistics is calculated by svndigest this
35definition is needed: The developer who made the latest change to a
[185]36line still in use in the latest revision, is considered as the
37contributor of that line regardless of who actually originally created
38that line.
[188]40For each developer svndigest calculates the number of contributed
[189]41lines in the latest (checked out) revision. Svndigest calculates for
42each revision, by checking when each line was last changed, how many
43lines each developer had contributed at that specific revision and
[341]44still are in use.
[687]46see also:
[341]48== Different linetypes ==
[524]50Svndigest parses each file to decide whether a line is ''code'',
51''comment'', or ''other''. Depending on the file name different
[341]52parsing modes are used, which means different sets of rules what is
[524]53''code'' or ''comment'' are employed. Common for all modes is that
[341]54comment blocks are identified by a start code (e.g. '/*' in a C file)
55and a stop code (e.g. '*/' in a C file). If a line contains
[505]56visible characters being outside comment blocks, the line is
[341]57considered to be ''code''. Otherwise, if the line contains
58alphanumeric characters inside a comment block, the line is considered
59to be a line of ''comment''. Otherwise the line is considered to be
[526]62From svndigest 0.7, it is possible to configure which rules are used
63for different files. For more on how to configure svndigest see
64below. If no configuration file is given or no rules are given, a set
65of default rules are used. For files named `*.h`, for example, rules
66allowing to detect comments as either `// ... \n` or `/*
67... */`. These rules can be set in the configuration file using a
[525]68one-liner like:
[524]70`*.h = "//":"\n"  ;  "/*":"*/"`
[525]72The first string (`*.h`) is a file-name-pattern describing which files
[524]73this rule will be used on. The second block, `"//":"\n"`, is the first
74rule saying one way to mark comments is to start with a ''start
75code'', `//`, and end with an ''end code'', `\n`. The start and end
76codes are surrounded by `""` and separated by `:`. Similarily, the
[525]77second block describes that comments also could come as `/* ... */`.
[526]79Sometimes it might be useful if a file could be parsed as though it
80was going under a different name. It could, for example, be useful if
81files named `` could be parsed as `Makefile` or files named
82`` could be parsed as though it was named
83``. More generally, it would be useful if files named
84`<file-name-pattern>.in` could be parsed as though it was named
85`<file-name-pattern>`. For this reason it is possible to set rules on
86how a filename should be interpreted (see section
87[file-name-dictionary] in configuration file). Default behaviour is
88that there is only one such a rule in use, namely the one described
89above that trailing `.in` in file names are discarded.
[833]92== Caching Statistics ==
94To avoid retrieving the same data repeatedly from the repository,
[959]95statistics is cached in files located in `.svndigest`. Subsequent
[833]96svndigest runs read the cache files and retrieve information from the
97repository only for the revisions that have been committed since the
98cache file was created. Obviously, it is important that the cache
99files reflect the history of the current working copy. If that is not
100the case, for example, if you have switched working copy using `svn
101switch`, you can make svndigest ignore the cache through option
[341]105== Different file types ==
[46]107There are many different types of files and for many file types it
[3]108does not make sense to define lines. Source code, documentation, and
[185]109other human readable files can be treated in single line basis whereas
110symbolic links and binary files cannot. svndigest treats binary files
[361]111and symbolic links as zero-line files. There is a possibility to
112exclude files from the statistics, the use of the property
[189]115Sometimes large test files and XML files are added to the repository
[185]116that should not really be counted in the statistics. This is solved
117with the svndigest:ignore property. Files with this property are
[187]118excluded from statistics. Setting the svndigest:ignore property to a
[185]119directory will exclude all siblings to that directory from svndigest
[711]122To set the property on file `FILE`, issue `svn propset
123svndigest:ignore "" FILE`. For more detailed information refer to
[351]126== Configuration ==
[439]128The configuration file may be used to define various behaviors for
[351]129svndigest. By default svndigest looks for a config file named `config`
130in directory `<root-dir>/.svndigest` (<root-dir> is directory set by
131option `--root`). If no such file is found, svndigest behaves as
132default. Which file to be used as config file may also be set with
133option `--config-file`. To update an old config file you can use the
134option `--generate-config`. With this option set the used
135configuration will be written to standard output. If new variables has
136been added to configuration of svndigest, these variables will be
137written with default values. Note: if you have added a comment (e.g. a
[353]138subversion keyword) to your old config file, this will not be
[351]139inherited to the new config file. To preserve such a comment you must
140merge the new config file with the old config file manually.
[970]142The color used for each author in plots and blame output can be
143configured in section [author-color] in config file. The format of the
144color string is a 6-digit hexadecimal number in which each color (red,
145green and blue) is decribed by 2 digits, i.e. each color is described
146by a value between 0 and 255 in hexadecimal format. It is also allowed
147to set the color with a 3-digit hexadecimal number in which case, for
148example, 'a5b' would be equivalent to 'aa55bb'.
[348]150== Copyright update ==
152Using the option `--copyright` svndigest will try to update the
153copyright statement in each of the parsed files. The copyright
154statement is detected as the first line containing `Copyright
155(C)`. The copyright statement block is defined to start at this line
156and ends with the first following line containing no alphanumerical
[444]157characters (excluding `prefix` string preceeding `Copyright (C)`). This
[349]158copyright statement block is replaced with a new copyright statement
159generated from analyzing `svn log`. An author is considered to have
[348]160copyright of the file if (s)he has modified the file and thereby
161occurs in the log. For an example of the format of the generated
[351]162copyright statement, please have a look at the bottom of this file. By
163default the `svn user name` of the author is printed in the copyright
164statement. This may be overridden by setting a `copyright-alias` in
165the config file. In svndigest, e.g., user name `jari` is set to
166copyright-alias ''Jari Häkkinen'' and user name `peter` is set to
167copyright-alias ''Peter Johansson''. If two (or several) authors are
168given the same copyright-alias they are considered as one person in
169the copyright statement (i.e. their alias is not repeated). This may
170be useful if you want to give copyright to an organization rather than
171to individual developers.
[352]173== TracLinks ==
175From svndigest 0.6 there is support for TracLinks. The root trac
176location may be set in the configuration, in which case various links
177to the trac site will be included in the resulting report. This
178includes links from revision number to the corresponding revision at
179the trac site, and various kinds of links are detected in the messages
180in `Recent Log`.
[341]182== Prerequisites ==
[341]184Svndigest runs against a working copy (WC), i.e., svndigest will not
185run directly against a repository. Svndigest requires that the WC is
186pristine before running the analysis, i.e., no files are allowed to be
187modified. We also recommend that the WC is in synch with the
188repository. Issue `svn update` before running svndigest.
[341]190== Flow of the program ==
[3]191The current flow of the program is.
[341]193  * Check that we are working with a WC in subversion control.
[520]195  * Build the requested directory structure ignoring not subversion
196    controlled items. During the directory structure creation a check
197    is made that the WC is up to date with the repository.
[341]199  * Walk through the directory structure and calculate statistics for
200    each entry.
[341]202  * Create the plots and HTML presentation.
[959]204= Copy Cache =
206As explained above, statistics are cached during a run and svndigest
207only communicates with the server to retrieve statistics of the
208activity since last run. Subsequent runs are much faster why it is
209prefereble to run svndigest in a wc with recent cache available.
211Sometimes it is useful to copy the cache from one wc to another, and
212an easy way to do this is to use the tool `svndigest-copy-cache`,
213which is shipped with svndigest. A common use case is when creating,
214say, a release branch from the trunk, in which case you likely will
215have two working copies to follow the two branches. If you want to run
216svndigest on both of them and you want to avoid the first expensive
217run (without cache) you can copy the cache from the trunk wc to the
218release-branch wc.
220As explained in the caching section, it is important that the cache
221reflects a revision that belong to the history of the wc. So, for
222example, when creating a branch it is crucial to copy the cache from
223the trunk wc to the new branch wc before running svndigest on trunk
224wc. Otherwise the cache will contain information about changesets that
225were committed after the new branch were forked out. This will not
226only be untrue as these changesets are not in the line of history of
227the branch, but it will also cause problems for svndigest when
228calculating the statistics of the most recent revisons and result is
229undefined due to inconsistency between the cache and the log. For an
230example of how `svndigest-copy-cache` may be used please refer to the
231ReleaseProcedure of svndigest.
233`svndigest-copy-cache` copies the cache file from `ROOT` tree to the
234corresponding directory in `TARGET` tree. The tree structure of the
235two working copies must be identical because `svndigest-copy-cache`
236will not create any directories in `TARGET` tree except that
237`.svndigest` directories are created when necessary.
239Also, `svndigest-copy-cache` is ignorant about svn wc and will parse
240through `ROOT` directory and all its sub-directories ,looking for
241svndigest cache files, regardless whether they belong to the same svn
242working copy or not. Therefore, having other svn wc in subdirectories
243of `ROOT` might give an unexpected result.
Note: See TracBrowser for help on using the repository browser.