Hi Eoghan, I downloaded a clean version of the trunk and ran tests before applying the patch. I am seeing the same failures as you are. So it would appear that this failure is not related to my patch. Regards, Seumas
-----Original Message----- From: Glynn, Eoghan [mailto:[EMAIL PROTECTED] Sent: Thursday, February 22, 2007 12:01 PM To: [email protected] Subject: RE: Creating/Applying patch with renamed files Hi Seumas, After applying the patch, I'm seeing the tests fail with the following ... /Eoghan [surefire] Running org.apache.cxf.jaxws.support.ContextPropertiesMappingTest [surefire] Tests run: 5, Failures: 0, Errors: 1, Time elapsed: 0.044 sec [surefire] [surefire] testCreateWebServiceContextWithInAttachments(org.apache.cxf.jaxws.suppo rt.ContextPropertiesMappingTest) Time elapsed: 0.011 sec <<< ERROR! java.lang.IllegalStateException: missing behavior definition for the preceeding me thod call getContentType() at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandle r.java:27) at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.ja va:45) at $Proxy23.getContentType(Unknown Source) at javax.activation.DataHandler.<init>(DataHandler.java:44) at org.apache.cxf.jaxws.support.ContextPropertiesMappingTest.testCreateWeb ServiceContextWithInAttachments(ContextPropertiesMappingTest.java:148) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.ja va:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso rImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at junit.framework.TestCase.runTest(TestCase.java:164) at junit.framework.TestCase.runBare(TestCase.java:130) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite.runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.ja va:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso rImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.maven.surefire.battery.JUnitBattery.executeJUnit(JUnitBatter y.java:242) at org.apache.maven.surefire.battery.JUnitBattery.execute(JUnitBattery.jav a:216) at org.apache.maven.surefire.Surefire.executeBattery(Surefire.java:215) at org.apache.maven.surefire.Surefire.run(Surefire.java:163) at org.apache.maven.surefire.Surefire.run(Surefire.java:87) at org.apache.maven.surefire.Surefire.run(Surefire.java:63) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.ja va:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccesso rImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.maven.surefire.SurefireBooter.main(SurefireBooter.java:785) > -----Original Message----- > From: Glynn, Eoghan [mailto:[EMAIL PROTECTED] > Sent: 22 February 2007 16:34 > To: [email protected] > Subject: RE: Creating/Applying patch with renamed files > > > > Seumas, > > I'll apply this patch and give the tests a whirl on Linux ... > then commit if all green. > > Cheers, > Eoghan > > > -----Original Message----- > > From: Soltysik, Seumas [mailto:[EMAIL PROTECTED] > > Sent: 22 February 2007 16:21 > > To: [email protected] > > Subject: RE: Creating/Applying patch with renamed files > > > > Any volunteers for this task? > > > > As stated, to apply this patch you will need the svn-apply > perl script > > that was embedded in a previous email. If needed I can send > it as an > > attachment directly to whom ever applies the patch. > > Regards, > > Seumas > > > > -----Original Message----- > > From: Soltysik, Seumas [mailto:[EMAIL PROTECTED] > > Sent: Tuesday, February 20, 2007 2:30 PM > > To: [email protected] > > Subject: RE: Creating/Applying patch with renamed files > > > > > > Ok, thanks to Eoghan, I have created a new patch using the > > svn-create-patch script and uploaded it. The name of the patch is > > cxf_427_patchfile_3. If someone could apply the patch using the > > svn-apply tool, I would appreciate it. > > Regards, > > Seumas > > > > -----Original Message----- > > From: Glynn, Eoghan [mailto:[EMAIL PROTECTED] > > Sent: Saturday, February 17, 2007 4:03 AM > > To: [email protected] > > Subject: RE: Creating/Applying patch with renamed files > > > > > > > > > -----Original Message----- > > > From: Soltysik, Seumas [mailto:[EMAIL PROTECTED] > > > Sent: 17 February 2007 00:59 > > > To: [email protected] > > > Subject: RE: Creating/Applying patch with renamed files > > > > > > When I run this script "script < patchfile" it still fails > > on the 3 > > > file that I performed an "svn mv" on. This is the output I get: > > > > > > can't find file to patch at input line 5 Perhaps you used > > the wrong -p > > > or --strip option? > > > The text leading up to this was: > > > -------------------------- > > > |Index: > > > |rt/management/src/main/java/org/apache/cxf/management/jmx/Ins > > > trumentati > > > |onManagerImpl.java > > > > |=================================================================== > > > |--- > > > rt/management/src/main/java/org/apache/cxf/management/jmx/Inst > > > rumentationManagerImpl.java (revision 506528) > > > |+++ > > > rt/management/src/main/java/org/apache/cxf/management/jmx/Inst > > > rumentationManagerImpl.java (working copy) > > > -------------------------- > > > File to patch: > > > > > > Hi Seumas, > > > > See the following comment in the svn-apply script: > > > > # Handles copied and moved files (requires patches made by > > svn-create-patch). > > > > So you'll need the svn-create-patch script too (copied below and > > attached to a separate mail). Just go back to your original working > > copy and re-create the patch file. > > > > /Eoghan > > > > > > #!/usr/bin/perl -w > > > > # Copyright (C) 2005, 2006 Apple Computer, Inc. All rights > reserved. > > # > > # Redistribution and use in source and binary forms, with > or without # > > modification, are permitted provided that the following > conditions # > > are met: > > # > > # 1. Redistributions of source code must retain the above > copyright > > # notice, this list of conditions and the following > disclaimer. > > # 2. Redistributions in binary form must reproduce the above > > copyright > > # notice, this list of conditions and the following > disclaimer in > > the > > # documentation and/or other materials provided with the > > distribution. > > # 3. Neither the name of Apple Computer, Inc. ("Apple") > nor the names > > of > > # its contributors may be used to endorse or promote products > > derived > > # from this software without specific prior written > permission. > > # > > # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS > "AS IS" AND > > ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, > > THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A > > PARTICULAR PURPOSE ARE > > > > # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE > > FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR > > CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, > PROCUREMENT OF > > SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR > > BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF > > LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # > (INCLUDING > > NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > OF # THIS > > SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > > > # Extended "svn diff" script for WebKit Open Source > Project, used to > > make patches. > > > > # Differences from standard "svn diff": > > # > > # Uses the real diff, not svn's built-in diff. > > # Always passes "-p" to diff so it will try to include > > function names. > > > > # Handles binary files (encoded as a base64 chunk of text). > > # Sorts the diffs alphabetically by text files, then > binary files. > > # Handles copied and moved files. > > # > > # Missing features: > > # > > # Handle copied and moved directories. > > > > use strict; > > use warnings; > > > > use Config; > > use Cwd; > > use File::Basename; > > use File::Spec; > > use File::stat; > > use Getopt::Long; > > use MIME::Base64; > > use POSIX qw(:errno_h); > > use Time::gmtime; > > > > sub canonicalizePath($); > > sub findMimeType($); > > sub findModificationType($); > > sub findSourceFileAndRevision($); > > sub fixChangeLogPatch($); > > sub generateDiff($$$); > > sub generateFileList($\%\%); > > sub isBinaryMimeType($); > > sub manufacturePatchForAdditionWithHistory($$); > > sub numericcmp($$); > > sub outputBinaryContent($); > > sub pathcmp($$); > > sub processPaths(\@); > > sub splitpath($); > > > > my $showHelp; > > if (!GetOptions("help" => \$showHelp) || $showHelp) { > > print STDERR basename($0) . " [-h|--help] [svndir1 > > [svndir2 ...]]\n"; > > exit 1; > > } > > > > my %paths = processPaths(@ARGV); > > > > # Generate a list of files requiring diffs my %textFiles; my > > %binaryFiles; for my $path (keys %paths) { > > generateFileList($path, %textFiles, %binaryFiles); } > > > > # Generate the diff for text files, then binary files, for easy > > reviewing for my $file (sort pathcmp keys %textFiles) { > > generateDiff($file, $textFiles{$file}, 0); } for my $file (sort > > pathcmp keys %binaryFiles) { > > generateDiff($file, $binaryFiles{$file}, 1); } > > > > exit 0; > > > > > > sub canonicalizePath($) > > { > > my ($file) = @_; > > > > # Remove extra slashes and '.' directories in path > > $file = File::Spec->canonpath($file); > > > > # Remove '..' directories in path > > my @dirs = (); > > foreach my $dir (File::Spec->splitdir($file)) { > > if ($dir eq '..' && $#dirs >= 0 && $dirs[$#dirs] ne '..') { > > pop(@dirs); > > } else { > > push(@dirs, $dir); > > } > > } > > return ($#dirs >= 0) ? File::Spec->catdir(@dirs) : "."; } > > > > sub findMimeType($) > > { > > my ($file) = @_; > > open PROPGET, "svn propget svn:mime-type '$file' |" or die; > > my $mimeType = <PROPGET>; > > close PROPGET; > > chomp $mimeType if $mimeType; > > return $mimeType; > > } > > > > sub findModificationType($) > > { > > my ($stat) = @_; > > my $fileStat = substr($stat, 0, 1); > > my $propertyStat = substr($stat, 1, 1); > > if ($fileStat eq "A") { > > my $additionWithHistory = substr($stat, 3, 1); > > return $additionWithHistory eq "+" ? "additionWithHistory" : > > "addition"; > > } > > return "modification" if ($fileStat eq "M" || $propertyStat eq > > "M"); > > > > return "deletion" if ($fileStat eq "D"); > > return undef; > > } > > > > sub findSourceFileAndRevision($) > > { > > my ($file) = @_; > > my $baseUrl; > > open INFO, "svn info . |" or die; > > while (<INFO>) { > > if (/^URL: (.+)/) { > > $baseUrl = $1; > > last; > > } > > } > > close INFO; > > my $sourceFile; > > my $sourceRevision; > > open INFO, "svn info '$file' |" or die; > > while (<INFO>) { > > if (/^Copied From URL: (.+)/) { > > $sourceFile = File::Spec->abs2rel($1, $baseUrl); > > } elsif (/^Copied From Rev: ([0-9]+)/) { > > $sourceRevision = $1; > > } > > } > > close INFO; > > return ($sourceFile, $sourceRevision); } > > > > sub fixChangeLogPatch($) > > { > > my $patch = shift; > > my $contextLineCount = 3; > > > > return $patch if $patch !~ /\n@@ -1,(\d+) \+1,(\d+) @@\n( > > .*\n)+(\+.*\n)+( .*\n){$contextLineCount}$/m; > > my ($oldLineCount, $newLineCount) = ($1, $2); > > return $patch if $oldLineCount <= $contextLineCount; > > > > # The diff(1) command is greedy when matching lines, so a new > > ChangeLog entry will > > # have lines of context at the top of a patch when the existing > > entry has the same > > # date and author as the new entry. This nifty loop alters a > > ChangeLog patch so > > # that the added lines ("+") in the patch always start at the > > beginning of the > > # patch and there are no initial lines of context. > > my $newPatch; > > my $lineCountInState = 0; > > my $oldContentLineCountReduction = $oldLineCount - > > $contextLineCount; > > my $newContentLineCountWithoutContext = $newLineCount - > > $oldLineCount - $oldContentLineCountReduction; > > my ($stateHeader, $statePreContext, $stateNewChanges, > > $statePostContext) = (1..4); > > my $state = $stateHeader; > > foreach my $line (split(/\n/, $patch)) { > > $lineCountInState++; > > if ($state == $stateHeader && $line =~ /^@@ > -1,$oldLineCount > > \+1,$newLineCount @[EMAIL PROTECTED]/) { > > $line = "@@ -1,$contextLineCount +1," . ($newLineCount - > > $oldContentLineCountReduction) . " @@"; > > $lineCountInState = 0; > > $state = $statePreContext; > > } elsif ($state == $statePreContext && > substr($line, 0, 1) eq > > " > > ") { > > $line = "+" . substr($line, 1); > > if ($lineCountInState == > $oldContentLineCountReduction) { > > $lineCountInState = 0; > > $state = $stateNewChanges; > > } > > } elsif ($state == $stateNewChanges && > substr($line, 0, 1) eq > > "+") { > > # No changes to these lines > > if ($lineCountInState == > > $newContentLineCountWithoutContext) > > { > > $lineCountInState = 0; > > $state = $statePostContext; > > } > > } elsif ($state == $statePostContext) { > > if (substr($line, 0, 1) eq "+" && $lineCountInState <= > > $oldContentLineCountReduction) { > > $line = " " . substr($line, 1); > > } elsif ($lineCountInState > $contextLineCount && > > substr($line, 0, 1) eq " ") { > > next; # Discard > > } > > } > > $newPatch .= $line . "\n"; > > } > > > > return $newPatch; > > } > > > > sub generateDiff($$$) > > { > > my ($file, $modificationType, $isBinary) = @_; > > my $patch; > > if ($modificationType eq "additionWithHistory") { > > manufacturePatchForAdditionWithHistory($file, $isBinary); > > } > > open DIFF, "svn diff --diff-cmd diff -x -uNp '$file' |" or die; > > while (<DIFF>) { > > $patch .= $_; > > } > > close DIFF; > > $patch = fixChangeLogPatch($patch) if basename($file) eq > > "ChangeLog"; > > print $patch if $patch; > > if ($isBinary) { > > print "\n" if ($patch && $patch =~ m/\n\S+$/m); > > outputBinaryContent($file); > > } > > } > > > > sub generateFileList($\%\%) > > { > > my ($statPath, $textFiles, $binaryFiles) = @_; > > open STAT, "svn stat '$statPath' |" or die; > > while (my $line = <STAT>) { > > chomp $line; > > my $stat = substr($line, 0, 7); > > my $path = substr($line, 7); > > next if -d $path; > > my $modificationType = findModificationType($stat); > > if ($modificationType) { > > if (isBinaryMimeType($path)) { > > $binaryFiles->{$path} = $modificationType; > > } else { > > $textFiles->{$path} = $modificationType; > > } > > } else { > > print STDERR $line, "\n"; > > } > > } > > close STAT; > > } > > > > sub isBinaryMimeType($) > > { > > my ($file) = @_; > > my $mimeType = findMimeType($file); > > return 0 if (!$mimeType || substr($mimeType, 0, 5) eq "text/"); > > return 1; > > } > > > > sub manufacturePatchForAdditionWithHistory($$) > > { > > my ($file, $isBinary) = @_; > > print "Index: ${file}\n"; > > print "=" x 67, "\n"; > > my ($sourceFile, $sourceRevision) = > > findSourceFileAndRevision($file); > > print "--- ${file}\t(revision ${sourceRevision})\t(from > > ${sourceFile}:${sourceRevision})\n"; > > print "+++ ${file}\t(working copy)\n"; > > if ($isBinary) { > > print "\nCannot display: file marked as a binary type.\n"; > > my $mimeType = findMimeType($file); > > print "svn:mime-type = ${mimeType}\n\n"; > > } else { > > print `svn cat ${sourceFile} | diff -u /dev/null - > | tail +3`; > > } > > } > > > > # Sort numeric parts of strings as numbers, other parts as strings. > > # Makes 1.33 come after 1.3, which is cool. > > sub numericcmp($$) > > { > > my ($aa, $bb) = @_; > > > > my @a = split /(\d+)/, $aa; > > my @b = split /(\d+)/, $bb; > > > > # Compare one chunk at a time. > > # Each chunk is either all numeric digits, or all not numeric > > digits. > > while (@a && @b) { > > my $a = shift @a; > > my $b = shift @b; > > > > # Use numeric comparison if chunks are non-equal numbers. > > return $a <=> $b if $a =~ /^\d/ && $b =~ /^\d/ && $a != $b; > > > > # Use string comparison if chunks are any other kind of > > non-equal string. > > return $a cmp $b if $a ne $b; > > } > > > > # One of the two is now empty; compare lengths for > result in this > > case. > > return @a <=> @b; > > } > > > > sub outputBinaryContent($) > > { > > my ($path) = @_; > > # Deletion > > return if (! -e $path); > > # Addition or Modification > > my $buffer; > > open BINARY, $path or die; > > while (read(BINARY, $buffer, 60*57)) { > > print encode_base64($buffer); > > } > > close BINARY; > > print "\n"; > > } > > > > # Sort first by directory, then by file, so all paths in > one directory > > are grouped # rather than being interspersed with items from > > subdirectories. > > # Use numericcmp to sort directory and filenames to make order > > logical. > > sub pathcmp($$) > > { > > my ($patha, $pathb) = @_; > > > > my ($dira, $namea) = splitpath($patha); > > my ($dirb, $nameb) = splitpath($pathb); > > > > return numericcmp($dira, $dirb) if $dira ne $dirb; > > return numericcmp($namea, $nameb); } > > > > sub processPaths(\@) > > { > > my ($paths) = @_; > > return ("." => 1) if ([EMAIL PROTECTED]); > > > > my %result = (); > > > > for my $file (@{$paths}) { > > die "can't handle absolute paths like \"$file\"\n" if > > File::Spec->file_name_is_absolute($file); > > die "can't handle empty string path\n" if $file eq ""; > > die "can't handle path with single quote in the name like > > \"$file\"\n" if $file =~ /'/; # ' (keep Xcode syntax highlighting > > happy) > > > > > > my $untouchedFile = $file; > > > > $file = canonicalizePath($file); > > > > die "can't handle paths with .. like > \"$untouchedFile\"\n" if > > $file =~ m|/\.\./|; > > > > $result{$file} = 1; > > } > > > > return ("." => 1) if ($result{"."}); > > > > # Remove any paths that also have a parent listed. > > for my $path (keys %result) { > > for (my $parent = dirname($path); $parent ne '.'; $parent = > > dirname($parent)) { > > if ($result{$parent}) { > > delete $result{$path}; > > last; > > } > > } > > } > > > > return %result; > > } > > > > # Break up a path into the directory (with slash) and base name. > > sub splitpath($) > > { > > my ($path) = @_; > > > > my $pathSeparator = "/"; > > my $dirname = dirname($path) . $pathSeparator; > > $dirname = "" if $dirname eq "." . $pathSeparator; > > > > return ($dirname, basename($path)); } > > >
