[cvs] / gkb / gkb.py  

cvs: gkb/gkb.py

Diff for /gkb/gkb.py between version 1.13 and 1.22

version 1.13, Sat Aug 14 19:53:12 2004 UTC version 1.22, Sun Aug 15 04:23:51 2004 UTC
Line 19 
Line 19 
 #  #
 # Ported from PHP version Copyright (c) Tobias McNulty 2000-2003  # Ported from PHP version Copyright (c) Tobias McNulty 2000-2003
   
 import sys, os, ConfigParser  import sys, os, ConfigParser, popen2
 import xml.parsers.expat  import xml.parsers.expat
 import md5  import md5, string
 from ftplib import FTP  from ftplib import FTP
 from commands import getoutput  from commands import getoutput
 from shutil import copy, move  from shutil import copy, move
Line 30 
Line 30 
 from ClientForm import ParseResponse  from ClientForm import ParseResponse
   
 debug=0  debug=0
 clean=0  clean=1
 dont_build=1  dont_build=0
 verbose=1  verbose=1
   
 # parse host-specific configuration information from gkb.cfg  # parse host-specific configuration information from gkb.cfg
Line 91 
Line 91 
         if verbose==1:          if verbose==1:
                 print myoutput                  print myoutput
   
   def clean(text):
           """clean a string of passwords, etc. to make it suitable for logging"""
           result = string.replace(text,passwd,"XXXXXXXX")
           return result
   
   def linkpipes(input, output):
           """link two pipes together, writing all the data from input to output"""
           data = input.read(2048)
           while data:
                   output.write(data)
                   data = input.read(2048)
   
   def runcmd(cmd, kinfo=None, outfile=None, append=False, infile=None):
           """run the specified command, with the optional input and output documents"""
           log("running " + clean(cmd), kinfo)
   
           p4obj = popen2.Popen4(cmd)
   
           pin = p4obj.tochild
           pouterr = p4obj.fromchild
   
           if infile != None:
                   inobj = open(infile, "r")
                   linkpipes(inobj, pin)
                   inobj.close()
   
           if outfile != None:
                   if append:
                           mode = "a"
                   else:
                           mode = "w"
   
                   outobj = open(outfile, mode)
                   linkpipes(pouterr,outobj)
                   outobj.close()
   
           err = p4obj.wait()
   
           if err == None:
                   err = 0
   
           log("result code: %i" %  err, kinfo)
   
           return err
   
 def log(text,kinfo=0):  def log(text,kinfo=0):
         if kinfo:          if kinfo:
                 printverbose(kinfo["name"] + " : " + text)                  printverbose(kinfo["name"] + " : " + text)
Line 157 
Line 202 
   
         # archive the clean source for later uploading          # archive the clean source for later uploading
         log("archiving source to " + kinfo["mastertree"] + ".tar.bz2", kinfo)          log("archiving source to " + kinfo["mastertree"] + ".tar.bz2", kinfo)
         os.system("tar xjf " + kinfo["mastertree"] + ".tar.bz2 " + kinfo["mastertree"])          runcmd("tar cjf " + kinfo["mastertree"] + ".tar.bz2 " + kinfo["mastertree"], kinfo)
   
         # now we'll go into the tree's work dir          # now we'll go into the tree's work dir
         chdir(kinfo["workdir"],kinfo)          chdir(kinfo["workdir"],kinfo)
Line 232 
Line 277 
   
                         log("compressing binary archive "+archive_name,kinfo)                          log("compressing binary archive "+archive_name,kinfo)
   
                         if os.system("tar cjf "+archive_name+" "+os.path.basename(mybindir)):                          if runcmd("tar cjf "+archive_name+" "+os.path.basename(mybindir), kinfo):
                                 raise BuildError("failed to `tar cjf %s`" %  archive_name)                                  raise BuildError("failed to `tar cjf %s`" %  archive_name)
   
                         os.system("rm -rf %s" % mybindir)                          runcmd("rm -rf %s" % mybindir, kinfo)
   
                         krn_upload(archive_name,"kernel",myversion,kinfo)                          krn_upload(archive_name,"kernel",myversion,kinfo)
                         krn_querymgr("checkin",kinfo)                          krn_querymgr("checkin",kinfo)
Line 279 
Line 324 
         syncline=args+" "+kinfo["workdir"]          syncline=args+" "+kinfo["workdir"]
   
         log("running rsync : %s %s" % (syncoptions, syncline),kinfo)          log("running rsync : %s %s" % (syncoptions, syncline),kinfo)
         if os.system("%s %s > %s/%s/rsync.log 2>&1" % (syncoptions, syncline, logdir, kinfo["name"])):          if runcmd("%s %s" % (syncoptions, syncline), kinfo, "%s/%s/rsync.log" % (logdir, kinfo["name"])):
                 raise BuildError("sync failed, tried %s.  See log for details." %  syncline)                  raise BuildError("sync failed, tried %s.  See log for details." %  syncline)
   
 def get_wget(kinfo):  def get_wget(kinfo):
Line 290 
Line 335 
         log("fetching source archive " % args,kinfo)          log("fetching source archive " % args,kinfo)
         mysourcefile="%s/%s.tar.bz2" % (kinfo["workdir"],kinfo["name"])          mysourcefile="%s/%s.tar.bz2" % (kinfo["workdir"],kinfo["name"])
   
         if os.system("wget --quiet --output-document=%s %s/configs/%s" % (myconfigfile,msite,kinfo["name"])):          if runcmd("wget --quiet --output-document=%s %s/configs/%s" % (myconfigfile,msite,kinfo["name"]), kinfo):
                 raise BuildError("unable to download configfile, aborting.")                  raise BuildError("unable to download configfile, aborting.")
   
         log("decompressing source file",kinfo)          log("decompressing source file",kinfo)
         if os.system("tar xjf " % (myconfigfile,msite,kinfo["name"])):          if runcmd("tar xjf " % (myconfigfile,msite,kinfo["name"]), kinfo):
                 raise BuildError("unable to decompress source file, aborting.")                  raise BuildError("unable to decompress source file, aborting.")
   
 def get_vanilla(kinfo):  def get_vanilla(kinfo):
Line 303 
Line 348 
         log("fetching source archive %s" % args)          log("fetching source archive %s" % args)
         mysourcefile="%s/%s.tar.bz2" % (workdir,kinfo["name"])          mysourcefile="%s/%s.tar.bz2" % (workdir,kinfo["name"])
   
         if os.system("wget -c --output-document=%s %s" % (mysourcefile,args)):          if runcmd("wget -c --output-document=%s %s" % (mysourcefile,args), kinfo):
                 raise BuildError("unable to download source file %s, aborting." %  args)                  raise BuildError("unable to download source file %s, aborting." %  args)
   
         log("decompressing source file %s" % mysourcefile,kinfo)          log("decompressing source file %s" % mysourcefile,kinfo)
Line 324 
Line 369 
         fnames=split(data)          fnames=split(data)
         name=fnames[0]          name=fnames[0]
   
         os.system("rm -rf %s" % kinfo["workdir"])          runcmd("rm -rf %s" % kinfo["workdir"], kinfo)
         move(work + "/" + dirname, kinfo["workdir"])          move(work + "/" + dirname, kinfo["workdir"])
   
         #restore the previous working ectory          #restore the previous working ectory
Line 342 
Line 387 
                         mypatchfile="%s/%s/%s.patch" % (patchdir,kinfo["name"],patch)                          mypatchfile="%s/%s/%s.patch" % (patchdir,kinfo["name"],patch)
   
                         # download pathfile or bail                          # download pathfile or bail
                         if os.system("wget --quiet --output-document=%s %s/patches/%s/%s" % (mypatchfile,msite,kinfo["name"],patch)):                          if runcmd("wget --quiet --output-document=%s %s/patches/%s/%s" % (mypatchfile,msite,kinfo["name"],patch), kinfo):
                                 raise BuildError("unable to download patchfile %s, aborting." % patch)                                  raise BuildError("unable to download patchfile %s, aborting." % patch)
   
                         # we have a patch file, apply it or bail                          # we have a patch file, apply it or bail
                         log("perfoming patch with %s" % patch,kinfo)                          log("perfoming patch with %s" % patch,kinfo)
                         patchcommand="patch -p1 < %s > %s/%s/patch-%s.log 2>&1" % (mypatchfile,logdir,kinfo["name"],patch)  
                         log("using %s from %s" % (patchcommand,kinfo["workdir"]),kinfo)                          # former patchcommand was:
                           #patchcommand="patch -p1 < %s > %s/%s/patch-%s.log 2>&1" % (mypatchfile,logdir,kinfo["name"],patch)
                           #log("using %s from %s" % (patchcommand,kinfo["workdir"]),kinfo)
   
                         chdir(kinfo["workdir"],kinfo)                          chdir(kinfo["workdir"],kinfo)
                         if os.system(patchcommand):                          if runcmd("patch -p1", kinfo, "%s/%s/patch-%s.log" % (logdir,kinfo["name"],patch), False, mypatchfile):
                                 raise BuildError("patchfile %s failed, aborting.  See patch log for details." % patch)                                  raise BuildError("patchfile %s failed, aborting.  See patch log for details." % patch)
         else:          else:
                 log("no patchfiles, continuing",kinfo)                  log("no patchfiles, continuing",kinfo)
Line 362 
Line 410 
                 log("fetching config file",kinfo)                  log("fetching config file",kinfo)
                 myconfigfile="%s/%s.config" % (configdir,kinfo["name"])                  myconfigfile="%s/%s.config" % (configdir,kinfo["name"])
   
                 if os.system("wget --quiet --output-document=%s %s/configs/%s" % (myconfigfile,msite,kinfo["name"])):                  if runcmd("wget --quiet --output-document=%s %s/configs/%s" % (myconfigfile,msite,kinfo["name"]), kinfo):
                         raise BuildError("unable to download configfile, aborting.")                          raise BuildError("unable to download configfile, aborting.")
   
                 log("copying config file to %s/.config" % kinfo["workdir"],kinfo)                  log("copying config file to %s/.config" % kinfo["workdir"],kinfo)
Line 372 
Line 420 
 def gkb_runmake(command, kinfo, premake, makeopts):  def gkb_runmake(command, kinfo, premake, makeopts):
         """Supporting method for build() ... a stub to run a make target and auto log it, given make target (command) and name (kernel name)"""          """Supporting method for build() ... a stub to run a make target and auto log it, given make target (command) and name (kernel name)"""
         log("running make %s" % command,kinfo)          log("running make %s" % command,kinfo)
         if os.system("%s make %s %s > %s/%s/make-%s.log 2>&1" % (premake, makeopts, command, logdir, kinfo["name"], command)):          if runcmd("%s make %s %s" % (premake, makeopts, command), kinfo, "%s/%s/make-%s.log" % (logdir, kinfo["name"], command)):
                 raise BuildError("unable to run make %s, aborting." % command)                  raise BuildError("unable to run make %s, aborting." % command)
   
 def gkb_parsexml(name):  def gkb_parsexml(name):
Line 442 
Line 490 
         verifydir("%s/work" % buildroot) # build dir, make sure it exists          verifydir("%s/work" % buildroot) # build dir, make sure it exists
   
         # download the build jobs from the master site          # download the build jobs from the master site
         if os.system("wget --quiet --output-document=gkb.xml \"%s/manager.php?cmd=getjobs&host=%s&pass=%s\"" % (msite,host,passwd)):          if runcmd("wget --quiet --output-document=gkb.xml \"%s/manager.php?cmd=getjobs&host=%s&pass=%s\"" % (msite,host,passwd)):
                 raise FatalError, "Unable to download build config from master site %s, aborting." % msite                  raise FatalError, "Unable to download build config from master site %s, aborting." % msite
   
         # sets up 'mastertrees' and 'builds' dicts          # sets up 'mastertrees' and 'builds' dicts
Line 460 
Line 508 
                 except KeyboardInterrupt, e:                  except KeyboardInterrupt, e:
                         log("Caught keyboard interrupt, exiting...")                          log("Caught keyboard interrupt, exiting...")
                         break                          break
                 except:  
                         log("Caught unknown exception, exiting...")  
                         break  
   
         endtime=getoutput("date +'%R:%S %Z'")          endtime=getoutput("date +'%R:%S %Z'")
   


Generate output suitable for use with a patch program
Legend:
Removed from v.1.13  
changed lines
  Added in v.1.22

Tobias McNulty

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help