comparison mod_storage_appendmap/mod_storage_appendmap.lua @ 5691:78f766372e2c

mod_storage_appendmap: Include timestamps when appending data Meant to give some sense of when each piece of data was added, to aid in debugging changes or manual rollbacks.
author Kim Alvefur <zash@zash.se>
date Sun, 05 Nov 2023 21:06:23 +0100
parents ea6c18ec0669
children
comparison
equal deleted inserted replaced
5690:ea6c18ec0669 5691:78f766372e2c
1 local dump = require "util.serialization".serialize; 1 local dump = require "util.serialization".serialize;
2 local load = require "util.envload".envloadfile; 2 local load = require "util.envload".envloadfile;
3 local datetime = require "util.datetime".datetime;
3 local dm = require "core.storagemanager".olddm; 4 local dm = require "core.storagemanager".olddm;
4 5
5 local REMOVE = {}; -- Special value for removing keys 6 local REMOVE = {}; -- Special value for removing keys
6 7
7 local driver = {}; 8 local driver = {};
8 9
10 local timestamps = module:get_option_boolean("appendmap_timestamps", true);
9 11
10 local keywords = { 12 local keywords = {
11 ["do"] = true; ["and"] = true; ["else"] = true; ["break"] = true; 13 ["do"] = true; ["and"] = true; ["else"] = true; ["break"] = true;
12 ["if"] = true; ["end"] = true; ["goto"] = true; ["false"] = true; 14 ["if"] = true; ["end"] = true; ["goto"] = true; ["false"] = true;
13 ["in"] = true; ["for"] = true; ["then"] = true; ["local"] = true; 15 ["in"] = true; ["for"] = true; ["then"] = true; ["local"] = true;
80 return env[key]; 82 return env[key];
81 end 83 end
82 84
83 function map:set_keys(user, keyvalues) 85 function map:set_keys(user, keyvalues)
84 local data = serialize_map(keyvalues); 86 local data = serialize_map(keyvalues);
87 if timestamps then
88 data = "-- " .. datetime() .. "\n" .. data;
89 end
85 return dm.append_raw(user, module.host, self.store, "map", data); 90 return dm.append_raw(user, module.host, self.store, "map", data);
86 end 91 end
87 92
88 function map:set(user, key, value) 93 function map:set(user, key, value)
89 if _VERSION == "Lua 5.1" then 94 if _VERSION == "Lua 5.1" then
92 if key == nil then 97 if key == nil then
93 local filename = dm.getpath(user, module.host, self.store, "map"); 98 local filename = dm.getpath(user, module.host, self.store, "map");
94 return os.remove(filename); 99 return os.remove(filename);
95 end 100 end
96 local data = serialize_pair(key, value); 101 local data = serialize_pair(key, value);
102 if timestamps then
103 data = "-- " .. datetime() .. "\n" .. data;
104 end
97 return dm.append_raw(user, module.host, self.store, "map", data); 105 return dm.append_raw(user, module.host, self.store, "map", data);
98 end 106 end
99 107
100 function map:items() 108 function map:items()
101 return dm.users(module.host, self.store, "map"); 109 return dm.users(module.host, self.store, "map");
108 return map.get(self, user, nil); 116 return map.get(self, user, nil);
109 end 117 end
110 118
111 function keyval:set(user, keyvalues) 119 function keyval:set(user, keyvalues)
112 local data = serialize_map(keyvalues); 120 local data = serialize_map(keyvalues);
121 if timestamps then
122 data = "-- " .. datetime() .. "\n" .. data;
123 end
113 return dm.store_raw(dm.getpath(user, module.host, self.store, "map"), data); 124 return dm.store_raw(dm.getpath(user, module.host, self.store, "map"), data);
114 end 125 end
115 126
116 function keyval:users() 127 function keyval:users()
117 return dm.users(module.host, self.store, "map"); 128 return dm.users(module.host, self.store, "map");