mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-14 05:12:09 +00:00
fda8379411
This is useful to check that a build didn't result in changes in the code/generated files This will be used to check that the plugins documentation cache file is properly commited, and that necessary workaround for particular case are adopted.
88 lines
3.1 KiB
Python
Executable file
88 lines
3.1 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import subprocess
|
|
import xml.etree.ElementTree as ET
|
|
import sys
|
|
|
|
from scripts.common import git
|
|
from scripts.common import Colors
|
|
from scripts.common import get_meson
|
|
from scripts.common import accept_command
|
|
|
|
|
|
SCRIPTDIR = os.path.normpath(os.path.dirname(__file__))
|
|
|
|
|
|
def checkout_subprojects(worktree_dir, branch):
|
|
subprojects_dir = os.path.join(SCRIPTDIR, "subprojects")
|
|
worktree_subdir = os.path.join(worktree_dir, "subprojects")
|
|
|
|
meson = get_meson()
|
|
installed_s = subprocess.check_output(meson + ['introspect', options.builddir, '--projectinfo'])
|
|
for subproj in json.loads(installed_s.decode())["subprojects"]:
|
|
repo_name = subproj["name"]
|
|
if not repo_name.startswith("gst"):
|
|
continue
|
|
|
|
repo_dir = os.path.normpath(os.path.join(SCRIPTDIR, subprojects_dir, repo_name))
|
|
if not os.path.exists(os.path.join(repo_dir, '.git')):
|
|
continue
|
|
|
|
workdir = os.path.normpath(os.path.join(worktree_subdir, repo_name))
|
|
if not checkout_worktree(repo_name, repo_dir, workdir, branch):
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
def checkout_worktree(repo_name, repo_dir, worktree_dir, branch):
|
|
print("Checking out worktree %s in %s (branch %s)" % (repo_name, worktree_dir, branch))
|
|
try:
|
|
git("worktree", "add", worktree_dir, branch, repository_path=repo_dir)
|
|
except Exception as e:
|
|
out = getattr(e, "output", b"").decode()
|
|
print("\nCould not checkout worktree %s, please fix and try again."
|
|
" Error:\n\n%s %s" % (repo_dir, out, e))
|
|
|
|
return False
|
|
|
|
commit_message = git("show", "--shortstat", repository_path=repo_dir).split("\n")
|
|
print(u" -> %s%s%s - %s" % (Colors.HEADER, repo_dir, Colors.ENDC,
|
|
commit_message[4].strip()))
|
|
|
|
return True
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(prog="git-update")
|
|
|
|
|
|
parser.add_argument('worktree_dir', metavar='worktree_dir', type=str,
|
|
help='The directory where to checkout the new worktree')
|
|
parser.add_argument('branch', metavar='branch', type=str,
|
|
help='The branch to checkout')
|
|
parser.add_argument("--no-color",
|
|
default=False,
|
|
action='store_true',
|
|
help="Do not output ansi colors.")
|
|
parser.add_argument("--builddir", '-C',
|
|
default=os.path.join(SCRIPTDIR, "build"),
|
|
help="The meson build directory")
|
|
options = parser.parse_args()
|
|
|
|
if options.no_color or not Colors.can_enable():
|
|
Colors.disable()
|
|
|
|
if not os.path.exists(options.builddir):
|
|
print("GStreamer not built in %s\n\nBuild it and try again" %
|
|
options.builddir)
|
|
exit(1)
|
|
|
|
options.worktree_dir = os.path.abspath(options.worktree_dir)
|
|
if not checkout_worktree('gst-build', SCRIPTDIR, options.worktree_dir, options.branch):
|
|
exit(1)
|
|
if not checkout_subprojects(options.worktree_dir, options.branch):
|
|
exit(1)
|