[Codestriker-commits] CVS update: codestriker CHANGELOG
Brought to you by:
sits
|
From: <si...@us...> - 2008-08-02 04:47:42
|
User: sits
Date: 08/08/01 21:47:41
Modified: lib/Codestriker/FileParser SubversionDiff.pm UnidiffUtils.pm
. CHANGELOG
Added: t/FileParser subversion.t
test/testtopictexts svn-PropDiff8.txt svn-PropDiff7.txt
Log:
* Fixed the parsing of Subversion diffs which contained modifications
within property sets. Reported by cle...@us....
Also added unit tests over all subversion test topics.
Index: subversion.t
===================================================================
RCS file: subversion.t
diff -N subversion.t
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ subversion.t 2 Aug 2008 04:47:39 -0000 1.1
@@ -0,0 +1,307 @@
+# Tests to ensure that subversion patches are handled correctly.
+
+use strict;
+use Fatal qw / open close /;
+use Test::More tests => 33;
+
+use lib '../../lib';
+use Codestriker::FileParser::SubversionDiff;
+
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff1.txt', ());
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff2.txt', ());
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff3.txt', ());
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff4.txt',
+ make_delta(filename => 'parseBuildLogs',
+ old_linenumber => 9,
+ new_linenumber => 9,
+ revision => 7,
+ text => <<'END_DELTA',
+ if [[ "${MYHOSTNAME}" == "compaq" ]]; then
+ DATABASEHOST="elmo";
+ XMLDIR="$HOME/downloads/cruise-xml"
+- else
+- DATABASEHOST="webdev2";
+- XMLDIR="/export/home/buildmaster/cruisecontrol/logs"
+- fi
+ fi
+
+ if [ -x "/usr/bin/python2" ]; then
+END_DELTA
+ ),
+ make_delta(filename => 'buildCleanup.py',
+ old_linenumber => 28,
+ new_linenumber => 28,
+ revision => 7,
+ text => <<'END_DELTA',
+ # GCOMDirectories = ['/usr/local/apache2/htdocs/docs', '/export/home/buildmaster/cruisecontrol/GCOM']
+ # EPRODirectories = ['/usr/local/apache2/htdocs/docs', '/export/home/buildmaster/cruisecontrol/EPRODATA']
+
+- GCOMDirectories = [ 'testdata/branches/GCOM' ]
+- EPRODirectories = [ 'testdata/branches/EPRODATA' ]
+
+- activeGraingerBuild = database.getActiveBuild("PRD", "gcom")
+- activeEPROBuild = database.getActiveBuild("PRD", "eprodata")
+
+ print activeGraingerBuild.getBranchIdentifier()
+ print activeEPROBuild.getBranchIdentifier()
+END_DELTA
+ ));
+
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff5.txt',
+ make_delta(filename => 'parseBuildLogs',
+ old_linenumber => 9,
+ new_linenumber => 9,
+ revision => 6,
+ text => <<'END_DELTA',
+ if [[ "${MYHOSTNAME}" == "compaq" ]]; then
+ DATABASEHOST="elmo";
+ XMLDIR="$HOME/downloads/cruise-xml"
+- else
+- DATABASEHOST="webdev2";
+- XMLDIR="/export/home/buildmaster/cruisecontrol/logs"
+- fi
+ fi
+
+ if [ -x "/usr/bin/python2" ]; then
+END_DELTA
+ ),
+ make_delta(filename => 'buildCleanup.py',
+ old_linenumber => 28,
+ new_linenumber => 28,
+ revision => 6,
+ text => <<'END_DELTA',
+ # GCOMDirectories = ['/usr/local/apache2/htdocs/docs', '/export/home/buildmaster/cruisecontrol/GCOM']
+ # EPRODirectories = ['/usr/local/apache2/htdocs/docs', '/export/home/buildmaster/cruisecontrol/EPRODATA']
+
+- GCOMDirectories = [ 'testdata/branches/GCOM' ]
+- EPRODirectories = [ 'testdata/branches/EPRODATA' ]
+
+- activeGraingerBuild = database.getActiveBuild("PRD", "gcom")
+- activeEPROBuild = database.getActiveBuild("PRD", "eprodata")
+
+ print activeGraingerBuild.getBranchIdentifier()
+ print activeEPROBuild.getBranchIdentifier()
+END_DELTA
+ ));
+
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff6.txt',
+ make_delta(filename => 'parseBuildLogs',
+ old_linenumber => 9,
+ new_linenumber => 9,
+ revision => 6,
+ text => <<'END_DELTA',
+ if [[ "${MYHOSTNAME}" == "compaq" ]]; then
+ DATABASEHOST="elmo";
+ XMLDIR="$HOME/downloads/cruise-xml"
+- else
+- DATABASEHOST="webdev2";
+- XMLDIR="/export/home/buildmaster/cruisecontrol/logs"
+- fi
+ fi
+
+ if [ -x "/usr/bin/python2" ]; then
+END_DELTA
+ ),
+ make_delta(filename => 'buildCleanup.py',
+ old_linenumber => 28,
+ new_linenumber => 28,
+ revision => 6,
+ text => <<'END_DELTA',
+ # GCOMDirectories = ['/usr/local/apache2/htdocs/docs', '/export/home/buildmaster/cruisecontrol/GCOM']
+ # EPRODirectories = ['/usr/local/apache2/htdocs/docs', '/export/home/buildmaster/cruisecontrol/EPRODATA']
+
+- GCOMDirectories = [ 'testdata/branches/GCOM' ]
+- EPRODirectories = [ 'testdata/branches/EPRODATA' ]
+
+- activeGraingerBuild = database.getActiveBuild("PRD", "gcom")
+- activeEPROBuild = database.getActiveBuild("PRD", "eprodata")
+
+ print activeGraingerBuild.getBranchIdentifier()
+ print activeEPROBuild.getBranchIdentifier()
+END_DELTA
+ ));
+
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff7.txt',
+ make_delta(filename => 'users/clechasseur/local/devsetup/CoveoDevSetup.iss',
+ old_linenumber => 31,
+ new_linenumber => 31,
+ revision => 44307,
+ text => <<'END_DELTA',
+
+ [Languages]
+ Name: english; MessagesFile: compiler:Default.isl
++; woo!
+END_DELTA
+));
+
+assert_delta_equals('../../test/testtopictexts/svn-Propdiff8.txt',
+ make_delta(filename => 'users/clechasseur/local/devsetup/CoveoDevSetup.iss',
+ old_linenumber => 31,
+ new_linenumber => 31,
+ revision => 44309,
+ text => <<'END_DELTA',
+
+ [Languages]
+ Name: english; MessagesFile: compiler:Default.isl
++; woo!
+END_DELTA
+));
+
+assert_delta_equals('../../test/testtopictexts/svn-look-diff1.txt',
+ make_delta(filename => 't1.txt',
+ old_linenumber => 0,
+ new_linenumber => 1,
+ revision => 0,
+ text => <<'END_DELTA',
++line1
++line2
++line3
+END_DELTA
+));
+
+assert_delta_equals('../../test/testtopictexts/svn-look-diff2.txt',
+ make_delta(filename => 't1.txt',
+ old_linenumber => 1,
+ new_linenumber => 1,
+ revision => 89,
+ text => <<'END_DELTA',
++line0
+ line1
+ line2
++line2.2
+ line3
+END_DELTA
+));
+
+assert_delta_equals('../../test/testtopictexts/svn-look-diff3.txt',
+ make_delta(filename => 't1.txt',
+ old_linenumber => 1,
+ new_linenumber => 0,
+ revision => 90,
+ text => <<'END_DELTA',
+-line0
+-line1
+-line2
+-line2.2
+-line3
+END_DELTA
+));
+
+assert_delta_equals('../../test/testtopictexts/svn-look-diff4.txt',
+ make_delta(filename => 't1.txt',
+ old_linenumber => 1,
+ new_linenumber => 1,
+ revision => 92,
+ text => <<'END_DELTA',
+-l1
++l1
++l2
++l3
+END_DELTA
+ ),
+ make_delta(filename => 't2.txt',
+ old_linenumber => 1,
+ new_linenumber => 0,
+ revision => 92,
+ text => <<'END_DELTA',
+-l1
+END_DELTA
+));
+
+assert_delta_equals('../../test/testtopictexts/svn-look-diff5.txt',
+ make_delta(filename => 'show_user_photo.jpg',
+ old_linenumber => -1,
+ new_linenumber => -1,
+ text => '',
+ binary => 1,
+ ),
+ make_delta(filename => 't2.txt',
+ old_linenumber => 0,
+ new_linenumber => 1,
+ revision => 93,
+ text => <<'END_DELTA',
++aaa
++bbb
++ccc
+END_DELTA
+));
+
+assert_delta_equals('../../test/testtopictexts/svn-look-diff6.txt',
+ make_delta(filename => 'show_user_photo.jpg',
+ old_linenumber => -1,
+ new_linenumber => -1,
+ text => '',
+ binary => 1,
+ ),
+ make_delta(filename => 't1.txt',
+ old_linenumber => 1,
+ new_linenumber => 1,
+ revision => 94,
+ text => <<'END_DELTA',
+ l1
++l11
+ l2
++l22
+ l3
+END_DELTA
+ ),
+ make_delta(filename => 't2.txt',
+ old_linenumber => 1,
+ new_linenumber => 0,
+ revision => 94,
+ text => <<'END_DELTA',
+-aaa
+-bbb
+-ccc
+END_DELTA
+ ),
+ make_delta(filename => 't3.txt',
+ old_linenumber => 0,
+ new_linenumber => 1,
+ revision => 0,
+ text => <<'END_DELTA',
++labuda
+END_DELTA
+));
+
+# Convenience function for creating a delta object.
+sub make_delta {
+
+ # Set constant properties for all subversion deltas.
+ my $delta = {};
+ $delta->{binary} = 0;
+ $delta->{repmatch} = 1;
+ $delta->{description} = '';
+
+ # Apply the passed in arguments.
+ my %arg = @_;
+ $delta->{filename} = $arg{filename};
+ $delta->{revision} = $arg{revision};
+ $delta->{old_linenumber} = $arg{old_linenumber};
+ $delta->{new_linenumber} = $arg{new_linenumber};
+ $delta->{text} = $arg{text};
+ $delta->{binary} = $arg{binary} if exists $arg{binary};
+
+ return $delta;
+}
+
+# Function for parsing the topic text, and check that the parsed deltas
+# matched the expected deltas.
+sub assert_delta_equals {
+ my $filename = shift;
+ my @expected = @_;
+
+ # Open up the specified file and attempt to parse the deltas
+ # from it.
+ my $fh;
+ open( $fh, '<', $filename );
+ my @actual = Codestriker::FileParser::SubversionDiff->parse($fh);
+ close($fh);
+
+ # Check that the extracted deltas match what is expected.
+ is( @actual, @expected, "Number of deltas for file: $filename" );
+ for ( my $index = 0; $index < @actual; $index++ ) {
+ is_deeply( $actual[$index], $expected[$index],
+ "Delta $index in file $filename" );
+ }
+}
\ No newline at end of file
Index: SubversionDiff.pm
===================================================================
RCS file: /cvsroot/codestriker/codestriker/lib/Codestriker/FileParser/SubversionDiff.pm,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- SubversionDiff.pm 17 Jun 2008 06:51:37 -0000 1.9
+++ SubversionDiff.pm 2 Aug 2008 04:47:40 -0000 1.10
@@ -45,36 +45,37 @@
while ($line =~ /^.*Property changes on: .*$/o) {
$line = <$fh>;
return () unless defined $line &&
- $line =~ /^___________________________________________________________________$/o;
+ $line =~ /^___________________________________________________________________$/o;
- # Keep reading until we either get to an Index: line, a property
- # block, an Added/Deleted/Modified lines or the end of file.
- while (defined $line &&
- $line !~ /^.*Index:/o &&
- $line !~ /^.*Added:/o &&
- $line !~ /^.*Deleted:/o &&
- $line !~ /^.*Modified:/o &&
- $line !~ /^.*Copied:/o &&
- $line !~ /^.*Property changes on:/o) {
- $line = <$fh>;
- }
-
- if (! defined $line) {
- # End of file has been reached, return what we have parsed.
- return @result;
- }
- }
+ # Keep reading until we either get to the separator line or end of file.
+ while (defined $line &&
+ $line !~ /^===================================================================$/o) {
+ if ($line =~ /^.*(Index|Added|Modified|Copied|Deleted): (.*)$/o) {
+ $entry_type = $1;
+ $filename = $2;
+ }
+ $line = <$fh>;
+ }
+
+ if (!defined $line) {
+ # End of file has been reached, return what we have parsed.
+ return @result;
+ }
+ }
- return () unless
- $line =~ /^.*(Index|Added|Modified|Copied|Deleted): (.*)$/o;
- $entry_type = $1;
- $filename = $2;
- $line = <$fh>;
+ if ($line =~ /^.*(Index|Added|Modified|Copied|Deleted): (.*)$/o) {
+ $entry_type = $1;
+ $filename = $2;
+ $line = <$fh>;
+ }
# The separator line appears next.
return () unless defined $line && $line =~ /^===================================================================$/o;
$line = <$fh>;
+ # Check if this is a file entry with no content. If so, skip it.
+ next if ! defined $line || $line =~ /^\s*$/o;
+
# Check if the delta represents a binary file.
if ($line =~ /^Cannot display: file marked as a binary type\./o ||
$line =~ /^\(Binary files differ\)/o) {
Index: UnidiffUtils.pm
===================================================================
RCS file: /cvsroot/codestriker/codestriker/lib/Codestriker/FileParser/UnidiffUtils.pm,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- UnidiffUtils.pm 18 Aug 2007 04:54:08 -0000 1.6
+++ UnidiffUtils.pm 2 Aug 2008 04:47:40 -0000 1.7
@@ -52,6 +52,10 @@
if ($num_matched_old_lines >= $number_old_lines &&
$num_matched_new_lines >= $number_new_lines) {
last unless $line =~ /^\s*$/o;
+
+ # Consume excessive blank lines.
+ $line = <$fh>;
+ next;
}
else {
if ($line =~ /^\-/o) {
Index: svn-PropDiff8.txt
===================================================================
RCS file: svn-PropDiff8.txt
diff -N svn-PropDiff8.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ svn-PropDiff8.txt 2 Aug 2008 04:47:40 -0000 1.1
@@ -0,0 +1,16 @@
+Index: users/clechasseur/local/devsetup/CoveoDevSetup.iss
+===================================================================
+--- users/clechasseur/local/devsetup/CoveoDevSetup.iss (revision 44309)
++++ users/clechasseur/local/devsetup/CoveoDevSetup.iss (revision 44310)
+@@ -31,3 +31,4 @@
+
+ [Languages]
+ Name: english; MessagesFile: compiler:Default.isl
++; woo!
+
+Property changes on: CoveoDevSetup.iss
+___________________________________________________________________
+Added: test:foo
+ + bar
+
+
Index: svn-PropDiff7.txt
===================================================================
RCS file: svn-PropDiff7.txt
diff -N svn-PropDiff7.txt
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ svn-PropDiff7.txt 2 Aug 2008 04:47:40 -0000 1.1
@@ -0,0 +1,19 @@
+Index: users/clechasseur/local/devsetup/CoveoDevSetup.iss
+===================================================================
+--- users/clechasseur/local/devsetup/CoveoDevSetup.iss (revision 44307)
++++ users/clechasseur/local/devsetup/CoveoDevSetup.iss (revision 44308)
+@@ -31,3 +31,4 @@
+
+ [Languages]
+ Name: english; MessagesFile: compiler:Default.isl
++; woo!
+Index: users/clechasseur/local/devsetup/New Text Document.txt
+===================================================================
+
+Property changes on: New Text Document.txt
+___________________________________________________________________
+Added: svn:keywords
+ + Id HeadURL
+
+Index: users/clechasseur/local/devsetup/New Text Document (2).datata
+===================================================================
Index: CHANGELOG
===================================================================
RCS file: /cvsroot/codestriker/codestriker/CHANGELOG,v
retrieving revision 1.247
retrieving revision 1.248
diff -u -r1.247 -r1.248
--- CHANGELOG 22 Jul 2008 00:57:49 -0000 1.247
+++ CHANGELOG 2 Aug 2008 04:47:41 -0000 1.248
@@ -28,6 +28,9 @@
* Scmbug integration now works correctly if multiple bug IDs are
specified is the create topic screen. Fixed by
rob...@us....
+
+* Fixed the parsing of Subversion diffs which contained modifications
+ within property sets. Reported by cle...@us....
Version 1.9.5
|