Also do the setup necessary on Windows to enable ANSI colours on the console (if available). That code is copied from Meson and is Apache2 licensed.
89 lines
3.0 KiB
Python
Executable File
89 lines
3.0 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 common import git
|
|
from common import Colors
|
|
from common import get_meson
|
|
from 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)
|