diff options
author | Eric Callahan <arksine.code@gmail.com> | 2023-04-30 07:31:45 -0400 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2023-05-04 14:07:14 -0400 |
commit | b89a049fdb2455678df08cca9b66b78a71143394 (patch) | |
tree | beec49a418af49e7f5dd3c53d150231d5858ca42 /klippy/util.py | |
parent | 3bd0be40d502f43bb9f941a60bf778b902ed4e6e (diff) | |
download | kutter-b89a049fdb2455678df08cca9b66b78a71143394.tar.gz kutter-b89a049fdb2455678df08cca9b66b78a71143394.tar.xz kutter-b89a049fdb2455678df08cca9b66b78a71143394.zip |
klippy: report repo branch, remote, and tracking url
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Diffstat (limited to 'klippy/util.py')
-rw-r--r-- | klippy/util.py | 56 |
1 files changed, 53 insertions, 3 deletions
diff --git a/klippy/util.py b/klippy/util.py index ffea918c..8e18a843 100644 --- a/klippy/util.py +++ b/klippy/util.py @@ -133,6 +133,55 @@ def get_version_from_file(klippy_src): pass return "?" +def _get_repo_info(gitdir): + repo_info = {"branch": "?", "remote": "?", "url": "?"} + prog_branch = ('git', '-C', gitdir, 'branch', '--no-color') + try: + process = subprocess.Popen(prog_branch, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + branch_list, err = process.communicate() + retcode = process.wait() + if retcode != 0: + logging.debug("Error running git branch: %s", err) + return repo_info + lines = str(branch_list.strip().decode()).split("\n") + for line in lines: + if line[0] == "*": + repo_info["branch"] = line[1:].strip() + break + else: + logging.debug("Unable to find current branch:\n%s", branch_list) + return repo_info + if repo_info["branch"].startswith("(HEAD detached"): + parts = repo_info["branch"].strip("()").split()[-1].split("/", 1) + if len(parts) != 2: + return repo_info + repo_info["remote"] = parts[0] + else: + key = "branch.%s.remote" % (repo_info["branch"],) + prog_config = ('git', '-C', gitdir, 'config', '--get', key) + process = subprocess.Popen(prog_config, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + remote_info, err = process.communicate() + retcode = process.wait() + if retcode != 0: + logging.debug("Error running git config: %s", err) + return repo_info + repo_info["remote"] = str(remote_info.strip().decode()) + prog_remote_url = ( + 'git', '-C', gitdir, 'remote', 'get-url', repo_info["remote"]) + process = subprocess.Popen(prog_remote_url, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + remote_url, err = process.communicate() + retcode = process.wait() + if retcode != 0: + logging.debug("Error running git remote get-url: %s", err) + return repo_info + repo_info["url"] = str(remote_url.strip().decode()) + except: + logging.debug("Error fetching repo info: %s", traceback.format_exc()) + return repo_info + def get_git_version(from_file=True): klippy_src = os.path.dirname(__file__) @@ -154,7 +203,8 @@ def get_git_version(from_file=True): for l in str(stat.strip().decode()).split('\n')] retcode = process.wait() if retcode == 0: - return (str(ver.strip().decode()), status) + repo_info = _get_repo_info(gitdir) + return (str(ver.strip().decode()), status, repo_info) else: logging.debug("Error getting git status: %s", err) else: @@ -163,5 +213,5 @@ def get_git_version(from_file=True): logging.debug("Exception on run: %s", traceback.format_exc()) if from_file: - return (get_version_from_file(klippy_src), []) - return ("?", []) + return (get_version_from_file(klippy_src), [], {}) + return ("?", [], {}) |