repo-loginfo.py

a tool print logging information of darcs and mercurial repositories

Overview

This tool can be used to print a summary of the logging information of several repositories. This gives with respect to software repository activity a good overview on what tasks were done over a given timespan.

Here are some key terms used in this manual:

repository
this is the software repository that holds the current and all the previous versions of an application's source.
version control system
this is the software that is used to manage the software repository. At this time this script supports two version control systems, darcs and mercurial. Both are decentralized version control systems where a working copy usually contains the complete history of all previous version by maintaining a repository of it's own.
changeset
this is the smallest entity the version control system can manage. A changeset is a set of changes in one or several source files that is filed in the version control system together with a log message, the name of the author and a date.
log message
this is the message that is filed together with a changeset. It consists of one or several lines of text where the first line is taken as a heading, giving a short description of the changeset. This tool currently only prints the first line of the log message.
author
this is the name of the author of the changeset. Since the author name is sometimes a mail address, sometimes a full name and sometimes the name of an unix account, the specification of the author is a regular expression matching all the different names of the author.
date
this is the date and time of the filing of the changeset. It's accuracy is a single second.

Quick reference

Note that the author is a regular expression, so you can specify something like "[Ss]mith" in order to catch all of "Smith", "smith", "smith@somecompany.com".

Command Examples

The following examples can be executed on host aragon.acc.bessy.de.

all changes from last year

This command queries the MultiCAN repository and shows all changes of 2009:

repo-loginfo.py --newer 2009-01-01 --darcs --dir /opt/repositories/controls/darcs/epics/support/mcan/base-3-14

These are some lines from the output of this command:

2009-04-27 11:52 benjamin.franksen@bessy.de          upgraded module soft to version R2-5 (which no longer contains cvtRecordApp)
2009-04-27 11:53 benjamin.franksen@bessy.de          TAG R2-3-9
2009-05-11 11:03 benjamin.franksen@bessy.de          re-enable CI_LOST_IRQ_FIX (in vcan driver)

all changes from last year with deleted and added lines

This command queries the BII-Controls repository and shows all changes from 2009 with the number of changed lines:

repo-loginfo.py --newer 2009-01-01 --darcs --changes --dir /opt/repositories/controls/darcs/epics/ioc/BII-Controls/base-3-14

These are some lines from the output of this command:

2009-01-06 11:29 Bernhard.Kuner@bessy.de                -3     3 Update: remove GPNIs from all panels, Fix: remove debug output (VacuumApp)
2009-01-07 11:47 Thomas.Birke@bessy.de                -317    19 fixed vacuum sub-panels for W7* (WLS7App, HMIApp)
2009-01-07 18:47 Thomas.Birke@bessy.de                  -4     7 cleaned up command-bit handling - esp. for kicker/septa (PowerSupApp)
2009-01-08 13:30 Bernhard.Kuner@bessy.de                -1    71 Add laserMotorServicePanel.mfp (MotorApp)

all changes since a given date for a single user

Query the MultiCAN repository, show all changes of 2007 made by user "pfeiffer":

repo-loginfo.py --newer 2007-01-01 --older 2008-01-01 --author '[Pp]feiffer' --darcs --dir /opt/repositories/controls/darcs/epics/support/mcan/base-3-13

These are some lines from the output of this command:

2007-01-18 15:54 pfeiffer@mail.bessy.de              TAG R1-17-1
2007-02-06 12:08 Goetz.Pfeiffer@bessy.de             The inline documentation had to be changed: the
2007-10-09 11:58 Goetz.Pfeiffer,15.8.204,6392-4862,@bessy.de support for VCAN2 and VCAN4 was slightly improved

all changes for a given year for a single user without user name, with deleted and added lines

Query the MultiCAN repository, show all changes of 2007 made by user "pfeiffer" without printing the author and with changed lines:

repo-loginfo.py --newer 2007-01-01 --older 2008-01-01 --author '[Pp]feiffer' --no-author --changes --darcs --dir /opt/repositories/controls/darcs/epics/support/mcan/base-3-13

These are some lines from the output of this command:

2007-01-18 14:45    -2    24 time stamps of monitored objects are now printed too
2007-01-18 15:17    -2     4 a simple type error was corrected
2007-01-18 15:54     0     0 TAG R1-17-1
2007-02-06 12:08   -25    21 The inline documentation had to be changed: the

all changes since a given date for two repositories

Query both MultiCAN repositories, base-3-13 and base-3-14 and show all changes of 2007:

repo-loginfo.py --newer 2007-01-01 --older 2008-01-01 --repos 'MCAN-3.13:/opt/repositories/controls/darcs/epics/support/mcan/base-3-13:darcs,MCAN-3.14:/opt/repositories/controls/darcs/epics/support/mcan/base-3-14:darcs'

These are some lines from the output of this command:

2007-01-10 14:48 benjamin.franksen@bessy.de          MCAN-3.14    beautified info messages (mCANSupport)
2007-01-12 15:03 benjamin.franksen@bessy.de          MCAN-3.14    TAG R2-0
2007-01-18 14:45 pfeiffer@mail.bessy.de              MCAN-3.13    time stamps of monitored objects are now printed too
2007-02-06 14:35 Goetz.Pfeiffer@bessy.de             MCAN-3.13    TAG R1-17-2
2007-10-09 12:08 Bernhard.Kuner@bessy.de             MCAN-3.13    Add vtest.o to MultiCAN library in base3-13

all changes for a given year for two repositories with specification file

Query both MultiCAN repositories, base-3-13 and base-3-14 and show all changes of 2007 but this time using a REPOSPECIFICATIONFILE:

echo "MCAN-3.13 /opt/repositories/controls/darcs/epics/support/mcan/base-3-13 darcs" >  /tmp/REPOSPEC
echo "MCAN-3.14 /opt/repositories/controls/darcs/epics/support/mcan/base-3-14 darcs" >> /tmp/REPOSPEC
repo-loginfo.py --newer 2007-01-01 --older 2008-01-01 --repos-file /tmp/REPOSPEC

This is the content of the REPOSPEC file:

MCAN-3.13 /opt/repositories/controls/darcs/epics/support/mcan/base-3-13 darcs
MCAN-3.14 /opt/repositories/controls/darcs/epics/support/mcan/base-3-14 darcs

And these are some lines from the output of this command:

2007-01-12 15:03 benjamin.franksen@bessy.de          MCAN-3.14    TAG R2-0
2007-01-18 14:45 pfeiffer@mail.bessy.de              MCAN-3.13    time stamps of monitored objects are now printed too
2007-01-18 15:17 pfeiffer@mail.bessy.de              MCAN-3.13    a simple type error was corrected
2007-11-26 09:51 Ralf Hartmann <Ralf.Hartmann@bessy.de> MCAN-3.14    TAG R2-2-1

Reference of command line options

--version print the version number of the script
-h, --help print a short help
--summary print a one-line summary of the script function
--doc create online help in restructured text format. Use "./repo-loginfo.py --doc | rst2html" to create html-help"
--dry-run in this case the program doesn't do anything but only shows which directories it would examine and what version control commands it would call.
--darcs specify that the repository is a darcs repository.
--hg specify that the repository is a mercurial repository.
--changes additionally display the number of removed and added lines in the patch. This simply counts the "-" and "+" characters at the start of lines when the changesets are printed in the unified diff format.
--no-author do not print the author, this is useful when you have filtered all changeset from an author and do not want to have this author's name printed over and over again.
--fetch-all when this option is given, the filtering of dates is done by this script, not by the version control system. The processing of the output takes longer this way, but it may be that some date specifications can be given more precise this way.
--dir DIRECTORY
 specify the directory where the repository can be found.
--reponame REPONAME
 specify a name for the repository. This is just a short name that is printed along the log information. This option is useful if you collect log information of several repositories and want to collect them in a single file.
--newer DATESPEC
 print only changes at or after the given date.
--older DATESPEC
 print only changes at or before the given date.
--repos REPOSPECIFICATION
 this option can be used to specify more than one repository. The changes for all given repositories are collected and printed, sorted by their date. The REPOSPECIFICATION consists of parts that are separated by commas, each part consists of a repository name, a directory, and a version control type, each specified by a colon. See also the section "Examples" for an example on this option.
--repos-file REPOSPECIFICATIONFILE
 this option can also be used to specify more than one repository. In this case the specifications of the repositories are in the given file. Each line has (in this order and separated by spaces) the repository name, the directory of the repository and the version control type. See also the section "Examples" for an example on this option.