yaml-merge

changeset 0
0757d85e604b
child 2
0653a782618c
equal deleted inserted replaced
-1:000000000000 0:0757d85e604b
1 #!/usr/bin/env lua5.1
2
3 local yaml = require "yaml";
4
5 function merge_in(t1, t2, depth)
6 depth = depth or 0;
7 if type(t1) == "table" and type(t2) == "table" then
8 local array = {};
9 if depth < 2 then -- numeric
10 for i,v in ipairs(t1) do
11 array[v] = true;
12 t1[i] = nil;
13 end
14 for i,v in ipairs(t2) do
15 array[v] = true;
16 end
17 end
18 for k,v in pairs(t2) do -- non-numeric
19 if not(type(k) == "number" and array[v]) then -- fixme, merge non-numeric
20 t1[k] = merge_in(t1[k], v, depth + 1);
21 end
22 end
23 for v in pairs(array) do
24 table.insert(t1, v);
25 end
26 elseif t2 ~= nil then
27 t1 = t2;
28 end
29 return t1;
30 end
31
32 local out = {};
33 for i, fn in ipairs(arg) do
34 local f = assert(io.open(fn, "r"));
35 merge_in(out, yaml.load(f:read("*a")));
36 f:close();
37 end
38
39 print(yaml.dump(out));

mercurial