예제 #1
0
    def testSetVar(self):
        local_scope = gclient_eval.Exec(_SAMPLE_DEPS_FILE)

        gclient_eval.SetVar(local_scope, 'dep_2_rev', 'c0ffee')
        result = gclient_eval.RenderDEPSFile(local_scope)

        self.assertEqual(result, _SAMPLE_DEPS_FILE.replace('1ced', 'c0ffee'))
예제 #2
0
 def test_recursedeps_list(self):
     local_scope = gclient_eval.Exec(
         'recursedeps = [["src/third_party/angle", "DEPS.chromium"]]',
         '<string>')
     self.assertEqual(
         {'recursedeps': [['src/third_party/angle', 'DEPS.chromium']]},
         local_scope)
예제 #3
0
    def test_preserves_escaped_vars(self):
        local_scope = gclient_eval.Exec('\n'.join([
            'deps = {',
            '    "src/cipd/package": {',
            '        "packages": [',
            '            {',
            '                "package": "package/${{platform}}",',
            '                "version": "version:abcd",',
            '            },',
            '        ],',
            '        "dep_type": "cipd",',
            '    },',
            '}',
        ]))

        gclient_eval.SetCIPD(local_scope, 'src/cipd/package',
                             'package/${platform}', 'version:dcba')
        result = gclient_eval.RenderDEPSFile(local_scope)

        self.assertEqual(
            result, '\n'.join([
                'deps = {',
                '    "src/cipd/package": {',
                '        "packages": [',
                '            {',
                '                "package": "package/${{platform}}",',
                '                "version": "version:dcba",',
                '            },',
                '        ],',
                '        "dep_type": "cipd",',
                '    },',
                '}',
            ]))
예제 #4
0
  def assert_gets_and_sets_revision(self, before, after, rev_before='deadbeef'):
    local_scope = gclient_eval.Exec('\n'.join(before))

    result = gclient_eval.GetRevision(local_scope, 'src/dep')
    self.assertEqual(result, rev_before)

    gclient_eval.SetRevision(local_scope, 'src/dep', 'deadfeed')
    self.assertEqual('\n'.join(after), gclient_eval.RenderDEPSFile(local_scope))
예제 #5
0
    def testSetCIPD(self):
        local_scope = gclient_eval.Exec(_SAMPLE_DEPS_FILE)

        gclient_eval.SetCIPD(local_scope, 'src/cipd/package',
                             'another/cipd/package', '6.789')
        result = gclient_eval.RenderDEPSFile(local_scope)

        self.assertEqual(result, _SAMPLE_DEPS_FILE.replace('5678', '6.789'))
예제 #6
0
  def test_gets_and_sets_cipd(self):
    local_scope = gclient_eval.Exec('\n'.join([
        'deps = {',
        '    "src/cipd/package": {',
        '        "packages": [',
        '            {',
        '                "package": "some/cipd/package",',
        '                "version": "deadbeef",',
        '            },',
        '            {',
        '                "package": "another/cipd/package",',
        '                "version": "version:5678",',
        '            },',
        '        ],',
        '        "condition": "checkout_android",',
        '        "dep_type": "cipd",',
        '    },',
        '}',
    ]))

    self.assertEqual(
        gclient_eval.GetCIPD(
            local_scope, 'src/cipd/package', 'some/cipd/package'),
        'deadbeef')

    self.assertEqual(
        gclient_eval.GetCIPD(
            local_scope, 'src/cipd/package', 'another/cipd/package'),
        'version:5678')

    gclient_eval.SetCIPD(
        local_scope, 'src/cipd/package', 'another/cipd/package', 'version:6789')
    gclient_eval.SetCIPD(
        local_scope, 'src/cipd/package', 'some/cipd/package', 'foobar')
    result = gclient_eval.RenderDEPSFile(local_scope)

    self.assertEqual(result, '\n'.join([
        'deps = {',
        '    "src/cipd/package": {',
        '        "packages": [',
        '            {',
        '                "package": "some/cipd/package",',
        '                "version": "foobar",',
        '            },',
        '            {',
        '                "package": "another/cipd/package",',
        '                "version": "version:6789",',
        '            },',
        '        ],',
        '        "condition": "checkout_android",',
        '        "dep_type": "cipd",',
        '    },',
        '}',
    ]))
예제 #7
0
 def test_doesnt_override_undeclared_vars(self):
   with self.assertRaises(KeyError) as cm:
     gclient_eval.Exec('\n'.join([
         'vars = {',
         '  "foo": "bar",',
         '}',
         'deps = {',
         '  "a_dep": "a{baz}b",',
         '}',
     ]), vars_override={'baz': 'lalala'})
   self.assertIn('baz was used as a variable, but was not declared',
                 str(cm.exception))
예제 #8
0
 def test_var(self):
   local_scope = gclient_eval.Exec('\n'.join([
       'vars = {',
       '  "foo": "bar",',
       '}',
       'deps = {',
       '  "a_dep": "a" + Var("foo") + "b",',
       '}',
   ]))
   self.assertEqual({
       'vars': collections.OrderedDict([('foo', 'bar')]),
       'deps': collections.OrderedDict([('a_dep', 'abarb')]),
   }, local_scope)
예제 #9
0
 def test_revision_implicitly_concatenated_strings(self):
     deps = [
         'deps = {',
         '  "src/dep": "https://example.com" + "/dep.git@" "deadbeef",',
         '}',
     ]
     with self.assertRaises(ValueError) as e:
         local_scope = gclient_eval.Exec('\n'.join(deps))
         gclient_eval.SetRevision(local_scope, 'src/dep', 'deadfeed')
     self.assertEqual(
         'Can\'t update value for src/dep. Multiline strings and implicitly '
         'concatenated strings are not supported.\n'
         'Consider reformatting the DEPS file.', str(e.exception))
예제 #10
0
 def test_overrides_vars(self):
   local_scope = gclient_eval.Exec('\n'.join([
       'vars = {',
       '  "foo": "bar",',
       '}',
       'deps = {',
       '  "a_dep": "a{foo}b",',
       '}',
   ]), vars_override={'foo': 'baz'})
   self.assertEqual({
       'vars': collections.OrderedDict([('foo', 'bar')]),
       'deps': collections.OrderedDict([('a_dep', 'abazb')]),
   }, local_scope)
예제 #11
0
 def test_braces_var(self):
     local_scope = gclient_eval.Exec('\n'.join([
         'vars = {',
         '  "foo": "bar",',
         '}',
         'deps = {',
         '  "a_dep": "a{foo}b",',
         '}',
     ]),
                                     expand_vars=True)
     self.assertEqual(
         {
             'vars': collections.OrderedDict([('foo', 'bar')]),
             'deps': collections.OrderedDict([('a_dep', 'abarb')]),
         }, local_scope)
예제 #12
0
 def test_var(self):
   local_scope = gclient_eval.Exec('\n'.join([
       'vars = {',
       '  "foo": "bar",',
       '  "baz": Str("quux")',
       '}',
       'deps = {',
       '  "a_dep": "a" + Var("foo") + "b" + Var("baz"),',
       '}',
   ]))
   Str = gclient_eval.ConstantString
   self.assertEqual({
       'vars': {'foo': 'bar', 'baz': Str('quux')},
       'deps': {'a_dep': 'abarbquux'},
   }, local_scope)
예제 #13
0
    def test_sets_var(self):
        local_scope = gclient_eval.Exec('\n'.join([
            'vars = {',
            '  "foo": "bar",',
            '}',
        ]))

        gclient_eval.SetVar(local_scope, 'foo', 'baz')
        result = gclient_eval.RenderDEPSFile(local_scope)

        self.assertEqual(result, '\n'.join([
            'vars = {',
            '  "foo": "baz",',
            '}',
        ]))
예제 #14
0
 def test_overrides_vars(self):
   local_scope = gclient_eval.Exec('\n'.join([
       'vars = {',
       '  "foo": "bar",',
       '  "quux": Str("quuz")',
       '}',
       'deps = {',
       '  "a_dep": "a{foo}b",',
       '  "b_dep": "c{quux}d",',
       '}',
   ]), vars_override={'foo': 'baz', 'quux': 'corge'})
   Str = gclient_eval.ConstantString
   self.assertEqual({
       'vars': {'foo': 'bar', 'quux': Str('quuz')},
       'deps': {'a_dep': 'abazb', 'b_dep': 'ccorged'},
   }, local_scope)
예제 #15
0
  def test_set_preserves_formatting(self):
    local_scope = gclient_eval.Exec('\n'.join([
        'vars = {',
        '   # Comment with trailing space ',
        ' "foo": \'bar\',',
        '}',
    ]))

    gclient_eval.SetVar(local_scope, 'foo', 'baz')
    result = gclient_eval.RenderDEPSFile(local_scope)

    self.assertEqual(result, '\n'.join([
        'vars = {',
        '   # Comment with trailing space ',
        ' "foo": \'baz\',',
        '}',
    ]))
예제 #16
0
  def test_adds_var_twice(self):
    local_scope = gclient_eval.Exec('\n'.join([
        'vars = {',
        '  "foo": "bar",',
        '}',
    ]))

    gclient_eval.AddVar(local_scope, 'baz', 'lemur')
    gclient_eval.AddVar(local_scope, 'v8_revision', 'deadbeef')
    result = gclient_eval.RenderDEPSFile(local_scope)

    self.assertEqual(result, '\n'.join([
        'vars = {',
        '  "v8_revision": "deadbeef",',
        '  "baz": "lemur",',
        '  "foo": "bar",',
        '}',
    ]))
예제 #17
0
    def test_gets_and_sets_var_non_string(self):
        local_scope = gclient_eval.Exec('\n'.join([
            'vars = {',
            '  "foo": True,',
            '}',
        ]))

        result = gclient_eval.GetVar(local_scope, 'foo')
        self.assertEqual(result, True)

        gclient_eval.SetVar(local_scope, 'foo', 'False')
        result = gclient_eval.RenderDEPSFile(local_scope)

        self.assertEqual(result, '\n'.join([
            'vars = {',
            '  "foo": False,',
            '}',
        ]))
 def test_var(self):
     local_scope = {}
     global_scope = {
         'Var': lambda var_name: '{%s}' % var_name,
     }
     gclient_eval.Exec(
         '\n'.join([
             'vars = {',
             '  "foo": "bar",',
             '}',
             'deps = {',
             '  "a_dep": "a" + Var("foo") + "b",',
             '}',
         ]), global_scope, local_scope, '<string>')
     self.assertEqual(
         {
             'vars': collections.OrderedDict([('foo', 'bar')]),
             'deps': collections.OrderedDict([('a_dep', 'a{foo}b')]),
         }, local_scope)
예제 #19
0
 def test_var(self):
     local_scope = {}
     global_scope = {
         'Var': gclient.GClientKeywords.VarImpl({}, local_scope).Lookup,
     }
     gclient_eval.Exec(
         '\n'.join([
             'vars = {',
             '  "foo": "bar",',
             '}',
             'deps = {',
             '  "a_dep": "a" + Var("foo") + "b",',
             '}',
         ]), global_scope, local_scope, '<string>')
     self.assertEqual(
         {
             'vars': collections.OrderedDict([('foo', 'bar')]),
             'deps': collections.OrderedDict([('a_dep', 'abarb')]),
         }, local_scope)
예제 #20
0
  def test_gets_and_sets_var(self):
    local_scope = gclient_eval.Exec('\n'.join([
        'vars = {',
        '  "foo": "bar",',
        '  "quux": Str("quuz")',
        '}',
    ]))

    self.assertEqual(gclient_eval.GetVar(local_scope, 'foo'),
                     "bar")
    self.assertEqual(gclient_eval.GetVar(local_scope, 'quux'),
                     "quuz")

    gclient_eval.SetVar(local_scope, 'foo', 'baz')
    gclient_eval.SetVar(local_scope, 'quux', 'corge')
    result = gclient_eval.RenderDEPSFile(local_scope)

    self.assertEqual(result, '\n'.join([
        'vars = {',
        '  "foo": "baz",',
        '  "quux": Str("corge")',
        '}',
    ]))
예제 #21
0
 def setUp(self):
     self.local_scope = gclient_eval.Exec(_SAMPLE_DEPS_FILE)
예제 #22
0
 def test_empty_deps(self):
     local_scope = gclient_eval.Exec('deps = {}', '<string>')
     self.assertEqual({'deps': {}}, local_scope)
예제 #23
0
파일: roll_dep.py 프로젝트: ChMarina/v8_vm
def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--ignore-dirty-tree',
                        action='store_true',
                        help='Roll anyways, even if there is a diff.')
    parser.add_argument(
        '-r',
        '--reviewer',
        help='To specify multiple reviewers, use comma separated list, e.g. '
        '-r joe,jane,john. Defaults to @chromium.org')
    parser.add_argument('-b',
                        '--bug',
                        help='Associate a bug number to the roll')
    # It is important that --no-log continues to work, as it is used by
    # internal -> external rollers. Please do not remove or break it.
    parser.add_argument(
        '--no-log',
        action='store_true',
        help='Do not include the short log in the commit message')
    parser.add_argument('--log-limit',
                        type=int,
                        default=100,
                        help='Trim log after N commits (default: %(default)s)')
    parser.add_argument(
        '--roll-to',
        default='origin/master',
        help='Specify the new commit to roll to (default: %(default)s)')
    parser.add_argument('--key',
                        action='append',
                        default=[],
                        help='Regex(es) for dependency in DEPS file')
    parser.add_argument('dep_path', nargs='+', help='Path(s) to dependency')
    args = parser.parse_args()

    if len(args.dep_path) > 1:
        if args.roll_to != 'origin/master':
            parser.error(
                'Can\'t use multiple paths to roll simultaneously and --roll-to'
            )
        if args.key:
            parser.error(
                'Can\'t use multiple paths to roll simultaneously and --key')
    reviewers = None
    if args.reviewer:
        reviewers = args.reviewer.split(',')
        for i, r in enumerate(reviewers):
            if not '@' in r:
                reviewers[i] = r + '@chromium.org'

    gclient_root = get_gclient_root()
    current_dir = os.getcwd()
    dependencies = sorted(d.rstrip('/').rstrip('\\') for d in args.dep_path)
    cmdline = 'roll-dep ' + ' '.join(dependencies) + ''.join(' --key ' + k
                                                             for k in args.key)
    try:
        if not args.ignore_dirty_tree and not is_pristine(current_dir):
            raise Error('Ensure %s is clean first (no non-merged commits).' %
                        current_dir)
        # First gather all the information without modifying anything, except for a
        # git fetch.
        deps_path, deps_content = get_deps(current_dir)
        gclient_dict = gclient_eval.Exec(deps_content, deps_path)
        is_relative = gclient_dict.get('use_relative_paths', False)
        root_dir = current_dir if is_relative else gclient_root
        rolls = {}
        for dependency in dependencies:
            full_dir = os.path.normpath(os.path.join(root_dir, dependency))
            if not os.path.isdir(full_dir):
                raise Error('Directory not found: %s (%s)' %
                            (dependency, full_dir))
            head, roll_to = calculate_roll(full_dir, dependency, gclient_dict,
                                           args.roll_to)
            if roll_to == head:
                if len(dependencies) == 1:
                    raise AlreadyRolledError('No revision to roll!')
                print('%s: Already at latest commit %s' %
                      (dependency, roll_to))
            else:
                print('%s: Rolling from %s to %s' %
                      (dependency, head[:10], roll_to[:10]))
                rolls[dependency] = (head, roll_to)

        logs = []
        for dependency, (head, roll_to) in sorted(rolls.iteritems()):
            full_dir = os.path.normpath(os.path.join(root_dir, dependency))
            log = generate_commit_message(full_dir, dependency, head, roll_to,
                                          args.no_log, args.log_limit)
            logs.append(log)
            gclient_eval.SetRevision(gclient_dict, dependency, roll_to)

        deps_content = gclient_eval.RenderDEPSFile(gclient_dict)

        commit_msg = gen_commit_msg(logs, cmdline, rolls, reviewers, args.bug)
        finalize(commit_msg, deps_path, deps_content, rolls, is_relative,
                 root_dir)
    except Error as e:
        sys.stderr.write('error: %s\n' % e)
        return 2 if isinstance(e, AlreadyRolledError) else 1

    print('')
    if not reviewers:
        print(
            'You forgot to pass -r, make sure to insert a [email protected] line'
        )
        print('to the commit description before emailing.')
        print('')
    print('Run:')
    print('  git cl upload --send-mail')
    return 0
예제 #24
0
 def test_schema_wrong_type(self):
     with self.assertRaises(schema.SchemaError):
         gclient_eval.Exec('include_rules = {}', '<string>')
예제 #25
0
 def test_schema_unknown_key(self):
     with self.assertRaises(schema.SchemaWrongKeyError):
         gclient_eval.Exec('foo = "bar"', {}, {}, '<string>')
예제 #26
0
 def test_override(self):
     with self.assertRaises(ValueError) as cm:
         gclient_eval.Exec('a = "a"\na = "x"')
     self.assertIn('invalid assignment: overrides var \'a\'',
                   str(cm.exception))
예제 #27
0
 def test_multiple_assignment(self):
     with self.assertRaises(ValueError) as cm:
         gclient_eval.Exec('a, b, c = "a", "b", "c"')
     self.assertIn('invalid assignment: target should be a name',
                   str(cm.exception))
 def test_schema_wrong_type(self):
     with self.assertRaises(gclient_utils.Error):
         gclient_eval.Exec('include_rules = {}')
    def test_gets_and_sets_cipd_vars(self):
        local_scope = gclient_eval.Exec('\n'.join([
            'vars = {',
            '    "cipd-rev": "git_revision:deadbeef",',
            '    "another-cipd-rev": "version:1.0.3",',
            '}',
            'deps = {',
            '    "src/cipd/package": {',
            '        "packages": [',
            '            {',
            '                "package": "some/cipd/package",',
            '                "version": Var("cipd-rev"),',
            '            },',
            '            {',
            '                "package": "another/cipd/package",',
            '                "version": "{another-cipd-rev}",',
            '            },',
            '        ],',
            '        "condition": "checkout_android",',
            '        "dep_type": "cipd",',
            '    },',
            '}',
        ]))

        self.assertEqual(
            gclient_eval.GetCIPD(local_scope, 'src/cipd/package',
                                 'some/cipd/package'), 'git_revision:deadbeef')

        self.assertEqual(
            gclient_eval.GetCIPD(local_scope, 'src/cipd/package',
                                 'another/cipd/package'), 'version:1.0.3')

        gclient_eval.SetCIPD(local_scope, 'src/cipd/package',
                             'another/cipd/package', 'version:1.1.0')
        gclient_eval.SetCIPD(local_scope, 'src/cipd/package',
                             'some/cipd/package', 'git_revision:foobar')
        result = gclient_eval.RenderDEPSFile(local_scope)

        self.assertEqual(
            result, '\n'.join([
                'vars = {',
                '    "cipd-rev": "git_revision:foobar",',
                '    "another-cipd-rev": "version:1.1.0",',
                '}',
                'deps = {',
                '    "src/cipd/package": {',
                '        "packages": [',
                '            {',
                '                "package": "some/cipd/package",',
                '                "version": Var("cipd-rev"),',
                '            },',
                '            {',
                '                "package": "another/cipd/package",',
                '                "version": "{another-cipd-rev}",',
                '            },',
                '        ],',
                '        "condition": "checkout_android",',
                '        "dep_type": "cipd",',
                '    },',
                '}',
            ]))
예제 #30
0
 def assert_adds_var(self, before, after):
     local_scope = gclient_eval.Exec('\n'.join(before))
     gclient_eval.AddVar(local_scope, 'baz', 'lemur')
     results = gclient_eval.RenderDEPSFile(local_scope)
     self.assertEqual(results, '\n'.join(after))