Awesome thanks for taking the time to do that.

-Scott


On Fri, Mar 12, 2010 at 08:21, Lucas Meneghel Rodrigues <[email protected]>wrote:

> On Thu, 2010-03-11 at 17:29 -0800, Scott Zawalski wrote:
> > Add to wiki?
>
> Done.
>
> http://autotest.kernel.org/wiki/GitWorkflow
>
> It has a slightly better written text, and it was linked appropriately
> on the relevant pieces of documentation.
>
> > On Thu, Mar 11, 2010 at 17:24, Lucas Meneghel Rodrigues
> > <[email protected]> wrote:
> >         On Mon, Mar 8, 2010 at 5:48 PM, 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,
> >
> >
> >         Yes, the workflow is like this
> >
> >         1) git clone your repo
> >         2) create a branch for the change you're going to make
> >
> >         git branch [branch-name]
> >
> >         3) Do your changes in the code. For every change, you can make
> >         a git commit.
> >
> >         git commit -as
> >
> >         Then create a commit message, and make sure your
> >         signed-off-by: field
> >         is there. Save and there you have your commit.
> >
> >         4) When you want to generate the patches, it's as easy as
> >         doing a:
> >
> >         git format-patch master
> >
> >         It will generate all the differences between your branch and
> >         master
> >
> >         5) Then you can send the patches with git send-email. It's a
> >         neat
> >         tool, and it works like:
> >
> >         git send-email patch1.patch patch2.patch... patchN.patch --to
> >         [email protected] --cc [email protected]
> >
> >         And that is it. I am attaching a config script that I use to
> >         set up
> >         git on my boxes.
> >
> >         One interesting thing about git is that it actually makes the
> >         life of
> >         contributors easier, the whole process is very streamlined. If
> >         you
> >         have any problems let me know.
> >
> >         Cheers,
> >
> >         Lucas
> >
> >
> >         > 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
> >         >
> >         >
> >
> >
> >
> >
> >         --
> >         Lucas
> >
> >         _______________________________________________
> >         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

Reply via email to