From ec2cf4af377af41d03e5110e25bd817305a087bf Mon Sep 17 00:00:00 2001 From: James Lu Date: Fri, 27 Oct 2017 23:34:08 -0700 Subject: [PATCH] Owner: fix 'unload' writing duplicate entries to supybot.plugins Fetch the existing plugin callback to determine the plugin's name in the right case. Closes #1295. --- plugins/Owner/plugin.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/plugins/Owner/plugin.py b/plugins/Owner/plugin.py index 068f0026f..07dc88a5d 100644 --- a/plugins/Owner/plugin.py +++ b/plugins/Owner/plugin.py @@ -499,16 +499,21 @@ class Owner(callbacks.Plugin): return # Let's do this so even if the plugin isn't currently loaded, it doesn't # stay attempting to load. - conf.registerPlugin(name, False) - callbacks = irc.removeCallback(name) - if callbacks: - for callback in callbacks: - callback.die() - del callback - gc.collect() - irc.replySuccess() - else: - irc.error('There was no plugin %s.' % name) + old_callback = irc.getCallback(name) + if old_callback: + # Normalize the plugin case to prevent duplicate registration + # entries, https://github.com/ProgVal/Limnoria/issues/1295 + name = old_callback.name() + conf.registerPlugin(name, False) + callbacks = irc.removeCallback(name) + if callbacks: + for callback in callbacks: + callback.die() + del callback + gc.collect() + irc.replySuccess() + return + irc.error('There was no plugin %s.' % name) unload = wrap(unload, ['something']) def defaultcapability(self, irc, msg, args, action, capability):