Admin/isa-migrate
author haftmann
Thu, 09 Jun 2005 11:04:54 +0200
changeset 16328 49c1f9dedc56
parent 16311 d35f37a24e24
child 16382 4fc8d8c99e9e
permissions -rw-r--r--
added CONTRIBUTORS
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     1
#!/usr/bin/env perl
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     2
#
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     3
# $Id$
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     4
# Author: Florian Haftmann, TUM
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     5
#
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     6
# A generic framework script for simple theory file migrations
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     7
# (under developement)
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     8
#
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
     9
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    10
use strict;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    11
use File::Find;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    12
use File::Basename;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    13
use File::Copy;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    14
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    15
# configuration
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    16
my @suffices = ('\.thy');
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    17
my $backupext = '.bak';
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    18
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    19
# migrator lookup hash
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    20
my %migrators = (
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    21
    id => sub {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    22
        my ($file, @content) = @_;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    23
    },
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    24
    thyheader => sub {
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    25
        my ($file, @content) = @_;
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    26
        $_ = join("", @content);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    27
        if (m!\G
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    28
                ^
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    29
                    theory\s+([^ ]+)
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    30
                    (?:\s+(?:imports|=)\s+([^:]*?))?
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    31
                    (?:\s+(?:files|uses)\s+([^:]*?))?
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    32
                    \s*(?:begin|:)
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    33
             !cgomsx) {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    34
            # STRATEGIE: abschnittsweises matchen, zwischendurch immer wieder whitespace
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    35
            # verarbeiten
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    36
        }
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    37
    }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    38
);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    39
16311
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    40
# utility functions
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    41
sub skip_wscomment {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    42
    my $commentlevel = 0;
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    43
    my @skipped = ();
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    44
    while () {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    45
        if (m!\G\{\*!cgoms) {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    46
            push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    47
            $commentlevel++;
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    48
        } elsif ($commentlevel > 0) {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    49
            if (m!\G\*\}!cgoms) {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    50
                push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    51
                $commentlevel--;
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    52
            } elsif (m!\G(?:
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    53
                        [^{*]|\*[^{}]|\{[^*]
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    54
                       )*!cgomsx) {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    55
                push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    56
            } else {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    57
                die ("probably incorrectly nested comment");
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    58
            }
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    59
        } elsif (m!\G\s+!cgoms) {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    60
            push(@skipped, $&);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    61
        } else {
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    62
            return join('', @skipped);
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    63
        }
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    64
    }
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    65
}
d35f37a24e24 started migration framwork script
haftmann
parents: 16310
diff changeset
    66
16310
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    67
# process dir tree
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    68
sub process_tree {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    69
    my ($root, $migrator, $backupext) = @_;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    70
    find(sub { process($File::Find::name, $migrator, $backupext) }, $root);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    71
}
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    72
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    73
# process single file
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    74
sub process {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    75
    my ($file, $migrator, $backupext) = @_;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    76
    my ($basename, $dirname, $ext) = fileparse($file, @suffices);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    77
    #~ print "$file\n";
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    78
    if ($ext) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    79
        open ISTREAM, $file or die("error opening $file");
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    80
        my @content = <ISTREAM>;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    81
        close ISTREAM;
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    82
        if ($backupext) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    83
            copy($file, "$file$backupext");
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    84
        }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    85
        print "Migrating $file...\n";
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    86
        &$migrator($file, @content);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    87
    }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    88
}
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    89
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    90
# first argument: migrator name
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    91
my $migrator = $migrators{shift @ARGV};
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    92
$migrator or die ("invalid migrator name");
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    93
# other arguments: files or trees
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    94
foreach my $fileloc (@ARGV) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    95
    -e $fileloc or die ("no file $fileloc");
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    96
}
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    97
foreach my $fileloc (@ARGV) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    98
    if (-d $fileloc) {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
    99
        process_tree($fileloc, $migrator, $backupext);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   100
    } else {
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   101
        process($fileloc, $migrator, $backupext);
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   102
    }
2115e519e456 added basics for generic migration tool
haftmann
parents:
diff changeset
   103
}