blob: dac234068a703e8be6fde0d2f04c20f9e3bfa6f0 [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import collections
class Dependency(object):
"""Represents a dependency in Chrome, like blink, v8, pdfium, etc."""
def __init__(self,
path,
repo_url,
revision,
deps_file='DEPS',
deps_repo_url=None,
deps_repo_revision=None):
self.path = path
self.repo_url = repo_url
self.revision = revision
self.deps_file = deps_file
if deps_repo_url is None:
self.deps_repo_url = repo_url
else:
self.deps_repo_url = deps_repo_url
if deps_repo_revision is None:
self.deps_repo_revision = revision
else:
self.deps_repo_revision = deps_repo_revision
self.parent = None
self.children = dict()
def SetParent(self, parent):
assert self.parent is None
self.parent = parent
self.parent.AddChild(self)
def AddChild(self, child):
self.children[child.path] = child
def ToDict(self):
children_dict = {}
for path, child in self.children.iteritems():
children_dict[path] = child.ToDict()
return {
'path': self.path,
'repo_url': self.repo_url,
'revision': self.revision,
'deps_file': self.deps_file,
'children': children_dict,
}
class DependencyRoll(
collections.namedtuple('DependencyRoll', ('path', 'repo_url',
'old_revision', 'new_revision'))):
"""Represents a dependency roll (revision update) in chromium.
Note: It is possible that the DEPS roll is a revert so that ``new_revision``
is actually older than ``old_revision`` in the dependency.
"""
def ToDict(self):
return self._asdict()