| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*-" |
| # |
| # Copyright 2020 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Setup module containing script to Synchronize kernel repositories + database.""" |
| |
| from __future__ import print_function |
| import os |
| import subprocess |
| import MySQLdb |
| import common |
| |
| UPSTREAM_KERNEL_METADATA = common.get_kernel_metadata(common.Kernel.linux_upstream) |
| STABLE_KERNEL_METADATA = common.get_kernel_metadata(common.Kernel.linux_stable) |
| CHROME_KERNEL_METADATA = common.get_kernel_metadata(common.Kernel.linux_chrome) |
| |
| def synchronize_upstream(upstream_kernel_metadata): |
| """Synchronizes locally cloned repo with linux upstream remote.""" |
| destdir = common.get_kernel_absolute_path(upstream_kernel_metadata.path) |
| repo = upstream_kernel_metadata.repo |
| |
| if not os.path.exists(destdir): |
| print('Cloning %s into %s' % (repo, destdir)) |
| clone = ['git', 'clone', '-q', repo, destdir] |
| subprocess.run(clone) |
| else: |
| os.chdir(destdir) |
| |
| print('Pulling latest changes in %s into %s' % (repo, destdir)) |
| checkout_master = ['git', 'checkout', '-q', 'master'] |
| pull = ['git', 'pull', '-q'] |
| subprocess.run(checkout_master) |
| subprocess.run(pull) |
| |
| os.chdir(common.WORKDIR) |
| |
| |
| def synchronize_custom(custom_kernel_metadata): |
| """Synchronizes locally cloned repo with linux stable/chromeos remote.""" |
| destdir = common.get_kernel_absolute_path(custom_kernel_metadata.path) |
| upstream_destdir = common.get_kernel_absolute_path(common.UPSTREAM_PATH) |
| repo = custom_kernel_metadata.repo |
| |
| get_branch_name = custom_kernel_metadata.get_kernel_branch |
| |
| if not os.path.exists(destdir): |
| print('Cloning %s into %s' % (repo, destdir)) |
| clone = ['git', 'clone', '-q', repo, destdir] |
| subprocess.run(clone) |
| |
| os.chdir(destdir) |
| for branch in custom_kernel_metadata.branches: |
| branch_name = get_branch_name(branch) |
| |
| print('Creating local branch %s in destdir %s' % (branch_name, destdir)) |
| checkout_branch = ['git', 'checkout', '-q', branch_name] |
| subprocess.run(checkout_branch) |
| |
| print('Add remote upstream %s to destdir %s' % (upstream_destdir, destdir)) |
| add_upstream_remote = ['git', 'remote', 'add', 'upstream', upstream_destdir] |
| fetch_upstream = ['git', 'fetch', '-q', 'upstream'] |
| subprocess.run(add_upstream_remote) |
| subprocess.run(fetch_upstream) |
| else: |
| os.chdir(destdir) |
| |
| print('Updating %s into %s' % (repo, destdir)) |
| hard_reset = ['git', 'reset', '-q', '--hard', 'HEAD'] |
| fetch_origin = ['git', 'fetch', '-q', 'origin'] |
| subprocess.run(hard_reset) |
| subprocess.run(fetch_origin) |
| |
| for branch in custom_kernel_metadata.branches: |
| branch_name = get_branch_name(branch) |
| print('Updating local branch %s in destdir %s' % (branch_name, destdir)) |
| checkout_branch = ['git', 'checkout', '-q', branch_name] |
| pull = ['git', 'pull', '-q'] |
| subprocess.run(checkout_branch) |
| subprocess.run(pull) |
| |
| os.chdir(common.WORKDIR) |
| |
| |
| def synchronize_repositories(): |
| """Deep clones linux_upstream, linux_stable, and linux_chromeos repositories""" |
| synchronize_upstream(UPSTREAM_KERNEL_METADATA) |
| synchronize_custom(STABLE_KERNEL_METADATA) |
| synchronize_custom(CHROME_KERNEL_METADATA) |
| |
| |
| def synchronize_databases(): |
| """Synchronizes the databases for upstream, stable, and chromeos.""" |
| db = MySQLdb.Connect(user='linux_patches_robot', host='127.0.0.1', db='linuxdb') |
| common.update_kernel_db(db, UPSTREAM_KERNEL_METADATA) |
| common.update_kernel_db(db, STABLE_KERNEL_METADATA) |
| common.update_kernel_db(db, CHROME_KERNEL_METADATA) |
| db.close() |
| |
| |
| if __name__ == '__main__': |
| synchronize_repositories() |
| synchronize_databases() |