aboutsummaryrefslogtreecommitdiff
path: root/examples/extending-augeas/aug-fileErrorMsg.js
blob: f74caeab3517c5f793520816514d74d69390aa85 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var libaugeas = require('../../build/Release/libaugeas');

/*
 * This module overrides function createAugeas() from libaugeas,
 * so that created Augeas object has two additional functions:
 * fileErrorMsg(fname) and dumpFileErrors().
 */



// Error message formatter, sample return value:
// "/etc/mke2fs.conf:3:0: Get did not match entire input"
function file_error(fname) {
    var aug = this;
    var base = "/augeas/files" + fname + "/error";
    var msg = aug.get(base + "/message");
    var line = aug.get(base + "/line");
    var col = aug.get(base + "/char");

    var ret = undefined;

    if (aug.nmatch(base)) {
        ret = fname;
        if (line)
            ret += ":" + line;
        if (col)
            ret += ":" + col;

        if (msg)
            ret += ": " + msg;
        else
            ret += ": unknown error";
    }
    
    return ret;
}

// Returns an array of error messages for every file with error:
function dump_file_error() {
    var aug = this;

    var files_with_errors =
        aug.match(
                '/augeas/files/*/*[error]'
        ).map(function(s){
            return s.substr(13); // cutoff /augeas/files: 13 = strlen(/augeas/files)
         });

    var res = 
        files_with_errors.map(function(fname){
            return aug.fileErrorMsg(fname);
        });

    return res;
}

function createAugeas(cb) {
    if (undefined == cb) {
        var aug = libaugeas.createAugeas();
        aug.fileErrorMsg = file_error;
        aug.dumpFileErrors = dump_file_error;
        return aug;
    } else {
        libaugeas.createAugeas(function(aug) {
            aug.fileErrorMsg = file_error;
            aug.dumpFileErrors = dump_file_error;
            cb(aug);
        })
    }
}

exports.createAugeas = createAugeas;