aboutsummaryrefslogtreecommitdiff
path: root/lib/os.nom
blob: 14ae82c488a84d23de723bf46f06eddfdb866839 (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
48
49
50
51
52
53
#!/usr/bin/env nomsu -V4.12.12.8
#
    This file defines some actions that interact with the operating system and filesystem.
    
test:
    assume (nomsu files for "core")

externally (files for %path) means:
    %files = (=lua "Files.list(\%path)")
    if %files:
        %files = (List %files)
    return %files

externally (nomsu files for %path) means:
    for %nomsupath in (%package.nomsupath::all matches of "[^;]+"):
        %files = (files for "\(%nomsupath)/\%path")
        if %files:
            return %files

externally (sh> %cmd) means:
    lua> "\
        ..local result = io.popen(\%cmd)
        local contents = result:read("*a")
        result:close()
        return contents"

test:
    read file "lib/os.nom"

externally (read file %filename) means (=lua "Files.read(\%filename)")
externally [..]
    write to file %filename %text, to file %filename write %text
    write %text to file %filename
..all mean:
    assume (%filename != "stdin") or barf "Cannot write to stdin"
    lua> "\
        ..local file = io.open(\%filename, 'w')
        file:write(\%text)
        file:close()"

externally (source lines of %tree) means:
    %source = (%tree.source if (%tree is syntax tree) else %tree)
    %file = (read file %source.filename)
    return (..)
        [..]
            :
                for % in (%file::line number at %source.start) to (..)
                    %file::line number at %source.stop
                ..: add (%file::line %)
        ..::joined with "\n"

externally (spoof file %text) means (%Files.spoof %text)
externally (spoof file %filename = %text) means (%Files.spoof %filename %text)