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