15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#!/usr/bin/perl -w
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# are met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 1.  Redistributions of source code must retain the above copyright
10fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#     notice, this list of conditions and the following disclaimer.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 2.  Redistributions in binary form must reproduce the above copyright
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     notice, this list of conditions and the following disclaimer in the
13fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#     documentation and/or other materials provided with the distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#     its contributors may be used to endorse or promote products derived
16fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#     from this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Script to do file renaming.
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use strict;
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use File::Find;
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use FindBin;
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use lib $FindBin::Bin;
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use webkitdirs;
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use VCSUtils;
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)setConfiguration();
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)chdirWebKit();
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my %words;
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# find all files we want to process
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my @paths;
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)find(\&wanted, "Source/JavaScriptCore");
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)find(\&wanted, "Source/WebCore");
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)find(\&wanted, "WebKit");
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)find(\&wanted, "Source/WebKit2");
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)sub wanted
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $file = $_;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if ($file eq "icu") {
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        $File::Find::prune = 1;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if ($file =~ /^\../) {
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        $File::Find::prune = 1;
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return if $file =~ /^ChangeLog/;
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return if -d $file;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    push @paths, $File::Find::name;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my %renames = (
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles));
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my %renamesContemplatedForTheFuture = (
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles));
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# rename files
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my %newFile;
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)for my $file (sort @paths) {
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $f = $file;
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    $f = "$1$renames{$2}" if $f =~ /^(.*\/)(\w+\.\w+)$/ && $renames{$2};
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    $newFile{$file} = $f if $f ne $file;
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)for my $file (sort @paths) {
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if ($newFile{$file}) {
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        my $newFile = $newFile{$file};
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        print "Renaming $file to $newFile\n";
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        scmMoveOrRenameFile($file, $newFile);
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# change all file contents
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)for my $file (sort @paths) {
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    $file = $newFile{$file} if $newFile{$file};
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $contents;
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        local $/;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        open FILE, $file or die;
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        $contents = <FILE>;
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        close FILE;
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    my $newContents = $contents;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    for my $from (keys %renames) {
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        $newContents =~ s/\b\Q$from\E(?!\w)/$renames{$from}/g; # this " unconfuses Xcode syntax highlighting
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if ($newContents ne $contents) {
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        open FILE, ">", $file or die;
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        print FILE $newContents;
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        close FILE;
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
117