Installer import into contrib (real import this time)
[dragonfly.git] / contrib / bsdinstaller-1.1.6 / src / backend / lua / lib / configvars.lua
1 -- $Id: configvars.lua,v 1.1 2004/11/28 03:52:05 cpressey Exp $
2
3 require "app"
4 require "cmdchain"
5
6 --[[------------]]--
7 --[[ ConfigVars ]]--
8 --[[------------]]--
9
10 ConfigVars = {}
11 ConfigVars.new = function()
12         local cv = {}
13         local var = {}
14
15         cv.get = function(cv, name)
16                 return var[name]
17         end
18
19         cv.set = function(cv, name, value)
20                 var[name] = value
21         end
22
23         --
24         -- Populate this set of variables from a file.
25         --
26         -- This isn't perfect.  It doesn't handle variables
27         -- with embedded newlines, for example.  It also 
28         -- has to execute the script, which is undesirable.
29         --
30         cv.read = function(cv, filename, filetype)
31                 local cmds = CmdChain.new()
32                 local diff, i
33
34                 cmds:add(
35                    "set | ${root}${SORT} >${tmp}env.before",
36                     {
37                         cmdline = ". ${filename} && set | ${root}${SORT} >${tmp}env.after",
38                         replacements = {
39                             filename = filename
40                         }
41                     },
42                     {
43                         cmdline = "${root}${COMM} -1 -3 ${tmp}env.before ${tmp}env.after",
44                         capture = "comm"
45                     },
46                     "${root}${RM} -f  ${tmp}env.before ${tmp}env.after"
47                 )
48                 
49                 if not cmds:execute() then
50                         return false
51                 end
52
53                 diff = cmds:get_output("comm")
54                 for i in diff do
55                         local found, ends, k, v
56
57                         found, ends, k, v =
58                             string.find(diff[i], "^([^=]+)='(.*)'$")
59                         if found then
60                                 cv:set(k, v)
61                         else
62                                 found, ends, k, v =
63                                     string.find(diff[i], "^([^=]+)=(.*)$")
64                                 if found then
65                                         cv:set(k, v)
66                                 end
67                         end
68                 end
69
70                 return true
71         end
72
73         -- Write this set of configuration variable settings to a file.
74         cv.write = function(cv, filename, filetype)
75                 local k, v
76                 local file = io.open(filename, "a")
77                 local written = false
78
79                 if not file then
80                         return false
81                 end
82
83                 for k, v in var do
84                         if not written then
85                                 written = true
86                                 file:write("\n")
87                                 file:write("# -- BEGIN BSD Installer automatically generated configuration  -- #\n")
88                                 file:write("# -- Written on " .. os.date() .. " -- #\n")
89                         end
90
91                         file:write(k .. "='" .. v.. "'\n")
92                 end
93
94                 if written then
95                         file:write("# -- END of BSD Installer " ..
96                             "automatically generated configuration -- #\n")
97                 end
98
99                 file:close()
100                 
101                 return true
102         end
103
104         return cv
105 end