blob: 20ed641fe6e2b3193f0deb88b94b85445951cace [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-"
# Copyright 2021 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Generate database with commits which are in -next but not in mainline."""
from __future__ import print_function
import sqlite3
import subprocess
from common import createdb
from common import next_path
from common import nextdb
from common import rebase_target_tag
def mktables(c):
"""Create tables"""
c.execute(
"CREATE TABLE commits (committed timestamp, sha text, patchid text, subject text)"
)
c.execute("CREATE UNIQUE INDEX commit_sha ON commits (sha)")
c.execute("CREATE INDEX patchid ON commits (patchid)")
c.execute("CREATE TABLE files (sha text, filename text)")
c.execute("CREATE INDEX file_sha ON files (sha)")
c.execute("CREATE INDEX file_name ON files (filename)")
def handle(c):
"""Do the work"""
next_pick = rebase_target_tag() + ".."
cmd = [
"git",
"-C",
next_path,
"log",
"--abbrev=12",
"--format=%ct %h %s",
"--no-merges",
"--reverse",
next_pick,
]
commits = subprocess.check_output(cmd, encoding="utf-8", errors="ignore")
for commit in commits.splitlines():
if commit != "":
elem = commit.split(" ", 2)
timestamp = elem[0]
sha = elem[1]
subject = elem[2].rstrip()
ps = subprocess.Popen(
["git", "-C", next_path, "show", sha], stdout=subprocess.PIPE
)
spid = subprocess.check_output(
["git", "-C", next_path, "patch-id"],
stdin=ps.stdout,
encoding="utf-8",
errors="ignore",
)
patchid = spid.split(" ", 1)[0]
c.execute(
"INSERT INTO commits(committed, sha, patchid, subject) VALUES (?, ?, ?, ?)",
(timestamp, sha, patchid, subject),
)
filenames = subprocess.check_output(
[
"git",
"-C",
next_path,
"show",
"--name-only",
"--format=",
sha,
]
)
for fn in filenames.splitlines():
if fn != "":
c.execute(
"INSERT INTO files(sha, filename) VALUES (?, ?)",
(sha, fn),
)
def initdb_next():
"""Unconditionally (re-)create the 'next' database.
Its SHAs are unstable and thus can not be relied on.
"""
createdb(nextdb, mktables)
conn = sqlite3.connect(nextdb)
c = conn.cursor()
handle(c)
conn.commit()
conn.close()
if __name__ == "__main__":
initdb_next()