kernel: add a boot validation step post boot

When requesting a boot via a kernel generate a kernel identifier
for that kernel and a command line validator (the time).  These
are then checked in a post boot validation stepper "step" which
is inserted before the users next step.

Signed-off-by: Andy Whitcroft <apw@shadowen.org>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@657 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/tko/db.py b/tko/db.py
index 270f077..cd547e8 100644
--- a/tko/db.py
+++ b/tko/db.py
@@ -1,4 +1,4 @@
-import sqlite, re
+import sqlite, re, os
 
 class db:
 	def __init__(self):
@@ -40,26 +40,48 @@
 
 
 	def insert_job(self, tag, job):
-		# is kernel version in tree?
 		self.insert('jobs', {'tag':tag, 'machine':'UNKNOWN'})
 		job.index = self.find_job(tag)
 		for test in job.tests:
 			self.insert_test(job, test)
 
+
 	def insert_test(self, job, test):
-		# WE ARE MISSING KVERSION HERE!!!!
+		kver = self.insert_kernel_version(test.kernel)
 		data = {'job_idx':job.index, 'test':test.testname,
 			'subdir':test.dir, 
 			'status':test.status, 'reason':test.reason}
 		self.insert('tests', data)
 
 
-	def lookup_kernel_version(self, base, patches):
-		return self.select('kversion', 'kversions', {'base':base})[0]
+	def lookup_kversion(self, kernel):
+		rows = self.select('kversion', 'kversions', 
+				{'kversion_hash':kernel.kversion_hash})
+		if rows:
+			return rows[0][0]
+		else:
+			return None
 
 
-	def insert_kernel_version(self, base, patches):
-		self.insert('kversions', {'base': base})
+	def insert_kernel_version(self, kernel):
+		kver = self.lookup_kversion(kernel)
+		if kver:
+			return kver
+		self.insert('kversions', {'base':kernel.base,
+					  'kversion_hash':kernel.kversion_hash})
+		kver = self.lookup_kversion(kernel)
+		for patch in kernel.patches:
+			self.insert_patch(kver, patch)
+		return kver
+
+
+	def insert_patch(self, kver, patch):
+		print patch.reference
+		name = os.path.basename(patch.reference)[:80]
+		self.insert('patches', {'kversion': kver, 
+					'name':name,
+					'url':patch.reference, 
+					'hash':patch.hash})
 
 
 	def find_job(self, tag):