Add documentation patches

From: Paul Jimenez <[email protected]>

Here's more doc patches for kernel.py, autotest_utils.py, and error.py.
This is a great way for me to learn the codebase :)



git-svn-id: http://test.kernel.org/svn/autotest/trunk@159 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/bin/autotest_utils.py b/bin/autotest_utils.py
index 3a28404..0c2e344 100755
--- a/bin/autotest_utils.py
+++ b/bin/autotest_utils.py
@@ -1,21 +1,26 @@
+"""Convenience functions for use by tests or whomever.
+"""
+
 import os,os.path,shutil,urllib,sys,signal,commands,pickle
 from error import *
 import re
 
 def grep(pattern, file):
-# This is mainly to fix the return code inversion from grep
+	"""This is mainly to fix the return code inversion from grep"""
 	return not system('grep "' + pattern + '" "' + file + '"')
 	
 	
-def difflist(list1, list2):	
-# returns items in list 2 that are not in list 1
+def difflist(list1, list2):
+	"""returns items in list2 that are not in list1"""
 	diff = [];
 	for x in list2:
 		if x not in list1:
 			diff.append(x)
 	return diff
 
+
 def cat_file_to_cmd(file, command):
+	"""equivalent to 'cat file | command' but knows to use zcat or bzcat if appropriate"""
 	if not os.path.isfile(file):
 		raise NameError, 'invalid file %s to cat to command %s' % file, command
 	if file.endswith('.bz2'):
@@ -25,10 +30,12 @@
 	else:
 		system('cat ' + file + ' | ' + command)
 
-	
-# Extract a tarball to a specified directory name instead of whatever 
-# the top level of a tarball is - useful for versioned directory names, etc
+
 def extract_tarball_to_dir(tarball, dir):
+	"""
+	Extract a tarball to a specified directory name instead of whatever 
+	the top level of a tarball is - useful for versioned directory names, etc
+	"""
 	if os.path.exists(dir):
 		raise NameError, 'target %s already exists' % dir
 	pwd = os.getcwd()
@@ -38,8 +45,8 @@
 	os.chdir(pwd)
 
 
-# Returns the first found newly created directory by the tarball extraction
 def extract_tarball(tarball):
+	"""Returns the first found newly created directory by the tarball extraction"""
 	oldlist = os.listdir('.')
 	cat_file_to_cmd(tarball, 'tar xf -')
 	newlist = os.listdir('.')
@@ -52,6 +59,10 @@
 
 
 def update_version(srcdir, new_version, install):
+	"""Make sure srcdir is version new_version
+
+	If not, delete it and install() the new version
+	"""
 	versionfile = srcdir + '/.version'
 	if os.path.exists(srcdir):
 		if os.path.exists(versionfile):
@@ -67,16 +78,18 @@
                 
 
 def is_url(path):
+	"""true if path is a url
+	"""
+	# should cope with other url types here, but we only handle http and ftp
 	if (path.startswith('http://')) or (path.startswith('ftp://')):
-	# should cope with other url types here, but we don't handle them yet
 		return 1
 	return 0
 
 
 def get_file(src, dest):
+	"""get a file, either from url or local"""
 	if (src == dest):      # no-op here allows clean overrides in tests
 		return
-	# get a file, either from url or local
 	if (is_url(src)):
 		print 'PWD: ' + os.getcwd()
 		print 'Fetching \n\t', src, '\n\t->', dest
@@ -105,18 +118,21 @@
 
 
 def force_copy(src, dest):
+	"""Replace dest with a new copy of src, even if it exists"""
 	if os.path.isfile(dest):
 		os.remove(dest)
 	return shutil.copyfile(src, dest)
 
 
 def file_contains_pattern(file, pattern):
+	"""Return true if file contains the specified egrep pattern"""
 	if not os.path.isfile(file):
 		raise NameError, 'file %s does not exist' % file
 	return not system('egrep -q ' + pattern + ' ' + file, ignorestatus = 1)
 
 
 def list_grep(list, pattern):
+	"""True if any item in list matches the specified pattern."""
 	compiled = re.compile(pattern)
 	for line in list:
 		match = compiled.search(line)
@@ -126,7 +142,10 @@
 
 
 def get_vmlinux():
-	# Ahem. This is crap. Pray harder. Bad Martin.
+	"""Return the full path to vmlinux
+
+	Ahem. This is crap. Pray harder. Bad Martin.
+	"""
 	vmlinux = '/boot/vmlinux'
 	if not os.path.isfile(vmlinux):
 		raise NameError, 'Cannot find vmlinux'
@@ -134,7 +153,10 @@
 
 
 def get_systemmap():
-	# Ahem. This is crap. Pray harder. Bad Martin.
+	"""Return the full path to System.map
+
+	Ahem. This is crap. Pray harder. Bad Martin.
+	"""
 	map = '/boot/System.map'
 	if not os.path.isfile(map):
 		raise NameError, 'Cannot find System.map'
@@ -142,12 +164,13 @@
 
 
 def get_modules_dir():
+	"""Return the modules dir for the running kernel version"""
 	kernel_version = system_output('uname -r')
 	return '/lib/modules/%s/kernel' % kernel_version
 
 
 def get_arch():
-# Work out which CPU architecture we're running on
+	"""Work out which CPU architecture we're running on"""
 	f = open('/proc/cpuinfo', 'r')
 	cpuinfo = f.readlines()
 	f.close()
@@ -170,6 +193,7 @@
 
 
 def get_target_arch():
+	"""Work out the target architecture."""
 	arch = get_arch()
 	if arch.startswith('power'):
 		return 'ppc64'
@@ -189,6 +213,7 @@
 
 
 def count_cpus():
+	"""number of CPUs in the local machine according to /proc/cpuinfo"""
 	f = file('/proc/cpuinfo', 'r')
 	cpus = 0
 	for line in f.readlines():
@@ -196,14 +221,16 @@
 			cpus += 1
 	return cpus
 
-
-# We have our own definition of system here, as the stock os.system doesn't
-# correctly handle sigpipe 
-# (ie things like "yes | head" will hang because yes doesn't get the SIGPIPE).
-# 
-# Also the stock os.system didn't raise errors based on exit status, this 
-# version does unless you explicitly specify ignorestatus=1
 def system(cmd, ignorestatus = 0):
+	"""os.system replacement
+
+	We have our own definition of system here, as the stock os.system doesn't
+	correctly handle sigpipe 
+	(ie things like "yes | head" will hang because yes doesn't get the SIGPIPE).
+ 
+	Also the stock os.system didn't raise errors based on exit status, this 
+	version does unless you explicitly specify ignorestatus=1
+	"""
 	signal.signal(signal.SIGPIPE, signal.SIG_DFL)
 	try:
 		status = os.system(cmd)
@@ -216,6 +243,11 @@
 
 
 def system_output(command, ignorestatus = 0):
+	"""Run command and return its output
+
+	ignorestatus
+		whether to raise a CmdError if command has a nonzero exit status
+	"""
 	(result, data) = commands.getstatusoutput(command)
 	if ((result != 0) and not ignorestatus):
 		raise CmdError, 'command failed: ' + command
@@ -223,14 +255,20 @@
 
 
 def where_art_thy_filehandles():
+	"""Dump the current list of filehandles"""
 	os.system("ls -l /proc/%d/fd >> /dev/tty" % os.getpid())
 
 
 def print_to_tty(string):
+	"""Output string straight to the tty"""
 	os.system("echo " + string + " >> /dev/tty")
 
 
 def dump_object(object):
+	"""Dump an object's attributes and methods
+
+	kind of like dir()
+	"""
 	for item in object.__dict__.iteritems():
 		print item
 		try:
@@ -241,6 +279,7 @@
 
 
 def environ(env_key):
+	"""return the requested environment variable, or '' if unset"""
 	if (os.environ.has_key(env_key)):
 		return os.environ(env_key)
 	else:
@@ -248,6 +287,7 @@
 
 
 def prepend_path(newpath, oldpath):
+	"""prepend newpath to oldpath"""
 	if (oldpath):
 		return newpath + ':' + oldpath
 	else:
@@ -255,6 +295,7 @@
 
 
 def append_path(oldpath, newpath):
+	"""append newpath to oldpath"""
 	if (oldpath):
 		return oldpath + ':' + newpath
 	else:
@@ -262,9 +303,16 @@
 
 
 class fd_stack:
-	# Note that we need to redirect both the sys.stdout type descriptor
-	# (which print, etc use) and the low level OS numbered descriptor
-	# which os.system() etc use.
+	"""a stack of fd redirects
+
+	Redirects cause existing fd's to be pushed on the stack; restore()
+	causes the current set of redirects to be popped, restoring the previous
+	filehandle destinations.
+
+	Note that we need to redirect both the sys.stdout type descriptor
+	(which print, etc use) and the low level OS numbered descriptor
+	which os.system() etc use.
+	"""
 
 	def __init__(self, fd, filehandle):
 		self.fd = fd				# eg 1
@@ -273,6 +321,10 @@
 
 
 	def redirect(self, filename):
+		"""Redirect output to the specified file
+
+		Overwrites the previous contents, if any.	
+		"""
 		fdcopy = os.dup(self.fd)
 		self.stack.append( (fdcopy, self.filehandle) )
 		# self.filehandle = file(filename, 'w')
@@ -286,6 +338,10 @@
 
 
 	def tee_redirect(self, filename):
+		"""Tee output to the specified file
+
+		Overwrites the previous contents, if any.	
+		"""
 		print_to_tty("tee_redirect to " + filename)
 		where_art_thy_filehandles()
 		fdcopy = os.dup(self.fd)
@@ -307,6 +363,7 @@
 
 	
 	def restore(self):
+		"""unredirect one level"""
 		# print_to_tty("ENTERING RESTORE %d" % self.fd)
 		# where_art_thy_filehandles()
 		(old_fd, old_filehandle) = self.stack.pop()