Cherrypick improved zipfile support from Niall Douglas.
authorNiall Douglas (a [underscors] sourceforge {at} nedprod [dot] com) <spam@spamtrap.com>
Wed, 22 Feb 2012 17:46:06 +0000 (17:46 +0000)
committerW. Trevor King <wking@tremily.us>
Thu, 23 Aug 2012 16:39:07 +0000 (12:39 -0400)
WTK: This is the meat of Niall's

  commit 4632cb6d22faa7220540f92af67693084f80f033
  Author: Niall Douglas ...
  Date:   Wed Feb 22 17:46:06 2012 +0000

    Fixed small bug where running from inside zip support was over
    preferring .pyc files

libbe/util/plugin.py

index 1fee690fe0aa1db7119bf9204bee983402747d0c..63715a067f7b3fae1fef31060d20db81c2d3d542 100644 (file)
@@ -72,17 +72,23 @@ def modnames(prefix):
     components = prefix.split('.')
     modfilespath=os.path.join(_PLUGIN_PATH, *components)
     # Cope if we are executing from inside a zip archive full of precompiled .pyc's
-    modfiles=ziplistdir(modfilespath) if '.zip' in modfilespath else os.listdir(modfilespath)
+    inside_zip='.zip' in modfilespath
+    modfiles=ziplistdir(modfilespath) if inside_zip else os.listdir(modfilespath)
     modfiles.sort()
-    # Eliminate .py/.pyc duplicates
-    print modfiles
-    x=1
-    while x<len(modfiles):
-        if modfiles[x].endswith('.pyc') and modfiles[x-1]==modfiles[x][:len(modfiles[x-1])]:
-            del modfiles[x-1]
-        else:
+    # Eliminate .py/.pyc duplicates, preferring .pyc if we're in a zip archive
+    if inside_zip:
+        x=1
+        while x<len(modfiles):
+            if modfiles[x].endswith('.pyc') and modfiles[x-1]==modfiles[x][:len(modfiles[x-1])]:
+                del modfiles[x-1]
+            else:
+                x+=1
+    else:
+        x=0
+        while x<len(modfiles)-1:
+            if modfiles[x].endswith('.py') and modfiles[x]==modfiles[x+1][:len(modfiles[x])]:
+                del modfiles[x+1]
             x+=1
-    print modfiles
     for modfile in modfiles:
         if modfile.startswith('.'):
             continue # the occasional emacs temporary file