Extract the logging decorator used in kernel.py into a common library
and add it to Autotest.install to provide logging of autotest
installation failure (and success).

Signed-off-by: John Admanski <jadmanski@google.com>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@937 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/client/bin/kernel.py b/client/bin/kernel.py
index d9d818a..f7b1528 100755
--- a/client/bin/kernel.py
+++ b/client/bin/kernel.py
@@ -2,33 +2,10 @@
 
 import os,os.path,shutil,urllib,copy,pickle,re,glob,time
 from autotest_utils import *
+from common import logging
 import kernel_config, test, os_dep
 
 
-def record(fn):
-	""" Decorator for logging calls to specific kernel methods.
-	It also accepts a "logged=False" keyword argument to disable
-	the logging for particular calls.
-
-	Classes that make use of this dectorator will need to have job
-	and subdir attributes for the logging to function correctly.
-	"""
-	def recorded_func(self, *args, **dargs):
-		logged = dargs.pop('logged', True)
-		if not logged:
-			return fn(self, *args, **dargs)
-		# wrap the method call in success/failure logging
-		name = "kernel.%s" % fn.__name__
-		try:
-			result = fn(self, *args, **dargs)
-			self.job.record('GOOD', self.subdir, name)
-		except Exception, detail:
-			self.job.record('FAIL', self.subdir, name, str(detail))
-			raise
-		return result
-	return recorded_func
-
-
 class kernel:
 	""" Class for compiling kernels. 
 
@@ -138,7 +115,7 @@
 				self.patch(*base_components)
 
 
-	@record
+	@logging.record
 	def patch(self, *patches):
 		"""Apply a list of patches (in order)"""
 		if not patches:
@@ -147,7 +124,7 @@
 		self.apply_patches(self.get_patches(patches))
 
 
-	@record
+	@logging.record
 	def config(self, config_file = '', config_list = None, defconfig = False):
 		self.job.stdout.tee_redirect(os.path.join(self.log_dir, 'stdout'))
 		self.set_cross_cc()
@@ -220,7 +197,7 @@
 		system('sed "%s" < Makefile.old > Makefile' % p)
 
 
-	@record
+	@logging.record
 	def build(self, make_opts = '', logfile = '', extraversion='autotest'):
 		"""build the kernel
 
@@ -277,7 +254,7 @@
 			raise TestError("no vmlinux found, kernel build failed")
 
 
-	@record
+	@logging.record
 	def clean(self):
 		"""make clean in the kernel tree"""
 		os.chdir(self.build_dir) 
@@ -285,7 +262,7 @@
 		system('make clean > /dev/null 2> /dev/null')
 
 
-	@record
+	@logging.record
 	def mkinitrd(self, version, image, system_map, initrd):
 		"""Build kernel initrd image.
 		Try to use distro specific way to build initrd image.
@@ -331,7 +308,7 @@
 		self.build_image = image
 
 
-	@record
+	@logging.record
 	def install(self, tag='autotest', prefix = '/'):
 		"""make install in the kernel tree"""
 
@@ -626,7 +603,7 @@
 			self.changelist = None
 
 
-	@record
+	@logging.record
 	def install(self, tag='autotest'):
 		self.installed_as = tag