diff -r be27ed110b50 -r e1eecf4d390d sbsv2/raptor/python/plugins/filter_clean.py --- a/sbsv2/raptor/python/plugins/filter_clean.py Wed Oct 28 14:39:48 2009 +0000 +++ b/sbsv2/raptor/python/plugins/filter_clean.py Mon Nov 16 09:46:46 2009 +0000 @@ -1,170 +1,170 @@ -# -# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). -# All rights reserved. -# This component and the accompanying materials are made available -# under the terms of the License "Eclipse Public License v1.0" -# which accompanies this distribution, and is available -# at the URL "http://www.eclipse.org/legal/epl-v10.html". -# -# Initial Contributors: -# Nokia Corporation - initial contribution. -# -# Contributors: -# -# Description: -# Filter class for doing CLEAN, CLEANEXPORT and REALLYCLEAN efficiently. -# - -import os -import sys -import tempfile -import filter_interface - -class FilterClean(filter_interface.Filter): - - def open(self, params): - "initialise" - - targets = [x.lower() for x in params.targets] - - self.removeExports = ("cleanexport" in targets or "reallyclean" in targets) - self.removeTargets = ("clean" in targets or "reallyclean" in targets) - - self.ok = True - - # create a temporary file to record all the exports and directories - # in. We can only remove those after "make" has finished running all - # the CLEAN targets. - try: - self.tmp = tempfile.TemporaryFile() - except: - sys.stderr.write("sbs: could not create temporary file for FilterClean\n") - self.ok = False - - return self.ok - - - def write(self, text): - "process some log text" - - for line in text.splitlines(): - - if self.removeTargets: - if line.startswith(""): - self.doFile(line) - elif line.startswith(""): - self.doDirectory(line) - - if self.removeExports: - if line.startswith(""): - self.doMember(line) - elif line.startswith(""): - self.doZipMarker(line) - - return self.ok - - - def summary(self): - "finish off" - - # remove files, remembering directories - dirs = set() - - try: - self.tmp.flush() # write what is left in the buffer - self.tmp.seek(0) # rewind to the beginning - - for line in self.tmp.readlines(): - path = line.strip() - - if os.path.isfile(path): - self.removeFile(path) - - elif os.path.isdir(path): - dirs.add(path) - - self.tmp.close() # this also deletes the temporary file - except: - sys.stderr.write("sbs: could not access temporary file for FilterClean\n") - self.ok = False - - # finally remove (empty) directories - for dir in dirs: - try: - os.removedirs(dir) # may fail if the directory has files in - except: - pass # silently ignore all errors - - return self.ok - - - def close(self): - "nop" - - return self.ok - - - def removeFile(self, path): - try: - os.unlink(path) - except Exception, e: - sys.stderr.write("sbs: could not remove " + path + "\n") - sys.stderr.write(str(e) + "\n") - - - def saveItem(self, path): - "put path into a temporary file." - try: - self.tmp.write(path + "\n") - except: - sys.stderr.write("sbs: could not write temporary file in FilterClean\n") - self.ok = False - - - def doFile(self, line): - "remove filenames in tags immediately (not .d or .dep)." - filename = line[6:-7] # line is "filename - filename = filename.strip("\"\'") # some names are quoted - - # dependency files must be deleted at the end, - # everything else can be deleted straight away. - if filename.endswith(".d") or filename.endswith(".dep"): - self.saveItem(filename) - else: - if os.path.isfile(filename): - self.removeFile(filename) - - - def doDirectory(self, line): - "save directories in tags for the end." - # assuming X - dirname = line[5:-6] - self.saveItem(dirname.strip("\"\'")) - - - def doExport(self, line): - "save exported files in tags for the end." - # assuming - filename = line[21:line.find("'", 21)] - self.saveItem(filename) - - - def doMember(self, line): - "save zip exports in tags for the end." - # assuming X - filename = line[8:-9] - self.saveItem(filename) - - - def doZipMarker(self, line): - "Remove file in tags" - # assuming X - filename = line[11:-12] - if os.path.isfile(filename): - self.removeFile(filename) - - -# the end - +# +# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Filter class for doing CLEAN, CLEANEXPORT and REALLYCLEAN efficiently. +# + +import os +import sys +import tempfile +import filter_interface + +class FilterClean(filter_interface.Filter): + + def open(self, params): + "initialise" + + targets = [x.lower() for x in params.targets] + + self.removeExports = ("cleanexport" in targets or "reallyclean" in targets) + self.removeTargets = ("clean" in targets or "reallyclean" in targets) + + self.ok = True + + # create a temporary file to record all the exports and directories + # in. We can only remove those after "make" has finished running all + # the CLEAN targets. + try: + self.tmp = tempfile.TemporaryFile() + except: + sys.stderr.write("sbs: could not create temporary file for FilterClean\n") + self.ok = False + + return self.ok + + + def write(self, text): + "process some log text" + + for line in text.splitlines(): + + if self.removeTargets: + if line.startswith(""): + self.doFile(line) + elif line.startswith(""): + self.doDirectory(line) + + if self.removeExports: + if line.startswith(""): + self.doMember(line) + elif line.startswith(""): + self.doZipMarker(line) + + return self.ok + + + def summary(self): + "finish off" + + # remove files, remembering directories + dirs = set() + + try: + self.tmp.flush() # write what is left in the buffer + self.tmp.seek(0) # rewind to the beginning + + for line in self.tmp.readlines(): + path = line.strip() + + if os.path.isfile(path): + self.removeFile(path) + + elif os.path.isdir(path): + dirs.add(path) + + self.tmp.close() # this also deletes the temporary file + except: + sys.stderr.write("sbs: could not access temporary file for FilterClean\n") + self.ok = False + + # finally remove (empty) directories + for dir in dirs: + try: + os.removedirs(dir) # may fail if the directory has files in + except: + pass # silently ignore all errors + + return self.ok + + + def close(self): + "nop" + + return self.ok + + + def removeFile(self, path): + try: + os.unlink(path) + except Exception, e: + sys.stderr.write("sbs: could not remove " + path + "\n") + sys.stderr.write(str(e) + "\n") + + + def saveItem(self, path): + "put path into a temporary file." + try: + self.tmp.write(path + "\n") + except: + sys.stderr.write("sbs: could not write temporary file in FilterClean\n") + self.ok = False + + + def doFile(self, line): + "remove filenames in tags immediately (not .d or .dep)." + filename = line[6:-7] # line is "filename + filename = filename.strip("\"\'") # some names are quoted + + # dependency files must be deleted at the end, + # everything else can be deleted straight away. + if filename.endswith(".d") or filename.endswith(".dep"): + self.saveItem(filename) + else: + if os.path.isfile(filename): + self.removeFile(filename) + + + def doDirectory(self, line): + "save directories in tags for the end." + # assuming X + dirname = line[5:-6] + self.saveItem(dirname.strip("\"\'")) + + + def doExport(self, line): + "save exported files in tags for the end." + # assuming + filename = line[21:line.find("'", 21)] + self.saveItem(filename) + + + def doMember(self, line): + "save zip exports in tags for the end." + # assuming X + filename = line[8:-9] + self.saveItem(filename) + + + def doZipMarker(self, line): + "Remove file in tags" + # assuming X + filename = line[11:-12] + if os.path.isfile(filename): + self.removeFile(filename) + + +# the end +