Пример #1
0
    def testHooks(self):
        topdir = self.root_dir
        gclient_fn = os.path.join(topdir, '.gclient')
        fh = open(gclient_fn, 'w')
        print >> fh, 'solutions = [{"name":"top","url":"svn://example.com/top"}]'
        fh.close()
        subdir_fn = os.path.join(topdir, 'top')
        os.mkdir(subdir_fn)
        deps_fn = os.path.join(subdir_fn, 'DEPS')
        fh = open(deps_fn, 'w')
        hooks = [{'pattern': '.', 'action': ['cmd1', 'arg1', 'arg2']}]
        print >> fh, 'hooks = %s' % repr(hooks)
        fh.close()

        fh = open(os.path.join(subdir_fn, 'fake.txt'), 'w')
        print >> fh, 'bogus content'
        fh.close()

        os.chdir(topdir)

        parser = gclient.OptionParser()
        options, _ = parser.parse_args([])
        options.force = True
        client = gclient.GClient.LoadCurrentConfig(options)
        work_queue = gclient_utils.ExecutionQueue(options.jobs, None, False)
        for s in client.dependencies:
            work_queue.enqueue(s)
        work_queue.flush({}, None, [], options=options)
        self.assertEqual([h.action for h in client.GetHooks(options)],
                         [tuple(x['action']) for x in hooks])
Пример #2
0
  def _get_hooks(self):
    """Retrieves the hooks that would be run"""
    parser = gclient.OptionParser()
    options, _ = parser.parse_args([])
    options.force = True

    client = gclient.GClient.LoadCurrentConfig(options)
    work_queue = gclient_utils.ExecutionQueue(options.jobs, None, False)
    for s in client.dependencies:
      work_queue.enqueue(s)
    work_queue.flush({}, None, [], options=options, patch_refs={},
                     target_branches={})

    return client.GetHooks(options)
Пример #3
0
  def testCustomHooks(self):
    topdir = self.root_dir
    gclient_fn = os.path.join(topdir, '.gclient')
    fh = open(gclient_fn, 'w')
    extra_hooks = [{'name': 'append', 'pattern':'.', 'action':['supercmd']}]
    print >> fh, ('solutions = [{"name":"top","url":"svn://example.com/top",'
        '"custom_hooks": %s},' ) % repr(extra_hooks + [{'name': 'skip'}])
    print >> fh, '{"name":"bottom","url":"svn://example.com/bottom"}]'
    fh.close()
    subdir_fn = os.path.join(topdir, 'top')
    os.mkdir(subdir_fn)
    deps_fn = os.path.join(subdir_fn, 'DEPS')
    fh = open(deps_fn, 'w')
    hooks = [{'pattern':'.', 'action':['cmd1', 'arg1', 'arg2']}]
    hooks.append({'pattern':'.', 'action':['cmd2', 'arg1', 'arg2']})
    skip_hooks = [
        {'name': 'skip', 'pattern':'.', 'action':['cmd3', 'arg1', 'arg2']}]
    skip_hooks.append(
        {'name': 'skip', 'pattern':'.', 'action':['cmd4', 'arg1', 'arg2']})
    print >> fh, 'hooks = %s' % repr(hooks + skip_hooks)
    fh.close()

    # Make sure the custom hooks for that project don't affect the next one.
    subdir_fn = os.path.join(topdir, 'bottom')
    os.mkdir(subdir_fn)
    deps_fn = os.path.join(subdir_fn, 'DEPS')
    fh = open(deps_fn, 'w')
    sub_hooks = [{'pattern':'.', 'action':['response1', 'yes1', 'yes2']}]
    sub_hooks.append(
        {'name': 'skip', 'pattern':'.', 'action':['response2', 'yes', 'sir']})
    print >> fh, 'hooks = %s' % repr(sub_hooks)
    fh.close()

    fh = open(os.path.join(subdir_fn, 'fake.txt'), 'w')
    print >> fh, 'bogus content'
    fh.close()

    os.chdir(topdir)

    parser = gclient.OptionParser()
    options, _ = parser.parse_args([])
    options.force = True
    client = gclient.GClient.LoadCurrentConfig(options)
    work_queue = gclient_utils.ExecutionQueue(options.jobs, None, False)
    for s in client.dependencies:
      work_queue.enqueue(s)
    work_queue.flush({}, None, [], options=options, patch_refs={})
    self.assertEqual(
        [h.action for h in client.GetHooks(options)],
        [tuple(x['action']) for x in hooks + extra_hooks + sub_hooks])
Пример #4
0
        '-v',
        '--verbose',
        action='count',
        default=0,
        help='Produces additional output for diagnostics. Can be '
        'used up to three times for more logging info.')
    # pylint: disable=W0612
    options, args = option_parser.parse_args()

    # Following code copied from gclient_utils.py
    try:
        # Make stdout auto-flush so buildbot doesn't kill us during lengthy
        # operations. Python as a strong tendency to buffer sys.stdout.
        sys.stdout = gclient_utils.MakeFileAutoFlush(sys.stdout)
        # Make stdout annotated with the thread ids.
        sys.stdout = gclient_utils.MakeFileAnnotated(sys.stdout)
    except (gclient_utils.Error, subprocess2.CalledProcessError), e:
        print >> sys.stderr, 'Error: %s' % str(e)
        return 1

    pm = Progress('Syncing chromium-cameo', 1)
    work_queue = gclient_utils.ExecutionQueue(1, pm, None)
    deps_fetcher = DepsFetcher('fetching', options)
    work_queue.enqueue(deps_fetcher)
    work_queue.flush()
    sys.exit(deps_fetcher.DoGclientSyncForChromium())


if __name__ == '__main__':
    main()