did that change any code, or you still want this patch applied as-is?
On Mon, Mar 8, 2010 at 4:17 PM, Scott Zawalski <[email protected]> wrote: > fyi this showed up way late in my inbox truty already started a code review > that is in progress internally for this. > > -Scott > > > On Mon, Mar 8, 2010 at 12:48, Mike Truty <[email protected]> wrote: >> >> Is there a good tool that you use to generate this patch email? I'm >> generating it by hand with git diff and there must be a better way. >> Thanks, >> Mike >> We wanted to have a little more flexibility with test_importer.py for >> chromeos. For example we wanted to import >> all tests from client/site_tests and server/site_tests but only some from >> client/tests and server/tests. >> We've added the following: >> -The ability to pass a whitelist with -w that specifies a subset of tests >> within a tests/profilers/samples directory. >> This option is incompatible with -a because if you're using -a you're >> probably already managing your tests by >> adding/deleting files. There is a subtle implication that if you specify >> -c, -t and -w (we do) tests under the >> tests_dir not in the whitelist will be cleaned (we want this). We have >> not created a site_test_importer.sh >> that individually calls test_importer.py 4 different times with '-c -t >> client/tests -w file', '-t client/site_tests', >> '-t server/tests -w file' and '-t server/site_tests'. >> -The ability to adjust any test attributes as a site-specific extension. >> We will use the file site_set_attributes.py >> if it exists and it should include the function: 'def >> _set_attributes_custom(test, data)'. >> We use this to adjust the following: >> -Use the directory name instead of control-file NAME (handles multiple >> control files (control.xx) as dirname.xx. >> -Globally set run_verify to 0 >> diff --git a/utils/test_importer.py b/utils/test_importer.py >> index 4074a8e..b392366 100755 >> --- a/utils/test_importer.py >> +++ b/utils/test_importer.py >> @@ -30,7 +30,7 @@ import common >> import logging, re, os, sys, optparse, compiler >> from autotest_lib.frontend import setup_django_environment >> from autotest_lib.frontend.afe import models >> -from autotest_lib.client.common_lib import control_data >> +from autotest_lib.client.common_lib import control_data, utils >> >> >> logging.basicConfig(level=logging.DEBUG) >> @@ -78,7 +78,8 @@ def update_all(autotest_dir, add_noncompliant, >> add_experimental, verbose): >> db_clean_broken(autotest_dir, verbose) >> >> >> -def update_samples(autotest_dir, add_noncompliant, add_experimental, >> verbose): >> +def update_samples(autotest_dir, add_noncompliant, add_experimental, >> + verbose, whitelist_set=None): >> sample_path = os.path.join(autotest_dir, 'server/samples') >> if os.path.exists(sample_path): >> if verbose: >> @@ -88,7 +89,7 @@ def update_samples(autotest_dir, add_noncompliant, >> add_experimental, verbose): >> update_tests_in_db(tests, add_experimental=add_experimental, >> add_noncompliant=add_noncompliant, >> autotest_dir=autotest_dir, >> - verbose=verbose) >> + verbose=verbose, whitelist_set=whitelist_set) >> >> >> def db_clean_broken(autotest_dir, verbose): >> @@ -114,10 +115,46 @@ def db_clean_broken(autotest_dir, verbose): >> _log_or_execute(repr(profiler), profiler.delete) >> >> >> +def db_clean_from_whitelist(autotest_dir, verbose, >> + tests_dir, whitelist_set): >> + """Remove tests from autotest_web which are under tests_dir but >> + not called out by the whitelist. >> + >> + Arguments: >> + autotest_dir: base directory >> + verbose: for logging >> + tests_dir: to filter tests >> + whitelist_set: to filter tests >> + """ >> + tests_dir_len = len(tests_dir) >> + for test in models.Test.objects.all(): >> + full_path = os.path.join(autotest_dir, test.path) >> + if full_path[:tests_dir_len] == tests_dir: >> + if not (full_path + '\n') in whitelist_set: >> + if verbose: >> + print "Removing %s - not in whitelist" % (test.path) >> + _log_or_execute(repr(test), test.delete) >> + >> + # Find profilers that are no longer present >> + if os.path.join("client", "profilers") == tests_dir: >> + for profiler in models.Profiler.objects.all(): >> + full_path = os.path.join(autotest_dir, "client", "profilers", >> + profiler.name) >> + if not full_path in whitelist_set: >> + if verbose: >> + print "Removing %s - not in whitelist" % (test.path) >> + _log_or_execute(repr(profiler), profiler.delete) >> + >> + >> def update_profilers_in_db(profilers, verbose=False, description='NA', >> - add_noncompliant=False): >> + add_noncompliant=False, whitelist_set=None): >> """Update profilers in autotest_web database""" >> for profiler in profilers: >> + if whitelist_set and not (profiler + '\n') in whitelist_set: >> + if verbose: >> + print "Skipping %s - not on whitelist" % (profiler) >> + continue >> + >> name = os.path.basename(profiler).rstrip(".py") >> if not profilers[profiler]: >> if add_noncompliant: >> @@ -134,9 +171,17 @@ def update_profilers_in_db(profilers, verbose=False, >> description='NA', >> >> def update_tests_in_db(tests, dry_run=False, add_experimental=False, >> add_noncompliant=False, verbose=False, >> - autotest_dir=None): >> + autotest_dir=None, whitelist_set=None): >> """Update or add each test to the database""" >> + site_set_attributes_module = utils.import_site_module( >> + __file__, 'autotest_lib.utils.site_set_attributes') >> + >> for test in tests: >> + if whitelist_set and not (test + '\n') in whitelist_set: >> + if verbose: >> + print "Skipping %s - not on whitelist" % (test) >> + continue >> + >> new_test = models.Test.objects.get_or_create( >> path=test.replace(autotest_dir, '').lstrip('/'))[0] >> if verbose: >> @@ -146,6 +191,10 @@ def update_tests_in_db(tests, dry_run=False, >> add_experimental=False, >> data = tests[test] >> _set_attributes_clean(new_test, data) >> >> + # Custom Attribute Update >> + if site_set_attributes_module: >> + site_set_attributes_module._set_attributes_custom(new_test, >> data) >> + >> # This only takes place if --add-noncompliant is provided on the >> CLI >> if not new_test.name: >> test_new_test = test.split('/') >> @@ -346,6 +395,8 @@ def main(argv): >> parser.add_option('-v', '--verbose', >> dest='verbose', action='store_true', default=False, >> help='Run in verbose mode') >> + parser.add_option('-w', '--whitelist-file', dest='whitelist_file', >> + help='Filename for list of test names that must >> match') >> parser.add_option('-z', '--autotest_dir', dest='autotest_dir', >> default=os.path.join(os.path.dirname(__file__), >> '..'), >> help='Autotest directory root') >> @@ -365,14 +416,29 @@ def main(argv): >> db_clean_broken(options.autotest_dir, options.verbose) >> return 0 >> >> + whitelist_set = None >> + if options.whitelist_file: >> + if options.add_all: >> + print "Cannot pass both --add-all and --whitelist-file" >> + return 1 >> + whitelist_path = os.path.abspath(options.whitelist_file) >> + if not os.path.isfile(whitelist_path): >> + print "--whitelist-file (%s) not found" % (whitelist_path) >> + parser.print_help() >> + return 1 >> + elif options.verbose: >> + print "Using whitelist file %s" % (whitelist_path) >> + f = open(whitelist_path, 'r') >> + whitelist_set = set(f.readlines()) >> + f.close() >> + >> if options.add_all: >> update_all(options.autotest_dir, options.add_noncompliant, >> options.add_experimental, options.verbose) >> if options.add_samples: >> update_samples(options.autotest_dir, options.add_noncompliant, >> - options.add_experimental, options.verbose) >> - if options.clear_tests: >> - db_clean_broken(options.autotest_dir, options.verbose) >> + options.add_experimental, options.verbose, >> + whitelist_set=whitelist_set) >> if options.tests_dir: >> options.tests_dir = os.path.abspath(options.tests_dir) >> tests = get_tests_from_fs(options.tests_dir, >> options.control_pattern, >> @@ -380,12 +446,19 @@ def main(argv): >> update_tests_in_db(tests, >> add_experimental=options.add_experimental, >> add_noncompliant=options.add_noncompliant, >> autotest_dir=options.autotest_dir, >> - verbose=options.verbose) >> + verbose=options.verbose, >> + whitelist_set=whitelist_set) >> if options.profile_dir: >> profilers = get_tests_from_fs(options.profile_dir, '.*py$') >> update_profilers_in_db(profilers, verbose=options.verbose, >> add_noncompliant=options.add_noncompliant, >> - description='NA') >> + description='NA', >> whitelist_set=whitelist_set) >> + if options.clear_tests: >> + db_clean_broken(options.autotest_dir, options.verbose) >> + if options.whitelist_file and options.tests_dir: >> + db_clean_from_whitelist(options.autotest_dir, >> options.verbose, >> + options.tests_dir, whitelist_set) >> + >> >> >> if __name__ == "__main__": >> >> >> _______________________________________________ >> Autotest mailing list >> [email protected] >> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest >> > > > _______________________________________________ > Autotest mailing list > [email protected] > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest > > _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
