Fix for autoserv's param handling
From: jorlow@google.com
OptionParser (and getopt) assume that they know of all options your program
uses. Unfortunately, this means that control files that want to have their own
options are out of luck. This patch parses the machine option manually in order
to get around this. It also now passes extra args to the control file (like
what was done in a much older version).
git-svn-id: http://test.kernel.org/svn/autotest/trunk@700 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/server/autoserv b/server/autoserv
index 58d2f58..2d77b0a 100755
--- a/server/autoserv
+++ b/server/autoserv
@@ -18,7 +18,6 @@
"""
import sys
-import optparse
preamble = """\
import os, sys
@@ -30,23 +29,38 @@
from utils import run, get_tmp_dir, sh_escape
"""
-def run(control_file, machines):
- namespace = dict({'machines': machines})
+def run(control_file, machines, args):
+ namespace = dict({'machines': machines, 'args': args})
exec(preamble, namespace, namespace)
execfile(control_file, namespace, namespace)
+def usage():
+ usage = "usage: %prog <control file>"
+ print usage
if __name__ == "__main__":
- usage = "usage: %prog <control file>"
- parser = optparse.OptionParser(usage)
- parser.add_option('-m', '--machines', dest='machines', type='string')
- (options, args) = parser.parse_args()
- if len(args) != 1:
- parser.error("program takes one argument")
- sys.exit(1)
+ args = []
+ tmp_args = sys.argv[1:]
+ machines = None
+ while tmp_args:
+ if tmp_args[0] in ('-m', '--machines'):
+ if len(tmp_args) < 2:
+ raise('"' + tmp_args[0] + '" used, but then no machine defined')
+ machines = tmp_args[1]
+ tmp_args = tmp_args[2:]
+ else:
+ args.append(tmp_args[0])
+ tmp_args = tmp_args[1:]
+
+ if len(args) < 1:
+ usage()
+ sys.exit(1)
+
control_file = args[0]
- if options.machines:
- run(control_file, options.machines.split(','))
+ args = args[1:]
+
+ if machines:
+ run(control_file, machines.split(','), args)
else:
- run(control_file, None)
+ run(control_file, None, args)