blob: 99557abe49cd601e543a3d285f26495285359998 [file] [log] [blame]
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -08001#!/usr/bin/env python3
2# -*- coding: utf-8 -*-"
3#
4# Copyright 2020 The Chromium OS Authors. All rights reserved.
5# Use of this source code is governed by a BSD-style license that can be
6# found in the LICENSE file.
7
8"""Module containing shared helper methods."""
9
10from __future__ import print_function
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080011import os
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080012import re
Hirthanan Subenderancfada212020-02-28 15:12:39 -080013from enum import Enum
14import MySQLdb
15
16import initdb_upstream
17import initdb_stable
18import initdb_chromeos
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080019
Hirthanan Subenderan00f18042020-02-11 17:24:38 -080020
21KERNEL_SITE = 'https://git.kernel.org/'
22UPSTREAM_REPO = KERNEL_SITE + 'pub/scm/linux/kernel/git/torvalds/linux'
23STABLE_REPO = KERNEL_SITE + 'pub/scm/linux/kernel/git/stable/linux-stable'
24
25CHROMIUM_SITE = 'https://chromium.googlesource.com/'
26CHROMEOS_REPO = CHROMIUM_SITE + 'chromiumos/third_party/kernel'
27CHROMIUM_REVIEW_BASEURL = 'https://chromium-review.googlesource.com/'
28
Hirthanan Subenderancfada212020-02-28 15:12:39 -080029# Order SUPPORTED_KERNELS from oldest to newest
Hirthanan Subenderan00f18042020-02-11 17:24:38 -080030SUPPORTED_KERNELS = ('4.4', '4.14', '4.19', '5.4')
Hirthanan Subenderancfada212020-02-28 15:12:39 -080031UPSTREAM_START_TAG = 'v%s' % SUPPORTED_KERNELS[0]
Hirthanan Subenderan00f18042020-02-11 17:24:38 -080032
Hirthanan Subenderan7d15b282020-03-02 16:29:08 -080033CHROMEOS_PATH = 'linux_chrome'
34STABLE_PATH = 'linux_stable'
35UPSTREAM_PATH = 'linux_upstream'
Hirthanan Subenderan00f18042020-02-11 17:24:38 -080036
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080037WORKDIR = os.getcwd()
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080038
39# "commit" is sometimes seen multiple times, such as with commit 6093aabdd0ee
40CHERRYPICK = re.compile(r'cherry picked from (commit )+([0-9a-f]+)')
41STABLE = re.compile(r'^\s*(commit )+([a-f0-9]+) upstream')
42STABLE2 = re.compile(r'^\s*\[\s*Upstream (commit )+([0-9a-f]+)\s*\]')
43
44
Hirthanan Subenderancfada212020-02-28 15:12:39 -080045class Kernel(Enum):
46 """Enum representing which Kernel we are representing."""
47 linux_stable = 1
48 linux_chrome = 2
49 linux_upstream = 3
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080050
Hirthanan Subenderan00f18042020-02-11 17:24:38 -080051
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080052def stable_branch(version):
53 """Stable branch name"""
54 return 'linux-%s.y' % version
55
56
57def chromeos_branch(version):
58 """Chromeos branch name"""
59 return 'chromeos-%s' % version
60
61
62def patch_link(changeID):
63 """Link to patch on gerrit"""
64 return 'https://chromium-review.googlesource.com/q/%s' % changeID
65
Hirthanan Subenderancfada212020-02-28 15:12:39 -080066def update_previous_fetch(db, kernel, branch, last_sha):
67 """Updates the previous_fetch table for a kernel branch."""
68 c = db.cursor()
69 q = """UPDATE previous_fetch
70 SET sha_tip = %s
71 WHERE linux = %s AND branch = %s"""
72 c.execute(q, [last_sha, kernel.name, branch])
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080073
Hirthanan Subenderancfada212020-02-28 15:12:39 -080074 db.commit()
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080075
76
Hirthanan Subenderancfada212020-02-28 15:12:39 -080077def update_kernel_db(db, kernel):
78 """Update (upstream/stable/chrome) previous_fetch, fixes and commits SQL tables."""
79 get_branch_name = start = update_commits = None
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -080080
Hirthanan Subenderancfada212020-02-28 15:12:39 -080081 if kernel == Kernel.linux_chrome:
82 get_branch_name = chromeos_branch
83 update_commits = initdb_chromeos.update_chrome_table
84 elif kernel == Kernel.linux_stable:
85 get_branch_name = stable_branch
86 update_commits = initdb_stable.update_stable_table
87 else:
88 get_branch_name = lambda *args: 'master'
89 update_commits = initdb_upstream.update_upstream_table
90
91 path = kernel.name
92 branches = [UPSTREAM_START_TAG] if kernel == Kernel.linux_upstream else SUPPORTED_KERNELS
93 start_template = '%s' if kernel == Kernel.linux_upstream else 'v%s'
94
95 os.chdir(path)
96
97 for branch in branches:
98 start = start_template % branch
99
100 print('Handling %s' % get_branch_name(branch))
101
102 try:
103 c = db.cursor()
104 q = """SELECT sha_tip
105 FROM previous_fetch
106 WHERE linux = %s AND branch = %s"""
107 c.execute(q, [path, branch])
108 sha = c.fetchone()
109 if sha and sha[0]:
110 start = sha[0]
111 else:
112 q = """INSERT INTO previous_fetch (linux, branch, sha_tip)
113 VALUES (%s, %s, %s)"""
114 c.execute(q, [path, branch, start])
115 except MySQLdb.Error as e: # pylint: disable=no-member
116 print('Make sure the tables have been initialized in \
117 ./scripts/sql/initialize_sql_tables.sql', e)
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -0800118
119
Hirthanan Subenderancfada212020-02-28 15:12:39 -0800120 update_commits(branch, start, db)
Hirthanan Subenderan3e884d62020-01-23 13:12:45 -0800121
Hirthanan Subenderancfada212020-02-28 15:12:39 -0800122 os.chdir(WORKDIR)