Class Irc::Bot::Registry
In: lib/rbot/registry/bdb.rb
lib/rbot/registry/tc.rb
Parent: Object
BasicUserMessage JoinMessage NamesMessage WhoisMessage ModeChangeMessage KickMessage MotdMessage QuitMessage BanlistMessage UserMessage NoSuchTargetMessage TopicMessage NickMessage WelcomeMessage UnknownMessage InviteMessage PartMessage NetmaskList UserList ArrayOf ChannelList Netmask User\n[lib/rbot/botuser.rb\nlib/rbot/irc.rb] Channel Singleton RfcCasemap StrictRfcCasemap AsciiCasemap Casemap PrivMessage NoticeMessage TokyoCabinet::BDB CIBDB Btree CIBtree Socket MessageQueue QueueRing Client DBHash\n[lib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] DBTree\n[lib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] Server NetmaskDb Bot\n[lib/rbot/botuser.rb\nlib/rbot/config.rb\nlib/rbot/ircbot.rb\nlib/rbot/language.rb\nlib/rbot/message.rb\nlib/rbot/messagemapper.rb\nlib/rbot/plugins.rb\nlib/rbot/rbotconfig.rb\nlib/rbot/registry/bdb.rb\nlib/rbot/registry/tc.rb] lib/rbot/ircsocket.rb lib/rbot/rfc2812.rb lib/rbot/registry/tc.rb lib/rbot/irc.rb lib/rbot/maskdb.rb lib/rbot/message.rb lib/rbot/messagemapper.rb lib/rbot/botuser.rb lib/rbot/registry/tc.rb (null) BotConfig PKGConfig ServerOrCasemap Irc dot/m_35_0.png

This class is now used purely for upgrading from prior versions of rbot the new registry is split into multiple DBHash objects, one per plugin

Methods

Classes and Modules

Class Irc::Bot::Registry::Accessor

Public Class methods

[Source]

     # File lib/rbot/registry/bdb.rb, line 213
213:     def initialize(bot)
214:       @bot = bot
215:       upgrade_data
216:       upgrade_data2
217:     end

[Source]

     # File lib/rbot/registry/tc.rb, line 184
184:     def initialize(bot)
185:       @bot = bot
186:       upgrade_data
187:       upgrade_data2
188:     end

Public Instance methods

check for older versions of rbot with data formats that require updating NB this function is called early in init(), pretty much all you have to work with is @bot.botclass.

[Source]

     # File lib/rbot/registry/tc.rb, line 193
193:     def upgrade_data
194:       if defined? DBHash
195:         oldreg = @bot.path 'registry.db'
196:         newreg = @bot.path 'plugin_registry.db'
197:         if File.exist?(oldreg)
198:           log _("upgrading old-style (rbot 0.9.5 or earlier) plugin registry to new format")
199:           old = ::BDB::Hash.open(oldreg, nil, "r+", 0600)
200:           new = TokyoCabinet::CIBDB.new
201:           new.open(name, TokyoCabinet::CIBDB::OREADER | TokyoCabinet::CIBDB::OCREAT | TokyoCabinet::CIBDB::OWRITER)
202:           old.each_key do |k|
203:             new.outlist k
204:             new.putlist k, (old.duplicates(k, false))
205:           end
206:           old.close
207:           new.close
208:           File.rename(oldreg, oldreg + ".old")
209:         end
210:       else
211:         warning "Won't upgrade data: BDB not installed"
212:       end
213:     end

check for older versions of rbot with data formats that require updating NB this function is called early in init(), pretty much all you have to work with is @bot.botclass.

[Source]

     # File lib/rbot/registry/bdb.rb, line 222
222:     def upgrade_data
223:       oldreg = @bot.path 'registry.db'
224:       newreg = @bot.path 'plugin_registry.db'
225:       if File.exist?(oldreg)
226:         log _("upgrading old-style (rbot 0.9.5 or earlier) plugin registry to new format")
227:         old = BDB::Hash.open(oldreg, nil, "r+", 0600)
228:         new = BDB::CIBtree.open(newreg, nil, BDB::CREATE | BDB::EXCL, 0600)
229:         old.each {|k,v|
230:           new[k] = v
231:         }
232:         old.close
233:         new.close
234:         File.rename(oldreg, oldreg + ".old")
235:       end
236:     end

[Source]

     # File lib/rbot/registry/bdb.rb, line 238
238:     def upgrade_data2
239:       oldreg = @bot.path 'plugin_registry.db'
240:       newdir = @bot.path 'registry'
241:       if File.exist?(oldreg)
242:         Dir.mkdir(newdir) unless File.exist?(newdir)
243:         env = BDB::Env.open(@bot.botclass, BDB::INIT_TRANSACTION | BDB::CREATE | BDB::RECOVER)# | BDB::TXN_NOSYNC)
244:         dbs = Hash.new
245:         log _("upgrading previous (rbot 0.9.9 or earlier) plugin registry to new split format")
246:         old = BDB::CIBtree.open(oldreg, nil, "r+", 0600, "env" => env)
247:         old.each {|k,v|
248:           prefix,key = k.split("/", 2)
249:           prefix.downcase!
250:           # subregistries were split with a +, now they are in separate folders
251:           if prefix.gsub!(/\+/, "/")
252:             # Ok, this code needs to be put in the db opening routines
253:             dirs = File.dirname("#{@bot.botclass}/registry/#{prefix}.db").split("/")
254:             dirs.length.times { |i|
255:               dir = dirs[0,i+1].join("/")+"/"
256:               unless File.exist?(dir)
257:                 log _("creating subregistry directory #{dir}")
258:                 Dir.mkdir(dir)
259:               end
260:             }
261:           end
262:           unless dbs.has_key?(prefix)
263:             log _("creating db #{@bot.botclass}/registry/#{prefix}.db")
264:             dbs[prefix] = BDB::CIBtree.open("#{@bot.botclass}/registry/#{prefix}.db",
265:               nil, BDB::CREATE | BDB::EXCL,
266:               0600, "env" => env)
267:           end
268:           dbs[prefix][key] = v
269:         }
270:         old.close
271:         File.rename(oldreg, oldreg + ".old")
272:         dbs.each {|k,v|
273:           log _("closing db #{k}")
274:           v.close
275:         }
276:         env.close
277:       end
278:     end

[Source]

     # File lib/rbot/registry/tc.rb, line 215
215:     def upgrade_data2
216:       oldreg = @bot.path 'plugin_registry.db'
217:       newdir = @bot.path 'registry'
218:       if File.exist?(oldreg)
219:         Dir.mkdir(newdir) unless File.exist?(newdir)
220:         env = BDB::Env.open(@bot.botclass, BDB::INIT_TRANSACTION | BDB::CREATE | BDB::RECOVER)# | BDB::TXN_NOSYNC)
221:         dbs = Hash.new
222:         log _("upgrading previous (rbot 0.9.9 or earlier) plugin registry to new split format")
223:         old = BDB::CIBtree.open(oldreg, nil, "r+", 0600, "env" => env)
224:         old.each {|k,v|
225:           prefix,key = k.split("/", 2)
226:           prefix.downcase!
227:           # subregistries were split with a +, now they are in separate folders
228:           if prefix.gsub!(/\+/, "/")
229:             # Ok, this code needs to be put in the db opening routines
230:             dirs = File.dirname("#{@bot.botclass}/registry/#{prefix}.db").split("/")
231:             dirs.length.times { |i|
232:               dir = dirs[0,i+1].join("/")+"/"
233:               unless File.exist?(dir)
234:                 log _("creating subregistry directory #{dir}")
235:                 Dir.mkdir(dir)
236:               end
237:             }
238:           end
239:           unless dbs.has_key?(prefix)
240:             log _("creating db #{@bot.botclass}/registry/#{prefix}.db")
241:             dbs[prefix] = TokyoCabinet::CIBDB.open("#{@bot.botclass}/registry/#{prefix}.db",
242:              TokyoCabinet::CIBDB::OREADER | TokyoCabinet::CIBDB::OCREAT | TokyoCabinet::CIBDB::OWRITER)
243:           end
244:           dbs[prefix][key] = v
245:         }
246:         old.close
247:         File.rename(oldreg, oldreg + ".old")
248:         dbs.each {|k,v|
249:           log _("closing db #{k}")
250:           v.close
251:         }
252:         env.close
253:       end
254:     end

[Validate]