+class Cache:
+ def __init__(self, filename):
+ try:
+ self.filename2status = marshal.load(open(filename, "rb"))
+ except IOError:
+ self.filename2status = {}
+
+ def parse_args(self):
+ parser = OptionParser()
+ parser.add_option("-d", "--diff", dest="diff", help="Only run tests that failed the last time",action="store_true")
+ (options, args) = parser.parse_args()
+ self.__dict__.update(options.__dict__)
+
+ self.checknum=-1
+ if len(args):
+ self.checknum = int(args[0])
+
+ @staticmethod
+ def load(filename):
+ return Cache(filename)
+
+ def save(self, filename):
+ fi = open(filename, "wb")
+ marshal.dump(self.filename2status, fi)
+ fi.close()
+
+ def highlight(self, nr, filename):
+ return self.checknum==nr
+
+ def skip_file(self, nr, filename):
+ if self.checknum>=0 and nr!=self.checknum:
+ return 1
+ if self.diff and self.filename2status[filename]=="ok":
+ return 1
+ return 0
+
+ def file_status(self, filename, status):
+ self.filename2status[filename] = status
+