source: trunk/doc/readme.txt @ 1082

Last change on this file since 1082 was 1017, checked in by Peter Johansson, 12 years ago

updating copyright years

  • 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.5 KB
RevLine 
[3]1$Id: readme.txt 1017 2010-01-09 14:41:34Z peter $
[813]2{{{
[978]3Copyright (C) 2005 Jari Häkkinen
4Copyright (C) 2006, 2007, 2008 Jari Häkkinen, Peter Johansson
[1017]5Copyright (C) 2009, 2010 Peter Johansson
[3]6
[813]7This file is part of svndigest, http://dev.thep.lu.se/svndigest
8
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.
13
14svndigest is distributed in the hope that it will be useful, but
15WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with svndigest. If not, see <http://www.gnu.org/licenses/>.
21}}}
22
23
[341]24= About svndigest =
[84]25
[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
[185]30directory).
[3]31
[341]32== Statistics ==
33
[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.
[3]39
[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.
[3]45
[687]46see also: http://dev.thep.lu.se/svndigest/wiki/StatsType
[495]47
[341]48== Different linetypes ==
[188]49
[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
[524]60''other''.
[188]61
[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:
[188]69
[524]70`*.h = "//":"\n"  ;  "/*":"*/"`
[342]71
[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 `/* ... */`.
[524]78
[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 `Makefile.in` could be parsed as `Makefile` or files named
82`test_repo.sh.in` could be parsed as though it was named
83`test_repo.sh`. 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.
90
91
[833]92== Caching Statistics ==
93
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
102`--ignore-cache`.
103
104
[341]105== Different file types ==
[188]106
[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
[711]113svndigest:ignore.
[3]114
[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
120treatment.
[3]121
[711]122To set the property on file `FILE`, issue `svn propset
123svndigest:ignore "" FILE`. For more detailed information refer to
124http://svnbook.red-bean.com/.
125
[351]126== Configuration ==
127
[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.
141
[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'.
149
[1009]150The format of images in the report can be configured in section
151[image]. Allowed formats are `png`, `svg`, and `none` where the latter
152implies that images are not created.
153
[348]154== Copyright update ==
155
156Using the option `--copyright` svndigest will try to update the
157copyright statement in each of the parsed files. The copyright
158statement is detected as the first line containing `Copyright
159(C)`. The copyright statement block is defined to start at this line
160and ends with the first following line containing no alphanumerical
[444]161characters (excluding `prefix` string preceeding `Copyright (C)`). This
[349]162copyright statement block is replaced with a new copyright statement
163generated from analyzing `svn log`. An author is considered to have
[348]164copyright of the file if (s)he has modified the file and thereby
165occurs in the log. For an example of the format of the generated
[351]166copyright statement, please have a look at the bottom of this file. By
167default the `svn user name` of the author is printed in the copyright
168statement. This may be overridden by setting a `copyright-alias` in
169the config file. In svndigest, e.g., user name `jari` is set to
[980]170copyright-alias ''Jari Häkkinen'' and user name `peter` is set to
[351]171copyright-alias ''Peter Johansson''. If two (or several) authors are
172given the same copyright-alias they are considered as one person in
173the copyright statement (i.e. their alias is not repeated). This may
174be useful if you want to give copyright to an organization rather than
175to individual developers.
[348]176
[352]177== TracLinks ==
178
179From svndigest 0.6 there is support for TracLinks. The root trac
180location may be set in the configuration, in which case various links
181to the trac site will be included in the resulting report. This
182includes links from revision number to the corresponding revision at
183the trac site, and various kinds of links are detected in the messages
184in `Recent Log`.
185
[341]186== Prerequisites ==
[3]187
[341]188Svndigest runs against a working copy (WC), i.e., svndigest will not
189run directly against a repository. Svndigest requires that the WC is
190pristine before running the analysis, i.e., no files are allowed to be
191modified. We also recommend that the WC is in synch with the
192repository. Issue `svn update` before running svndigest.
[185]193
[341]194== Flow of the program ==
[3]195The current flow of the program is.
196
[341]197  * Check that we are working with a WC in subversion control.
[3]198
[520]199  * Build the requested directory structure ignoring not subversion
200    controlled items. During the directory structure creation a check
201    is made that the WC is up to date with the repository.
[3]202
[341]203  * Walk through the directory structure and calculate statistics for
204    each entry.
[3]205
[341]206  * Create the plots and HTML presentation.
207
[959]208= Copy Cache =
209
210As explained above, statistics are cached during a run and svndigest
211only communicates with the server to retrieve statistics of the
212activity since last run. Subsequent runs are much faster why it is
213prefereble to run svndigest in a wc with recent cache available.
214
215Sometimes it is useful to copy the cache from one wc to another, and
216an easy way to do this is to use the tool `svndigest-copy-cache`,
217which is shipped with svndigest. A common use case is when creating,
218say, a release branch from the trunk, in which case you likely will
219have two working copies to follow the two branches. If you want to run
220svndigest on both of them and you want to avoid the first expensive
221run (without cache) you can copy the cache from the trunk wc to the
222release-branch wc.
223
224As explained in the caching section, it is important that the cache
225reflects a revision that belong to the history of the wc. So, for
226example, when creating a branch it is crucial to copy the cache from
227the trunk wc to the new branch wc before running svndigest on trunk
228wc. Otherwise the cache will contain information about changesets that
229were committed after the new branch were forked out. This will not
230only be untrue as these changesets are not in the line of history of
231the branch, but it will also cause problems for svndigest when
232calculating the statistics of the most recent revisons and result is
233undefined due to inconsistency between the cache and the log. For an
234example of how `svndigest-copy-cache` may be used please refer to the
235ReleaseProcedure of svndigest.
236
237`svndigest-copy-cache` copies the cache file from `ROOT` tree to the
238corresponding directory in `TARGET` tree. The tree structure of the
239two working copies must be identical because `svndigest-copy-cache`
240will not create any directories in `TARGET` tree except that
241`.svndigest` directories are created when necessary.
242
243Also, `svndigest-copy-cache` is ignorant about svn wc and will parse
244through `ROOT` directory and all its sub-directories ,looking for
245svndigest cache files, regardless whether they belong to the same svn
246working copy or not. Therefore, having other svn wc in subdirectories
247of `ROOT` might give an unexpected result.
Note: See TracBrowser for help on using the repository browser.