Starting with inventory:
0000034152-daa74e60232d34047a4aa2e0accb1a8c923419f1d4318671fb1b698db20d14a5
[TAG release-2.2.3
clinton@unknownlamer.org**20081113004437] 
hash: 0000024955-30db7036aac501ac78a4a02e39a4c8fb718b7823b5c06de8116ae4f6b7d28f61
[Remove generated texinfo from repository
clinton@unknownlamer.org**20081113004739] 
hash: 0000125543-149964e9f86ef4450678d243dacbc291100541a33c89e6ae96716187130c4cf3
[Update version numbers
clinton@unknownlamer.org**20081113004940] 
hash: 0000000400-cca73bc03e7782145f437facd0ec144aa7f646fa2b10efef987aa10a5f5c93eb
[Encapsulate obscure detail that lower numeric priority is higher queue priority
clinton@unknownlamer.org**20081113064551] 
hash: 0000000583-08dbf42592b29f14bfcbf3ff0b1b3f0ef69cdaac1af7020175d4a3ab3c745bc0
[Basic multithreading support
clinton@unknownlamer.org**20081113080934
 * BotMutex class provides a mutex that turns into a noop when
   threading is disabled
 * BotLock provides an automatic lock/unlock pairing within a block
 * Once everything has been made threadsafe using multiple Guile
   threads that access the bot will not corrupt any internal data
   structures
] 
hash: 0000004600-df3cc9d0cd00006e8aa8791df5c0d9546f1c62c29c9264f58ea2024d131f2c38
[Made ServerQueue threadsafe
clinton@unknownlamer.org**20081113080954] 
hash: 0000000742-0af360f1c79579932a1a5cd2df42f30c4d362492875227fd0632072e67d23275
[Make rate limiting penalties less severe
clinton@unknownlamer.org**20081113091110
 * The max rate limit penalty is now 20 instead of 5 making the bot
   more responsive without making it flood; this seems like a
   reasonable value but may need to be further tweaked
 * No longer unconditionally add `1' to penalty to decrease the
   likelihood of the queue being saturated and never getting further
   than popping the first message
] 
hash: 0000000869-8cbb91390593372573bbb1993ed2b487ab19e8928aa9eb1a5274477268d0c85b
[Forgot header #ifdef guard
clinton@unknownlamer.org**20081113112451] 
hash: 0000000293-89b688043c98a460bc5b50506379dc51303428249b8c25615e31087172fd0000
[Add indirect comparison predicate
clinton@unknownlamer.org**20081113112557
 * Used to sort containers of pointers using the pointed to objects'
   comparison methods
] 
hash: 0000000652-f3f0151da6889b450a979834f8808cde042c4ae2527bd883ea5fe95511556a41
[Cease including Bot.H in Utils.H
clinton@unknownlamer.org**20081113112804
 And miscellaneous cleanup as a result. Owing to Bot.H being included
 by Utils.H no header mentioned in Bot.H could include Utils.H (not a
 problem except in an upcoming revision of BotInterp.H)
] 
hash: 0000000496-7972dc366d36571f2b767906e053bd89670db217c0a9ab3396fc1b3891804129
[Add recursive mutex support to BotMutex
clinton@unknownlamer.org**20081113221602] 
hash: 0000000630-828cc9e6365c49f9838b94238b083b17d5fe66eef17bef46e1efb3c0c65c8d79
[Make Scheme hooks and timers threadsafe
clinton@unknownlamer.org**20081113222011
 * Timers are now maintained as a sorted list
 * Timer callbacks and other threads can call bot:[add|del]timer
 * Running hooks presently *cannot* call bot:addhook.
] 
hash: 0000004626-0fb9b0443b173c49d13f912f0a5cada7061d8596b3ab8bd0ebf058fa6184d319
[Factor out sorted list insertion into utility function
clinton@unknownlamer.org**20081115210311] 
hash: 0000000852-056921f33d5acf110f64388545911f518097dfd8ad0a5aa3a3f8b2393855eb74
[Move Hook `operator<' to BotInterp.C (cleaner source...)
clinton@unknownlamer.org**20081115210429] 
hash: 0000001180-abeefb9d3e9db7ef844992c122445e5c17251fddb7af76401df52cfe5e11f23b
[Enhance threadsafety of Hooks and improve generally
clinton@unknownlamer.org**20081115210917
 * bot:addhook may now be called from within a hook
   - hook mutex is recursive
   - It is unspecified whether a newly added hook will first run on the
     current or next hook match; depending on the properties of the
     hook either may occur
 * Use general sorted list utilities instead of pushing to the back and
   doing a full sort on each add
 * Incidentally replace String usage with std::string
] 
hash: 0000005737-0dc35db8145d44c4f0149e71885178750f2de6d048ea57f1db292ef40a234a02
[Improve include dependencies
clinton@unknownlamer.org**20081115230429
 Working on the bot was a bit intolerable as almost everything
 unnecessarily depended on just about everything else. This has been
 rectified reducing rebuild time quite a bit.
] 
hash: 0000012779-11b8a17e0dedd2ab8ced14da798a946e9a4bb98cf68aa7d3a2afc876c51e6882
[Add const qualifiers to Mask methods
clinton@unknownlamer.org**20081116000821] 
hash: 0000000763-ae21b9582c1aac07a0a9da86e02b5df7f433cdb9c880244e937c9debf1e7f546
[Improve BanEntry
clinton@unknownlamer.org**20081116000959
 * No longer has any friend classes
 * BanEntry::getMask returns the actual Mask instead of the internal
   mask String
   - Updated all users of BanEntry to use slightly different interface
] 
hash: 0000002416-4371fabc49585f4d5ca36a07d2469d085c1eaf2f0673cbcc4711a53134c16935
[Remove useless class constructor prototype
clinton@unknownlamer.org**20081116004438] 
hash: 0000000126-1347ec1822dafd67ae25e98ca72bddcaf3e5d0c6c2226f7b540c686e99116f7c
[Directly take a Mask instead of a String in BanEntry
clinton@unknownlamer.org**20081116004507] 
hash: 0000000314-652c94cd2a2dc12088e09932a546b2e26227b13c35a92da7f9185bde78ed2f0c
[Slightly better Utils::push_sorted
clinton@unknownlamer.org**20081118214148
 No need to special case the not found case
] 
hash: 0000000516-42d7488c8b1481aed3e385c3f52e697df59e59ea5a7ef5bdeab3a42dd78f366d
[Remove stray debugging code
clinton@unknownlamer.org**20081118230845] 
hash: 0000000439-1f19e1122a6993b68f281160c486dfc94b7960822ebdfaa1f3f74f63c42a573a
[Implement threadsafe banlist and make maintenance of bans cleaner
clinton@unknownlamer.org**20081118231618
 * BanList is now a separate class instead of being part of the channel
 * Channels now expire their own bans eliminating the TodoList class
 * UserCommands::TBan converted to use Commands::TBan
 * Channel::addBan/delBan now handles sending channel modes eliminating
   some duplicated code
 * All users of the channelBanlist have been updated to use the new
   interface
] 
hash: 0000018260-34503a566b96c39b2c458199e7810de2b2503d2a72ab1299d2d14b2d1248cc09
[Mark mutex as mutable in BanList to fix building issues
clinton@unknownlamer.org**20090222201115
 Ignore-this: de585886c082f8b84af94629edbc0039
] 
hash: 0000000227-a40a67de9fad418d8be92594240e0db235cbc75a556b11d30a10e7c574bba2c9
[Remove String->const char* conversion operator in favor of c_str method
clinton@unknownlamer.org**20090223234338
 Ignore-this: 61564b24ce222d336330f5dc07713854
 This was dumb to begin with (I reserve the right to be mean to my
 younger self) and really only caused a number of evil cases of
 ambiguious overloading whenever a String and std::string are used
 together.
] 
hash: 0000006002-8084d35ff03118d2a8e5aa68d2d972326aaab903f28c9f969e4190a1367fac5c
[Update copyright years
clinton@unknownlamer.org**20090223234415
 Ignore-this: 525ec40d1c80a10c45c02976d2e26bf8
] 
hash: 0000000439-3f20e8b4024c8332d59db937c7c96f6228b76e375709524bd099431e0611194e
[Add a few minor TODO notes
clinton@unknownlamer.org**20090223234427
 Ignore-this: 4eb1e957a9f9941325bfc20fea390701
] 
hash: 0000000546-ca8ba093ed937f2386bc5df2bbf4f6aef2ed1a22942c89a9bb5a628c023acee0
[Split user list from Channel into ChannelUserList
clinton@unknownlamer.org**20090223234748
 Ignore-this: 557cbde4df29ff2f16d1d29ce81f36b2
 This patch is *huge* and potentially introduces a few bug, but it
 *seems* ok so far. The ChannelUserList ought to be threadsafe; it was
 necessary to do this as soon I will be added a bot:channel-users
 function to the Scheme interface.
 
 Doing this, naturally, exposed a number of horrid design issues that
 I, as always, chose to ignore for now and instead merely cleaned up
 one aspect as best as it could be given the surrounding muck. (ok,
 Bobot++ isn't *terrible* but everything touches the internals of
 everything so now they all have the Clap because one class caught it).
] 
hash: 0000041865-831135436d00198d43a68df9214ea6f86674d48c61609989eda2dd01b42217dc
[Fix minor issue with logfile 
clinton@unknownlamer.org**20090224035003
 Ignore-this: 97c7b1eac19151e5dbe9c592e26b2dfa
 Oops, logFileName is a class member and not a local
 variable...prepending it with the logs_dir is not ok.
] 
hash: 0000000625-eb6184ab70949dc019b454a899f260bf99f32db5af0cea61046517257936bfd8
[Implement `bot:channel-users' Scheme function
clinton@unknownlamer.org**20090224080204
 Ignore-this: b85ffcca945a431327c5d83212b29528
 Returns a list of users in a channel. The user objects are opaque and
 should only be accessed via the accessors:
 
  * `bot:channel-user-nick' user => nickname
  * `bot:channel-user-user/host' user => user@host string
  * `bot:channel-user-mode' user => channel mode bitvector
 
 The channel mode bitvector may further inspected using:
 
  * `bot:channel-user-has-modes?' user . modes => boolean
 
 Where MODES is a list of mode identifiers. Valid values are:
 
  * `bot:mode/op'
  * `bot:mode/voice'
  * `bot:mode/away'
  * `bot:mode/ircop'
 
 Convenience functions for checking individual mode flags are
 available:
 
  * `bot:channel-user-op?' user => boolean
  * `bot:channel-user-voice?' user => boolean
  * `bot:channel-user-away?' user => boolean
  * `bot:channel-user-ircop' user => boolean
 
 Additionally some futzing with other bits are included because C++ is
 an evil language and I had to beat it gently with a hammer until it
 did what I wanted.
] 
hash: 0000004184-b51e9368dc2268df07c9b55f1bc4a97dde26ece76d37b6c619879b3719ea0b8b
[Use ACX_PTHREAD to handle pthread library name resolution and whatnot
clinton@unknownlamer.org**20090730164623
 Ignore-this: 6f55991391766ac230c8c7f7f46bf7fa
] 
hash: 0000012034-9c1c6b7700fb603e296729801d3db4d2ce3468ff05df14a4a9dc669481a848ef
[Use scm_primitive_load_path instead of scm_primitive_load
clinton@unknownlamer.org**20090730165137
 Ignore-this: 785213de5179593b1d3a5a4c0825d0be
] 
hash: 0000000564-68a312a3790b1677e9d4b638eb108af724a10cbdb0865a68b5d296b6e5fd93d8
[Remove `bot:load' in favor of `load-from-path'
clinton@unknownlamer.org**20090730165400
 Ignore-this: 24800fb46fb93499f232bc1cebd751
 * Removed %bot:loadpath and instead push the bobot++ script
   directories onto the global load path
 * Removed bot:load definition instead defining it to be an alias for
   load-from-path
] 
hash: 0000001371-0a5c26ed107ea8502c3cca2ae7511860d02cb2902038687f32e17fe82f726e55
[Update news
clinton@unknownlamer.org**20090904134436
 Ignore-this: 41b38521c1d17c28212849a9005c91a0
] 
hash: 0000000303-f99f84605e24964a682f3c2e2f9bc73a0f97c5bf1d82861b26044e17b4301bcc
[Misc cleanup in bobot utils
clinton@unknownlamer.org**20090904134858
 Ignore-this: a81af7e1b4507a1d4e80ac5abfd28ba7
 Split module->string into a toplevel binding, removed whitespace, etc.
] 
hash: 0000000913-e929166272ac54dd3fcbd7cb92b5f32aa4acdb68a1f272c7f6499eb6fca27ee2
[Fix bot module loading in Guile 1.9.x+
clinton@unknownlamer.org**20090904135128
 Ignore-this: 6df15fc52d53b47b444102b6cda23ddd
 First this bug manifested itself because `load' did not run at compile
 time causing issues with macroexpansion in bot modules. Then Guile was
 updated so that load occurs at compile time, but then
 `primitive-load-path' could not find any files. This was easier to
 fix: `%load-path' is altered at compile time now.
] 
hash: 0000000764-9a09ebc75b8c1a17cbf1fd377578b63c8316ca81783abd4dea7645105a49faef
[Undo change for scm_primitive_load_path arity change
clinton@unknownlamer.org**20091026182430
 Ignore-this: 4182c862ffd5cf0971795bc35fabc5b3
 The arity was changed back in git master
] 
hash: 0000000358-0a93c0a8cb15a38ec107907eebda4399cc01aa3197548eba95fe137b8d5d2cb3
