From 23598a3c67a68ccf563f28ad071deb0ef4ace3c6 Mon Sep 17 00:00:00 2001
From: David Fugate <dfugate@microsoft.com>
Date: Thu, 1 Mar 2012 11:06:50 -0800
Subject: [PATCH] Renamed AddLicenseHeader.py to FixLicenseHeader.py. Modified
 it to switch us over to the Ecma license for everything except Sputnik-based
 sources (someone from Google should make this change on line 60 of
 FixLicenseHeader.py).

---
 ...ddLicenseHeader.py => FixLicenseHeader.py} | 66 ++++++++++++-------
 1 file changed, 41 insertions(+), 25 deletions(-)
 rename tools/misc/{AddLicenseHeader.py => FixLicenseHeader.py} (56%)

diff --git a/tools/misc/AddLicenseHeader.py b/tools/misc/FixLicenseHeader.py
similarity index 56%
rename from tools/misc/AddLicenseHeader.py
rename to tools/misc/FixLicenseHeader.py
index 2608bb92d3..f5124c3004 100644
--- a/tools/misc/AddLicenseHeader.py
+++ b/tools/misc/FixLicenseHeader.py
@@ -9,27 +9,25 @@ import argparse
 import os
 import sys
 import re
+import codecs
 
 #--Globals---------------------------------------------------------------------
-MSFT_LICENSE = '''/// Copyright (c) 2012 Ecma International.  All rights reserved. 
+ECMA_LICENSE = '''/// Copyright (c) 2012 Ecma International.  All rights reserved. 
 /// Ecma International makes this code available under the terms and conditions set
 /// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the 
 /// "Use Terms").   Any redistribution of this code must retain the above 
 /// copyright and this notice and otherwise comply with the Use Terms.
 '''
 
-GOOGLE_LICENSE = '''// Copyright 2011 Google Inc.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-'''
+NEW_LICENSE_FIRST_LINE = re.compile(r"Copyright\s+\(c\)\s+20[0-9][0-9]\s+Ecma\s+International")
+OLD_LICENSE_FIRST_LINE = re.compile(r"(Copyright\s+20[0-9][0-9]\s+Google)|(the\s+Sputnik\s+authors)|(Microsoft\s+Corporation)")
+OLD_LICENSE_LAST_LINE  = re.compile(r"(ADVISED\s+OF\s+THE\s+POSSIBILITY\s+OF\s+SUCH\s+DAMAGE)|(This\s+code\s+is\s+governed\s+by\s+the\s+BSD\s+license\s+found\s+in\s+the\s+LICENSE\s+file)")
 
+#Dirty way of determining if the contribution stems from Google or Microsoft
 GOOGLE_RE = re.compile(r"[\\/]S([0-9]+)|(bp)(\.|_)[^\\/]+\.js$")
-GOOGLE_LINE_ONE  = re.compile(r"(Copyright\s+20[0-9][0-9]\s+Google)|(the Sputnik authors)")
-
-IETC_RE    = re.compile(r"[\\/][0-9]+\.[^\\/]+\.js$")
-IETC_LINE_ONE = re.compile(r"Microsoft Corporation")
-
-
+IETC_RE    = re.compile(r"[\\/][0-9]+(\.|_)[^\\/]+\.js$")
 
+DEBUG = False
 #------------------------------------------------------------------------------
 def getAllJSFiles(dirName):
     '''
@@ -53,27 +51,45 @@ def handleFile(filePath):
     with open(filePath, "rb") as f:
         origLines = f.readlines()
     
-    #Figure out which license header we'll be using
-    if GOOGLE_RE.search(filePath)!=None:
-        licenseHeader = GOOGLE_LICENSE
-        lineOne = GOOGLE_LINE_ONE
-    elif IETC_RE.search(filePath)!=None:
-        licenseHeader = MSFT_LICENSE
-        lineOne = IETC_LINE_ONE
-    else:
-        print "*!!!*:\t", filePath
-        return
-    
     #See if it's already there
-    if lineOne.search(origLines[0])!=None:
+    if NEW_LICENSE_FIRST_LINE.search(origLines[0])!=None:
+        #print "\talready there:\t", filePath
+        return
+    #TODO: Google employee needs to remove this elif 
+    #      and fix the next elif clause
+    elif GOOGLE_RE.search(filePath)!=None:
+        if DEBUG:
+            print "\tignoring Google sources:\t", filePath
         return
+    elif (IETC_RE.search(filePath))==None: #and (GOOGLE_RE.search(filePath)==None):
+        errMsg = "\tno idea which license should be used for:\t" + filePath
+        raise Exception(errMsg)
+        return
+    
+    with codecs.open(filePath,'r','utf8') as f:
+        bomPresent = f.read(2).startswith(u"\ufeff")
+        if bomPresent:
+            print "\tnon-ASCII file detected. Please modify by hand:", filePath
+            return
     
     with open(filePath, "wb") as f:
-        print "MODIFIED:\t", filePath
-        f.write(licenseHeader)
+        if DEBUG:
+            print "\tmodified:\t", filePath
+        #TODO: this isn't good enough...
+        #if bomPresent:
+        #    print "\tBOM was detected for:", filePath
+        #    f.write(u"\ufeff")
+        f.write(ECMA_LICENSE)
         
+        writeIt = False
         for line in origLines:
-            f.write(line)
+            if writeIt:
+                f.write(line)
+            elif OLD_LICENSE_LAST_LINE.search(line)!=None:
+                writeIt = True
+                
+        if not writeIt:
+            print "\tError - didn't find end of the original license:\t", filePath
 
 #--Main------------------------------------------------------------------------
 if __name__=="__main__":
-- 
GitLab