OLD | NEW |
1 #!/usr/bin/perl -w | 1 #!/usr/bin/perl -w |
2 | 2 |
3 # Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved. | 3 # Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved. |
4 # | 4 # |
5 # Redistribution and use in source and binary forms, with or without | 5 # Redistribution and use in source and binary forms, with or without |
6 # modification, are permitted provided that the following conditions | 6 # modification, are permitted provided that the following conditions |
7 # are met: | 7 # are met: |
8 # | 8 # |
9 # 1. Redistributions of source code must retain the above copyright | 9 # 1. Redistributions of source code must retain the above copyright |
10 # notice, this list of conditions and the following disclaimer. | 10 # notice, this list of conditions and the following disclaimer. |
11 # 2. Redistributions in binary form must reproduce the above copyright | 11 # 2. Redistributions in binary form must reproduce the above copyright |
12 # notice, this list of conditions and the following disclaimer in the | 12 # notice, this list of conditions and the following disclaimer in the |
13 # documentation and/or other materials provided with the distribution. | 13 # documentation and/or other materials provided with the distribution. |
14 # 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of | 14 # 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of |
15 # its contributors may be used to endorse or promote products derived | 15 # its contributors may be used to endorse or promote products derived |
16 # from this software without specific prior written permission. | 16 # from this software without specific prior written permission. |
17 # | 17 # |
18 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY | 18 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
19 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 19 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
21 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | 21 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
22 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 22 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
23 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 23 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
25 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 25 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 } | 212 } |
213 } | 213 } |
214 close INFO; | 214 close INFO; |
215 return ($sourceFile, $sourceRevision); | 215 return ($sourceFile, $sourceRevision); |
216 } | 216 } |
217 | 217 |
218 sub generateDiff($$) | 218 sub generateDiff($$) |
219 { | 219 { |
220 my ($fileData, $prefix) = @_; | 220 my ($fileData, $prefix) = @_; |
221 my $file = File::Spec->catdir($prefix, $fileData->{path}); | 221 my $file = File::Spec->catdir($prefix, $fileData->{path}); |
222 | 222 |
223 if ($ignoreChangelogs && basename($file) eq "ChangeLog") { | 223 if ($ignoreChangelogs && basename($file) eq "ChangeLog") { |
224 return 0; | 224 return 0; |
225 } | 225 } |
226 | 226 |
227 my $patch = ""; | 227 my $patch = ""; |
228 if ($fileData->{modificationType} eq "additionWithHistory") { | 228 if ($fileData->{modificationType} eq "additionWithHistory") { |
229 manufacturePatchForAdditionWithHistory($fileData); | 229 manufacturePatchForAdditionWithHistory($fileData); |
230 } | 230 } |
231 | 231 |
232 my $diffOptions = diffOptionsForFile($file); | 232 my $diffOptions = diffOptionsForFile($file); |
233 my $escapedFile = escapeSubversionPath($file); | 233 my $escapedFile = escapeSubversionPath($file); |
234 open DIFF, "svn diff --diff-cmd diff -x -$diffOptions '$escapedFile' |" or d
ie; | 234 open DIFF, "svn diff --diff-cmd diff -x -$diffOptions '$escapedFile' |" or d
ie; |
235 while (<DIFF>) { | 235 while (<DIFF>) { |
236 $patch .= $_; | 236 $patch .= $_; |
237 } | 237 } |
238 close DIFF; | 238 close DIFF; |
239 if (basename($file) eq "ChangeLog") { | 239 if (basename($file) eq "ChangeLog") { |
240 my $changeLogHash = fixChangeLogPatch($patch); | 240 my $changeLogHash = fixChangeLogPatch($patch); |
241 $patch = $changeLogHash->{patch}; | 241 $patch = $changeLogHash->{patch}; |
242 } | 242 } |
243 print $patch; | 243 print $patch; |
244 if ($fileData->{isBinary}) { | 244 if ($fileData->{isBinary}) { |
245 print "\n" if ($patch && $patch =~ m/\n\S+$/m); | 245 print "\n" if ($patch && $patch =~ m/\n\S+$/m); |
246 outputBinaryContent($file); | 246 outputBinaryContent($file); |
247 } | 247 } |
248 return length($patch); | 248 return length($patch); |
249 } | 249 } |
250 | 250 |
251 sub generateFileList($\%) | 251 sub generateFileList($\%) |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 my ($aa, $bb) = @_; | 329 my ($aa, $bb) = @_; |
330 | 330 |
331 my @a = split /(\d+)/, $aa; | 331 my @a = split /(\d+)/, $aa; |
332 my @b = split /(\d+)/, $bb; | 332 my @b = split /(\d+)/, $bb; |
333 | 333 |
334 # Compare one chunk at a time. | 334 # Compare one chunk at a time. |
335 # Each chunk is either all numeric digits, or all not numeric digits. | 335 # Each chunk is either all numeric digits, or all not numeric digits. |
336 while (@a && @b) { | 336 while (@a && @b) { |
337 my $a = shift @a; | 337 my $a = shift @a; |
338 my $b = shift @b; | 338 my $b = shift @b; |
339 | 339 |
340 # Use numeric comparison if chunks are non-equal numbers. | 340 # Use numeric comparison if chunks are non-equal numbers. |
341 return $a <=> $b if $a =~ /^\d/ && $b =~ /^\d/ && $a != $b; | 341 return $a <=> $b if $a =~ /^\d/ && $b =~ /^\d/ && $a != $b; |
342 | 342 |
343 # Use string comparison if chunks are any other kind of non-equal string
. | 343 # Use string comparison if chunks are any other kind of non-equal string
. |
344 return $a cmp $b if $a ne $b; | 344 return $a cmp $b if $a ne $b; |
345 } | 345 } |
346 | 346 |
347 # One of the two is now empty; compare lengths for result in this case. | 347 # One of the two is now empty; compare lengths for result in this case. |
348 return @a <=> @b; | 348 return @a <=> @b; |
349 } | 349 } |
350 | 350 |
351 sub outputBinaryContent($) | 351 sub outputBinaryContent($) |
352 { | 352 { |
353 my ($path) = @_; | 353 my ($path) = @_; |
354 # Deletion | 354 # Deletion |
355 return if (! -e $path); | 355 return if (! -e $path); |
356 # Addition or Modification | 356 # Addition or Modification |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 return ($dirname, basename($path)); | 428 return ($dirname, basename($path)); |
429 } | 429 } |
430 | 430 |
431 # Sort so source code files appear before test files. | 431 # Sort so source code files appear before test files. |
432 sub testfilecmp($$) | 432 sub testfilecmp($$) |
433 { | 433 { |
434 my ($fileDataA, $fileDataB) = @_; | 434 my ($fileDataA, $fileDataB) = @_; |
435 return $fileDataA->{isTestFile} <=> $fileDataB->{isTestFile}; | 435 return $fileDataA->{isTestFile} <=> $fileDataB->{isTestFile}; |
436 } | 436 } |
437 | 437 |
OLD | NEW |