Move git helper out into mesonlib for reuse

Reuse the git helper for `meson wrap` and `meson subprojects` so we
don't need to maintain the same git-colors-on-windows workarounds in
multiple places.
This commit is contained in:
Nirbheek Chauhan 2020-01-22 21:04:30 +05:30 committed by Xavier Claessens
parent da486bfddc
commit 712b2f08c7
3 changed files with 18 additions and 22 deletions

View File

@ -56,6 +56,20 @@ else:
python_command = [sys.executable]
meson_command = None
GIT = shutil.which('git')
def git(cmd: T.List[str], workingdir: str, **kwargs) -> subprocess.CompletedProcess:
pc = subprocess.run([GIT, '-C', workingdir] + cmd,
# Redirect stdin to DEVNULL otherwise git messes up the
# console and ANSI colors stop working on Windows.
stdin=subprocess.DEVNULL, **kwargs)
# Sometimes git calls git recursively, such as `git submodule update
# --recursive` which will be without the above workaround, so set the
# console mode again just in case.
if platform.system().lower() == 'windows':
mlog._windows_ansi()
return pc
def set_meson_command(mainfile):
global python_command
global meson_command

View File

@ -2,7 +2,7 @@ import os, subprocess
import argparse
from . import mlog
from .mesonlib import Popen_safe
from .mesonlib import git, Popen_safe
from .wrap.wrap import API_ROOT, PackageDefinition, Resolver, WrapException
from .wrap import wraptool
@ -40,12 +40,8 @@ def update_file(wrap, repo_dir, options):
' In that case, delete', mlog.bold(repo_dir), 'and run', mlog.bold('meson --reconfigure'))
def git_output(cmd, workingdir):
return subprocess.check_output(['git', '-C', workingdir] + cmd,
# Redirect stdin to DEVNULL otherwise git
# messes up the console and ANSI colors stop
# working on Windows.
stdin=subprocess.DEVNULL,
stderr=subprocess.STDOUT).decode()
return git(cmd, workingdir, check=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout
def git_show(repo_dir):
commit_message = git_output(['show', '--quiet', '--pretty=format:%h%n%d%n%s%n[%an]'], repo_dir)

View File

@ -18,7 +18,6 @@ import urllib.request
import urllib.error
import urllib.parse
import os
import platform
import hashlib
import shutil
import tempfile
@ -29,7 +28,7 @@ import configparser
import typing as T
from . import WrapMode
from ..mesonlib import ProgressBar, MesonException
from ..mesonlib import git, GIT, ProgressBar, MesonException
if T.TYPE_CHECKING:
import http.client
@ -44,23 +43,10 @@ except ImportError:
has_ssl = False
API_ROOT = 'http://wrapdb.mesonbuild.com/v1/'
GIT = shutil.which('git')
REQ_TIMEOUT = 600.0
SSL_WARNING_PRINTED = False
WHITELIST_SUBDOMAIN = 'wrapdb.mesonbuild.com'
def git(cmd: T.List[str], workingdir: str, **kwargs) -> subprocess.CompletedProcess:
pc = subprocess.run([GIT, '-C', workingdir] + cmd,
# Redirect stdin to DEVNULL otherwise git messes up the
# console and ANSI colors stop working on Windows.
stdin=subprocess.DEVNULL, **kwargs)
# Sometimes git calls git recursively, such as `git submodule update
# --recursive` which will be without the above workaround, so set the
# console mode again just in case.
if platform.system().lower() == 'windows':
mlog._windows_ansi()
return pc
def quiet_git(cmd: T.List[str], workingdir: str) -> T.Tuple[bool, str]:
if not GIT:
return False, 'Git program not found.'