[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 |