[Buildbot-devel] change source tracking CVS tags
Matisse Enzer
matisse at matisse.net
Sat Feb 2 17:19:31 UTC 2008
On Jan 30, 2008, at 3:34 AM, Bailey, Darragh wrote:
>
> Main problem looks to be in parsing and collecting all the changes
> from the cvs command.
>
> I see the existing svnpoller uses xml logs to make parsing easier.
> So will need to write a suitable log parser for cvs, but that
> doesn't look too hard. I suspect it will be more difficult to
> collate the multi-file commits as a single change entry.
I notice that the CruiseControl approach (http://cruisecontrol.sourceforge.net/main/configxml.html#cvs
) uses a command like this:
cvs [-d CVSROOT] -q log|rlog [-N] -d "lastbuildtime<checktime" [-
b|-rTAG] module
Here is (I think) the Java class that CC uses to talk to a CVS
repository:
http://cruisecontrol.svn.sourceforge.net/viewvc/cruisecontrol/trunk/cruisecontrol/main/src/net/sourceforge/cruisecontrol/sourcecontrols/ConcurrentVersionsSystem.java
and here is the method, parseStream() that seems to actually parse the
output of the CVS log command:
/**
* Parses the input stream, which should be from the cvs log command.
This method will format the data found in the
* input stream into a List of Modification instances.
*
* @param input
* InputStream to get log data from.
* @return List of Modification elements, maybe empty never null.
* @throws IOException
*/
protected List parseStream(InputStream input) throws IOException {
BufferedReader reader = new BufferedReader(new
InputStreamReader(input));
// Read to the first RCS file name. The first entry in the log
// information will begin with this line. A CVS_FILE_DELIMITER is
NOT
// present. If no RCS file lines are found then there is nothing
to do.
String line = readToNotPast(reader, CVS_RCSFILE_LINE, null);
ArrayList mods = new ArrayList();
while (line != null) {
// Parse the single file entry, which may include several
// modifications.
List returnList = parseEntry(reader, line);
// Add all the modifications to the local list.
mods.addAll(returnList);
// Read to the next RCS file line. The CVS_FILE_DELIMITER may
have
// been consumed by the parseEntry method, so we cannot read
to it.
line = readToNotPast(reader, CVS_RCSFILE_LINE, null);
}
return mods;
}
-------------------------------------------------------
Matisse Enzer <matisse at matisse.net>
http://www.matisse.net/ - http://www.eigenstate.net/
More information about the devel
mailing list