ajack       2004/04/24 08:25:18

  Modified:    python/gump/model project.py
               .        gumpy.py minimal-workspace.xml
               python/gump integrate.py
               python/gump/test syndicator.py
               python/gump/core config.py engine.py
               python   gmp.py
               python/gump/output nag.py statsdb.py
  Log:
  E-mail & Result (exit code) cleanup.
  
  Revision  Changes    Path
  1.79      +3 -0      gump/python/gump/model/project.py
  
  Index: project.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/model/project.py,v
  retrieving revision 1.78
  retrieving revision 1.79
  diff -u -r1.78 -r1.79
  --- project.py        23 Apr 2004 18:09:24 -0000      1.78
  +++ project.py        24 Apr 2004 15:25:18 -0000      1.79
  @@ -303,6 +303,9 @@
               if cause and cause == self:
                   if not project in self.affectedProjects:
                       self.affectedProjects.append(project)
  +    
  +        # Sort whatever we got
  +        self.affectedProjects.sort()
           
       def propagateErrorStateChange(self,state,reason,cause,message):
           
  
  
  
  1.25      +65 -6     gump/gumpy.py
  
  Index: gumpy.py
  ===================================================================
  RCS file: /home/cvs/gump/gumpy.py,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- gumpy.py  23 Apr 2004 18:09:24 -0000      1.24
  +++ gumpy.py  24 Apr 2004 15:25:18 -0000      1.25
  @@ -94,7 +94,8 @@
                   catFile(log,outputFile)            

               os.remove(outputFile)

           

  -        log.write('Exit Code : ' + `exit_code` + '\n')

  +        if exit_code:

  +            log.write('Process Exit Code : ' + `exit_code` + '\n')

       

       finally:

           if originalCWD: os.chdir(originalCWD)

  @@ -181,7 +182,42 @@
       except:

           # Somehow another could delete this, even if locked...

           pass

  +               

  +               

  +def tailFile(file,lines,eol=None,marker=None):

  +    """ Return the last N lines of a file as a list """

  +    taillines=[]

  +    try:

  +        o=None

  +        try:

  +            # Read lines from the file...

  +            o=open(file, 'r')

  +            line=o.readline()

  +            

  +            size=0

  +            while line:      

  +                # Store the lines

  +                taillines.append(line)

  +            

  +                # But dump any before 'lines'

  +                size=len(taillines)

  +                if size > lines:

  +                    del taillines[0:(size-lines)]

  +                    size=len(taillines)

  +                    

  +                # Read next...

  +                line=o.readline()

                   

  +        finally:

  +            if o: o.close()

  +    except Exception, details:

  +        print 'Failed to tail :' + file + ' : ' + str(details)

  +                            

  +    return taillines

  +

  +def tailFileToString(file,lines,eol=None,marker=None):

  +    return "".join(tailFile(file,lines,eol,marker))

  +    

   # Allow a lock    

   lockFile=os.path.abspath('gumpy.lock')

   lock=establishLock(lockFile)        

  @@ -196,7 +232,8 @@
       pass

   

   # Enable a log

  -logFile=os.path.abspath('gumpy_log.txt')

  +logFileName='gumpy_log.txt'

  +logFile=os.path.abspath(logFileName)

   log=open(logFile,'w',0) # Unbuffered...

   

   result=0

  @@ -359,7 +396,7 @@
       releaseLock(lock,lockFile)

       

       if result:

  -        logTitle='The Apache Gump log...'

  +        logTitle='Problem running Apache Gump...'

           

           # :TODO: Need to check if stdout is a plain terminal? Not sure, see next.

           # :TODO: On some cron set-ups this will mail the log, on

  @@ -368,7 +405,7 @@
           # Cat log if failed...

           published=0

           if logdir:

  -            publishedLogFile=os.path.abspath(os.path.join(logdir,'gumpy_log.txt'))

  +            publishedLogFile=os.path.abspath(os.path.join(logdir,logFileName))

               try:

                   publishedLog=open(publishedLogFile,'w',0) # Unbuffered...

                   catFile(publishedLog, logFile, logTitle)    

  @@ -395,8 +432,30 @@
               #logData=tmpStream.read()

               #tmpStream.close()

               #tmpStream=None

  -            logData='There is a problem with the run at : ' + logurl

  -            sendEmail(mailto,mailfrom,logTitle,logData,mailserver,mailport)

  +            mailData='There is a problem with the run at : ' + logurl + '\n'

  +            

  +            #

  +            # :TODO: Add link to log 

  +            # :TODO: Tail log

  +            #

  +            try:

  +                maxTailLines=50

  +                tailData=tailFileToString(logFile,maxTailLines)           

  +                mailData += 
'------------------------------------------------------------\n' 

  +                mailData += 'The log ought be at:\n'

  +                mailData += '   '

  +                logFileUrl=logurl

  +                if not logFileUrl.endswith('/'): logFileUrl+='/'

  +                logFileUrl+=logFileName

  +                mailData += logFileUrl

  +                mailData += '\n'

  +                mailData += 
'------------------------------------------------------------\n' 

  +                mailData += 'The last (up to) %s lines of the log are :\n' % 
maxTailLines

  +                mailData += tailData

  +            except:

  +                pass

  +            

  +            sendEmail(mailto,mailfrom,logTitle,mailData,mailserver,mailport)

   

   # bye!

   sys.exit(result)

  
  
  
  1.4       +4 -1      gump/minimal-workspace.xml
  
  Index: minimal-workspace.xml
  ===================================================================
  RCS file: /home/cvs/gump/minimal-workspace.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- minimal-workspace.xml     16 Mar 2004 19:50:14 -0000      1.3
  +++ minimal-workspace.xml     24 Apr 2004 15:25:18 -0000      1.4
  @@ -27,7 +27,10 @@
        and build stuff. If you use any packages available as
        binaries only, you need to set pkgdir as well.
   -->
  -<workspace name="minimal" basedir="C:\jakarta" pkgdir="C:\opt" version="0.3">
  +<workspace name="minimal" 
  +             basedir="C:\gump" 
  +             pkgdir="C:\opt" 
  +             version="0.4">
   
        <!-- this tells Ant to completely ignore all classpath
             elements in build scripts. This makes sure we build
  
  
  
  1.27      +2 -2      gump/python/gump/integrate.py
  
  Index: integrate.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/integrate.py,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- integrate.py      16 Apr 2004 17:28:38 -0000      1.26
  +++ integrate.py      24 Apr 2004 15:25:18 -0000      1.27
  @@ -81,7 +81,7 @@
       logResourceUtilization('Before exit')
       
       #
  -    log.info('Gump Integration complete. Exit code:' + str(result))                 
 
  +    log.info('Gump Integration complete. Exit code [0=SUCCESS] : ' + str(result))   
               
             
       # bye!
       sys.exit(result)
  
  
  
  1.9       +2 -0      gump/python/gump/test/syndicator.py
  
  Index: syndicator.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/test/syndicator.py,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- syndicator.py     16 Apr 2004 17:28:35 -0000      1.8
  +++ syndicator.py     24 Apr 2004 15:25:18 -0000      1.9
  @@ -14,7 +14,9 @@
   # limitations under the License.
   
   """
  +
       Syndication Testing
  +    
   """
   
   import os
  
  
  
  1.2       +2 -2      gump/python/gump/core/config.py
  
  Index: config.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/core/config.py,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- config.py 16 Apr 2004 17:28:41 -0000      1.1
  +++ config.py 24 Apr 2004 15:25:18 -0000      1.2
  @@ -71,8 +71,8 @@
       mailserver = 'mail.apache.org'
       mailport = 25
       prefix = '[GUMP@' + gumphost + ']'
  -    signature="\r\n--\r\nGump http://gump.apache.org/\n"; \
  -        + '[' + gumpfullhost + "]\n"
  +    signature="\r\n--\r\nApache Gump\nhttp://gump.apache.org/ " \
  +        + '[Instance: ' + gumpfullhost + "]\n"
           
       if not os.name == 'dos' and not os.name == 'nt':
           classpathSeparator=':'
  
  
  
  1.4       +4 -1      gump/python/gump/core/engine.py
  
  Index: engine.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/core/engine.py,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- engine.py 22 Apr 2004 22:58:16 -0000      1.3
  +++ engine.py 24 Apr 2004 15:25:18 -0000      1.4
  @@ -163,6 +163,9 @@
           if not run.getOptions().isQuick():
               workspace.writeXMLToFile(default.merge)
               workspace.setMergeFile(default.merge)
  +                 
  +        # :TODO: Put this somewhere else, and/or make it depend upon something...
  +        workspace.changeState(STATE_SUCCESS)
   
       """
       
  @@ -550,7 +553,7 @@
                   project.changeState(STATE_FAILED,REASON_PREBUILD_FAILED)
               
           if not project.okToPerformWork():
  -            log.warn('Failed to perform prebuild on project [' + project.getName() 
+ ']')
  +            log.warn('Failed to perform pre-build on project [' + project.getName() 
+ ']')
   
       def performPostBuild(self, run, project, repository, wasBuilt, stats):
           """Perform Post-Build Actions"""
  
  
  
  1.7       +4 -4      gump/python/gmp.py
  
  Index: gmp.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gmp.py,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- gmp.py    23 Apr 2004 18:09:24 -0000      1.6
  +++ gmp.py    24 Apr 2004 15:25:18 -0000      1.7
  @@ -118,8 +118,8 @@
           
   args=sys.argv
   try:
  -
  -        
  +    print 'Apache Gump (A multi-project builder)'
  +    
       try:
           # Process Environment
           hostname = socket.gethostname()
  @@ -131,7 +131,7 @@
           # Workspace is the `hostname`.xml or workspace.xml, 
           # unless overridden
           workspaceName = hostname + '.xml'
  -        if not os.path.abspath(workspaceName):
  +        if not os.path.exists(os.path.abspath(workspaceName)):
               workspaceName='workspace.xml'
               
           if os.environ.has_key('GUMP_WORKSPACE'):        
  
  
  
  1.35      +21 -21    gump/python/gump/output/nag.py
  
  Index: nag.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/output/nag.py,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- nag.py    23 Apr 2004 18:09:24 -0000      1.34
  +++ nag.py    24 Apr 2004 15:25:18 -0000      1.35
  @@ -210,7 +210,7 @@
       
       def nagWorkspace(self):
           """ Nag for the workspace """
  -        content=self.getGenericContent(self.workspace,'index',"There is a workspace 
problem... \n")
  +        content=self.getGenericContent(self.workspace,'There is a workspace 
problem... \n')
           
           self.sendEmail(self.workspace.mailinglist,   \
                           self.workspace.email,        \
  @@ -222,7 +222,7 @@
           #
           # Form the content...
           #
  -        content=self.getNamedTypedContent(module,'index')
  +        content=self.getNamedTypedContent(module)
                   
           #
           # Form the subject
  @@ -241,7 +241,7 @@
           #
           # Form the content...
           #
  -        content=self.getNamedTypedContent(project, project.getName() )        
  +        content=self.getNamedTypedContent(project )        
                   
           #
           # Form the subject
  @@ -333,7 +333,7 @@
               
           return sent
           
  -    def getNamedTypedContent(self,object,feedPrefix=None,message=None):
  +    def getNamedTypedContent(self,object,message=None):
           content="""To whom it may engage...
           
   This is an automated request, but not an unsolicited one. For help 
  @@ -382,11 +382,11 @@
               
                   content += '\n'            
               
  -        content += self.getGenericContent(object,feedPrefix)
  +        content += self.getGenericContent(object)
           
           return content
               
  -    def getGenericContent(self,object,feedPrefix=None,message=None):
  +    def getGenericContent(self,object,message=None):
           content=''
       
           # Optional message
  @@ -412,7 +412,7 @@
           content += "\n"
                   
           if object.annotations or object.worklist:
  -            content += ', however some snippets follow:\n'
  +            content += 'That said, some snippets follow:\n'
               
           content += '\n'
           
  @@ -420,8 +420,9 @@
           # Add an info/error/etc...
           #
           if object.annotations:
  -            content += LINE
  -            content += "\n\nGump provided these annotations:\n\n"
  +            #content += LINE
  +            content += "\n"
  +            content += "Gump provided these annotations:\n"
               for note in object.annotations:      
                   content += (' - %s - %s\n' % (levelName(note.level), note.text))
       
  @@ -430,24 +431,23 @@
           #
           if object.worklist: 
               content+="\n\n"
  -            content += LINE   
  -            content += "\nGump performed this work:\n\n"
  +            #content += LINE   
  +            content += "Gump performed this work:\n"
               for workitem in object.worklist:
                   workurl=self.run.getOptions().getResolver().getUrl(workitem)
                   content+=workurl+'\n'
  -                content+=workitem.overview()+'\n\n'   
  +                content+=workitem.overview()+'\n'   
                                   
  -        if feedPrefix:
  -            content += '\n\nTo subscribe to this information via syndicated 
feeds:\n'      
  +        content += '\n\nTo subscribe to this information via syndicated feeds:\n'   
   
               
  -            #
  -            # Link them back here...
  -            #
  -            
rssurl=self.run.getOptions().getResolver().getUrl(object,feedPrefix,'.rss')
  -            
atomurl=self.run.getOptions().getResolver().getUrl(object,feedPrefix,'.atom')
  +        #
  +        # Link them back here...
  +        #
  +        rssurl=self.run.getOptions().getResolver().getUrl(object,'rss','.xml')
  +        atomurl=self.run.getOptions().getResolver().getUrl(object,'atom','.xml')
               
  -            content += "RSS: " + rssurl + " | "
  -            content += "Atom: " + atomurl + '\n'         
  +        content += "RSS: " + rssurl + '\n'
  +        content += "Atom: " + atomurl + '\n'         
       
           return content
       
  
  
  
  1.25      +1 -1      gump/python/gump/output/statsdb.py
  
  Index: statsdb.py
  ===================================================================
  RCS file: /home/cvs/gump/python/gump/output/statsdb.py,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- statsdb.py        22 Apr 2004 22:58:17 -0000      1.24
  +++ statsdb.py        24 Apr 2004 15:25:18 -0000      1.25
  @@ -41,7 +41,7 @@
           self.dbpath    = os.path.abspath('%s/%s' % (dbdir,name))
           
           if not os.path.exists(self.dbpath):
  -            log.info('*New* Statistic Database:' + self.dbpath)
  +            log.info('*New* Statistics Database:' + self.dbpath)
               
           log.debug('Open Statistic Database:' + self.dbpath)
           if not os.name == 'dos' and not os.name == 'nt':
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to