rendered paste bodyIndex: kdesettings-example.bat===================================================================--- kdesettings-example.bat (Revision 1115374)+++ kdesettings-example.bat (Arbeitskopie)@@ -178,6 +178,10 @@ rem for all other packages this option doesn't have any effect rem set EMERGE_DEFAULTCATEGORY=kde-4.3 +rem This option can be used to set a directory where build logs are saved+rem instead of being printed to the console.+rem set EMERGE_LOG_DIR=%KDEROOT%\buildlogs+ rem No editing should be necessary below this line (in an ideal world) rem ################################################################## Index: bin/utils.py===================================================================--- bin/utils.py (Revision 1115374)+++ bin/utils.py (Arbeitskopie)@@ -420,15 +420,26 @@ print >> sys.stderr, "emerge fatal error: %s" % message exit( 1 ) -def system( cmdstring, outstream=sys.stdout, errstream=sys.stderr ):+def system( cmdstring, outstream=None, errstream=None ):++ if outstream is None: outstream = sys.stdout+ if errstream is None: errstream = sys.stderr+ debug( "executing command: %s" % cmdstring, 1 )- if verbose() == 0 and outstream == sys.stdout and errstream == sys.stderr:- sys.stderr = file('test.outlog', 'wb')- sys.stdout = sys.stderr- p = subprocess.Popen( cmdstring, shell=True, stdout=outstream, stderr=errstream )- ret = p.wait()- sys.stderr = sys.__stderr__- sys.stdout = sys.__stdout__+ redirected = False+ try:+ if verbose() == 0 and outstream == sys.stdout and errstream == sys.stderr:+ redirected = True+ sys.stderr = file('test.outlog', 'wb')+ sys.stdout = sys.stderr++ p = subprocess.Popen( cmdstring, shell=True, stdout=outstream, stderr=errstream )+ ret = p.wait()+ finally:+ if redirected:+ sys.stderr = sys.__stderr__+ sys.stdout = sys.__stdout__+ return ( ret == 0 ) def systemWithoutShell(cmdstring, outstream=sys.stdout, errstream=sys.stderr):@@ -895,3 +906,31 @@ cmd = "patch -d %s -p%s < %s" % ( sourceDir, patchLevel, file ) debug("applying patch %s" % ( cmd ), 2) return system( cmd )++def log(fn):+ def inner(*args, **argv):++ logdir = os.environ.get('EMERGE_LOG_DIR')++ if not logdir:+ return fn(*args, **argv)++ if not os.path.exists(logdir):+ os.mkdir(logdir)+ + logfile = "%s-%s-%s.log" % (args[0], args[1], args[2])++ logfile = os.path.join(logdir, logfile)+ f = open(logfile, "a+")+ try:+ old_out = sys.stdout+ old_err = sys.stderr+ sys.stdout = f+ sys.stderr = f+ return fn(*args, **argv)+ finally:+ sys.stdout = old_out+ sys.stderr = old_err+ f.close()++ return innerIndex: bin/emerge.py===================================================================--- bin/emerge.py (Revision 1115374)+++ bin/emerge.py (Arbeitskopie)@@ -92,6 +92,8 @@ star in the printout of --print-targets --patchlevel=[PATCHLEVEL] This will add a patch level when used together with --package +--log-dir=[LOG_DIR] This will log the build output to a logfile in+ LOG_DIR for each package. -i ignore install: using this option will install a package over an existing install. This can be useful if you want to check some@@ -140,6 +142,7 @@ """ +@utils.log def doExec( category, package, version, action, opts ): utils.debug( "emerge doExec called. action: %s opts: %s" % (action, opts), 2 ) fileName = portage.getFilename( category, package, version )@@ -226,6 +229,7 @@ environ["EMERGE_BUILDTYPE"] = os.getenv( "EMERGE_BUILDTYPE" ) environ["EMERGE_TARGET"] = os.getenv( "EMERGE_TARGET" ) environ["EMERGE_TARGET"] = os.getenv( "EMERGE_PKGPATCHLVL" )+environ["EMERGE_LOG_DIR"] = os.getenv( "EMERGE_LOG_DIR" ) if ( environ['EMERGE_NOCOPY'] == "False" ): nocopy = False@@ -269,6 +273,8 @@ os.environ["EMERGE_TARGET"] = i.replace( "--target=", "" ) elif ( i.startswith( "--patchlevel=" ) ): os.environ["EMERGE_PKGPATCHLVL"] = i.replace( "--patchlevel=", "" )+ elif ( i.startswith( "--log-dir=" ) ):+ os.environ["EMERGE_LOG_DIR"] = i.replace( "--log-dir=", "" ) elif ( i == "-v" ): verbose = verbose + 1 os.environ["EMERGE_VERBOSE"] = str( verbose )