aboutsummaryrefslogtreecommitdiff
path: root/lib/tools/upgrade.nom
blob: 65e9e6833ae3e5d8444dd7e0ae9adda255058781 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env nomsu -V7.0.0

###
    Tool to automatically update code from old versions of Nomsu. Usage:
    nomsu tools/upgrade.nom [-i] file1 file2 directory1 ...
    If "-i" is the first argument, upgrades will be performed in-place. Otherwise, the
    upgraded code will be printed.
    
use "compatibility"
use "filesystem"
use "consolecolor"
use "commandline"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

command line program with $args:
    $inplace = ($args.i or $args.inplace)
    $start_version = $args."upgrade-from"
    if $start_version:
        try:
            use $start_version
    $version = ($args."upgrade-to" or $(NOMSU VERSION))
    $test = ($args.t or $args.test)
    for $filename in $args.extras:
        $file = (read file $filename)
        unless $file:
            fail "File does not exist: \$filename"
        $leading_indent = ($file, matching "\n*([ ]*)")
        $code = (NomsuCode from (Source $filename 1 #$file) $file)
        $tree = ($code parsed $start_version)
        $uptree =
            $tree upgraded from ($start_version or ($tree.version or $(NOMSU VERSION))) to
                $version
        $text = "\$leading_indent\($uptree as nomsu, text, with "\n" -> "\n\$leading_indent")"
        when:
            $inplace:
                say "Upgraded \$filename"
                write $text to file $filename
            
            $test:
                if ($uptree == $tree):
                    say (dim "\$filename will not be changed")
                ..else:
                    say (bright "\$filename will be changed")
            
            else:
                say $text inline