brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 89ab5c2 Raw
62 lines · python
1# DExTer : Debugging Experience Tester2# ~~~~~~   ~         ~~         ~   ~~3#4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5# See https://llvm.org/LICENSE.txt for license information.6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7"""DExTer version output."""8 9import os10from subprocess import CalledProcessError, check_output, STDOUT11import sys12from urllib.parse import urlparse, urlunparse13 14from dex import __version__15 16 17def sanitize_repo_url(repo):18    parsed = urlparse(repo)19    # No username present, repo URL is fine.20    if parsed.username is None:21        return repo22    # Otherwise, strip the login details from the URL by reconstructing the netloc from just `<hostname>(:<port>)?`.23    sanitized_netloc = parsed.hostname24    if parsed.port:25        sanitized_netloc = f"{sanitized_netloc}:{parsed.port}"26    return urlunparse(parsed._replace(netloc=sanitized_netloc))27 28 29def _git_version():30    dir_ = os.path.dirname(__file__)31    try:32        branch = (33            check_output(34                ["git", "rev-parse", "--abbrev-ref", "HEAD"], stderr=STDOUT, cwd=dir_35            )36            .rstrip()37            .decode("utf-8")38        )39        hash_ = (40            check_output(["git", "rev-parse", "HEAD"], stderr=STDOUT, cwd=dir_)41            .rstrip()42            .decode("utf-8")43        )44        repo = sanitize_repo_url(45            check_output(46                ["git", "remote", "get-url", "origin"], stderr=STDOUT, cwd=dir_47            )48            .rstrip()49            .decode("utf-8")50        )51        return "[{} {}] ({})".format(branch, hash_, repo)52    except (OSError, CalledProcessError):53        pass54    return None55 56 57def version(name):58    lines = []59    lines.append(" ".join([s for s in [name, __version__, _git_version()] if s]))60    lines.append("  using Python {}".format(sys.version))61    return "\n".join(lines)62