| # 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() |