<https://webkit.org/b/141492> extract-localizable-strings.pl shouldn't update the...
authormrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Feb 2015 23:14:30 +0000 (23:14 +0000)
committermrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Feb 2015 23:14:30 +0000 (23:14 +0000)
Avoid updating the target file if the contents haven't changed. This prevents Xcode from copying the identical
file into the framework and resigning it, which avoids the resulting relinking of all targets that depend on
the framework.

Reviewed by Dan Bernstein.

* extract-localizable-strings.pl: Write our output to a temporary file. If the output differs from the
existing contents of the target file, move the temporary file over the target file. Otherwise, delete
the temporary file.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@179970 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/extract-localizable-strings.pl

index a8b2a50..26ce570 100644 (file)
@@ -1,3 +1,17 @@
+2015-02-11  Mark Rowe  <mrowe@apple.com>
+
+        <https://webkit.org/b/141492> extract-localizable-strings.pl shouldn't update the target file if the contents haven't changed
+
+        Avoid updating the target file if the contents haven't changed. This prevents Xcode from copying the identical
+        file into the framework and resigning it, which avoids the resulting relinking of all targets that depend on
+        the framework.
+
+        Reviewed by Dan Bernstein.
+
+        * extract-localizable-strings.pl: Write our output to a temporary file. If the output differs from the
+        existing contents of the target file, move the temporary file over the target file. Otherwise, delete
+        the temporary file.
+
 2015-02-11  Chris Dumez  <cdumez@apple.com>
 
         Turn recent assertions into release assertions to help track down crash in DocumentLoader::stopLoadingForPolicyChange()
index c1791b6..bdecd06 100755 (executable)
@@ -43,6 +43,8 @@
 # The exceptions file has a list of strings in quotes, filenames, and filename/string pairs separated by :.
 
 use strict;
+use File::Compare;
+use File::Copy;
 use Getopt::Long;
 no warnings 'deprecated';
 
@@ -401,9 +403,17 @@ for my $key (sort keys %commentByKey) {
 if (-e "$fileToUpdate") {
     if (!$verify) {
         # Write out the strings file as UTF-8
-        open STRINGS, ">", "$fileToUpdate" or die;
+        my $temporaryFile = "$fileToUpdate.updated";
+        open STRINGS, ">", $temporaryFile or die;
         print STRINGS $localizedStrings;
         close STRINGS;
+
+        # Avoid updating the target file's modification time if the contents have not changed.
+        if (compare($temporaryFile, $fileToUpdate)) {
+            move($temporaryFile, $fileToUpdate);
+        } else {
+            unlink $temporaryFile;
+        }
     } else {
         open STRINGS, $fileToUpdate or die;