[Python-checkins] r43388 - sandbox/trunk/welease/welease.glade sandbox/trunk/welease/welease.py

anthony.baxter python-checkins at python.org
Tue Mar 28 10:23:51 CEST 2006


Author: anthony.baxter
Date: Tue Mar 28 10:23:51 2006
New Revision: 43388

Modified:
   sandbox/trunk/welease/welease.glade
   sandbox/trunk/welease/welease.py
Log:
checks for uncommitted svn changes
checks for idleversion


Modified: sandbox/trunk/welease/welease.glade
==============================================================================
--- sandbox/trunk/welease/welease.glade	(original)
+++ sandbox/trunk/welease/welease.glade	Tue Mar 28 10:23:51 2006
@@ -574,11 +574,11 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkScrolledWindow" id="scrolledwindow2">
+	    <widget class="GtkScrolledWindow" id="textscroll">
 	      <property name="visible">True</property>
 	      <property name="can_focus">True</property>
 	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	      <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
 	      <property name="shadow_type">GTK_SHADOW_IN</property>
 	      <property name="window_placement">GTK_CORNER_TOP_RIGHT</property>
 

Modified: sandbox/trunk/welease/welease.py
==============================================================================
--- sandbox/trunk/welease/welease.py	(original)
+++ sandbox/trunk/welease/welease.py	Tue Mar 28 10:23:51 2006
@@ -26,6 +26,15 @@
 #   Make the 'Abort' button work
 #   Add a *lot* more checks to the Check Release stage.
 
+# Check Release steps:
+# 
+# Checks Include/patchlevel.h (fatal if wrong)
+# Checks for uncommitted changes in the checkout (nonfatal)
+# Checks Lib/idlelib/idlever.py (fatal)
+# Checks Misc/NEWS and Lib/idlelib/NEWS.txt (nonfatal) [XXX]
+# Checks PCbuild/BUILDno.txt ? [XXX]
+# Checks Tools/msi/msi.py ? [XXX]
+
 import gnome
 gnomeProgram = gnome.init("Welease", "0.1")
 import pygtk
@@ -37,7 +46,7 @@
 gtk2reactor.install()
 from twisted.internet import reactor, protocol, defer
 
-import os
+import os, sys
 
 # Config section. This should all be put into a config file or something
 CheckoutHome = '/home/anthony/projects/python'
@@ -74,8 +83,12 @@
         self.xml.signal_autoconnect(self)
         self.xml.get_widget('weleaseMainWindow').show_all()
         output = self.xml.get_widget("outputText")
-        self.logger = TextViewer(output.get_buffer())
-        #self.logger.set_visible(self.xml.get_widget('scrolledwindow2'))
+        attr = output.get_default_attributes()
+        style = output.rc_get_style()
+        #print style, dir(style)
+        #print dir(style.fg), style.bg, style.get_font()
+        self.logger = TextViewer(output)
+        self.logger.set_visible(self.xml.get_widget('textscroll'))
 
     def warnPopup(self, message, fatal=True, d=None):
         if d is None: print "**", message
@@ -174,7 +187,53 @@
     def checkReleaseTestVersion(self, (output, error)):
         if output != '%s %s\n'%(self.newRelease, self.newRelease):
             return self.warnPopup('Include/patchlevel.h is not correct')
+        checkout = CheckoutPaths[self.currentBranch]
+        os.chdir(checkout)
+        d = self.do_command(["svn", "stat"], capture=True)
+        d.addCallback(self.checkReleaseFindUnmergedChanges)
+
+    def checkReleaseFindUnmergedChanges(self, (stdout, stderr)):
+        checkout = CheckoutPaths[self.currentBranch]
+        unmerged = set()
+        badstats = ('M', 'A', 'C', 'D', 'G', 'R', '~', '!')
+        for line in stdout.splitlines():
+            line = line.strip().split()
+            if not line:
+                continue
+            stat = line[0]
+            for c in badstats:
+                if c in stat:
+                    unmerged.add(line[-1])
+        if not unmerged:
+            self.checkReleaseIdlelibVer()
+        else:
+            d = self.warnPopup('The following have uncommitted changes in\n' +
+                               '%s\n'%checkout +
+                               ' '.join(unmerged),
+                               fatal=False)
+            d.addCallback(lambda x: x==True and self.checkReleaseIdlelibVer())
+            return
 
+    def checkReleaseIdlelibVer(self):
+        checkout = CheckoutPaths[self.currentBranch]
+        libpath = os.path.join(checkout, 'Lib')
+        if libpath in sys.modules:
+            print "already added %s to sys.path??"%libpath
+        else:
+            sys.path.insert(0, libpath)
+        from idlelib.idlever import IDLE_VERSION
+        # Now compare Python and Idle versions.
+        pyver = self.newRelease.split('.')
+        idlever = IDLE_VERSION.split('.')
+        unimportModules('idlelib', 'idlelib.idlever')
+        if (int(pyver[0]) - 1  != int(idlever[0]) or 
+            int(pyver[1]) - 3  != int(idlever[1]) or 
+            pyver[2] != idlever[2]):
+            return self.warnPopup('Lib/idlelib/idlever.py is not correct')
+        self.checkReleaseCheckNewsFiles()
+    
+    def checkReleaseCheckNewsFiles(self):
+        checkout = CheckoutPaths[self.currentBranch]
         self.checkReleaseDone()
 
     def checkReleaseDone(self):
@@ -194,7 +253,6 @@
 
     def makeTagCheckSvnExists(self, (stdout, stderr)):
         if 'Node Kind' in stdout:
-            # uh oh.
             d = self.warnPopup('Tag %s is already in SVN!'%(self.tagPath) +
                                'svn rm first to recreate it',
                                fatal=False)
@@ -254,26 +312,36 @@
     DELETECHUNK = 100
 
     def __init__(self, widget):
-        self.buffer = widget
+        self.buffer = widget.get_buffer()
+        self.widget = widget
         self.scroll = None
+        self.textTag = gtk.TextTag('default')
+        self.textTag.set_property('family', 'Monospace')
+        #self.textTag.set_property('background', 'black')
+        #self.textTag.set_property('foreground', 'white')
+        self.buffer.get_tag_table().add(self.textTag)
 
     def set_visible(self, scroll):
-        self.scroll = scroll
-        if scroll:
-            adj = self.scroll.get_vadjustment()
-            adj.set_value(adj.upper)
+        self.widget.place_cursor_onscreen()
+        #self.scroll = scroll
+        #if scroll:
+            #adj = self.scroll.get_vadjustment()
+            #adj.set_value(adj.upper)
 
     def write(self, text):
         b = self.buffer
-        b.insert(b.get_end_iter(), text)
+        b.insert_with_tags(b.get_end_iter(), text, self.textTag)
         lines = b.get_line_count()
         if lines > self.MAXLINES:
             b.delete(b.get_start_iter(),
                      b.get_iter_at_line_offset(self.DELETECHUNK,0))
-        if self.scroll is not None:
-            print "scrolling"
-            adj = self.scroll.get_vadjustment()
-            adj.set_value(adj.upper)
+        # Doesn't sodding work...
+        b.place_cursor(b.get_end_iter())
+        self.widget.place_cursor_onscreen()
+        #if self.scroll is not None:
+        #    print "scrolling"
+        #    adj = self.scroll.get_vadjustment()
+        #    adj.set_value(adj.upper)
 
     def flush(self):
         pass
@@ -320,6 +388,11 @@
         self.defer.callback((self.stdout, self.stderr))
         self.defer = None
 
+def unimportModules(*modules):
+    for mod in modules:
+        if mod in sys.modules:
+            del sys.modules[mod]
+
 
 def main():
     win = WeleaseWindow()
@@ -329,6 +402,8 @@
 
 
 
+
+# Yeah, this is ugly code. Just slapped something together quickly.
 TestVersionCode = r"""
 #include <Include/patchlevel.h>
 #include <stdio.h>


More information about the Python-checkins mailing list