95 lines
2.5 KiB
Python
95 lines
2.5 KiB
Python
# Copyright (c) 2019-2022 Artem Bulgakov
|
|
#
|
|
# This file is distributed under the terms of the same license,
|
|
# as the Kivy framework.
|
|
|
|
import subprocess
|
|
|
|
|
|
def command(cmd: list, capture_output: bool = False) -> str:
|
|
"""Run system command."""
|
|
|
|
print(f"Command: {subprocess.list2cmdline(cmd)}")
|
|
if capture_output:
|
|
out = subprocess.check_output(cmd)
|
|
out = out.decode("utf-8")
|
|
print(out.strip())
|
|
return out
|
|
else:
|
|
subprocess.check_call(cmd)
|
|
return ""
|
|
|
|
|
|
def get_previous_version() -> str:
|
|
"""Returns latest tag in git."""
|
|
|
|
command(["git", "checkout", "master"])
|
|
old_version = command(
|
|
["git", "describe", "--abbrev=0", "--tags"], capture_output=True
|
|
)
|
|
old_version = old_version[:-1] # Remove \n
|
|
return old_version
|
|
|
|
|
|
def git_clean(ask: bool = True):
|
|
"""Clean git repository from untracked and changed files."""
|
|
|
|
# Check what files will be removed
|
|
files_to_clean = command(
|
|
["git", "clean", "-dx", "--force", "--dry-run"], capture_output=True
|
|
).strip()
|
|
# Ask before removing
|
|
if ask and files_to_clean:
|
|
while True:
|
|
ans = input("Do you want to remove these files? (yes/no)").lower()
|
|
if ans == "y" or ans == "yes":
|
|
break
|
|
elif ans == "n" or ans == "no":
|
|
print("git clean is required. Exit")
|
|
exit(0)
|
|
|
|
# Remove all untracked files
|
|
command(["git", "clean", "-dx", "--force"])
|
|
command(["git", "reset", "--hard"])
|
|
|
|
|
|
def git_commit(message: str, allow_error: bool = False, add_files: list = None):
|
|
"""Make commit."""
|
|
|
|
add_files = add_files if add_files else ["-A"]
|
|
command(["git", "add", *add_files])
|
|
try:
|
|
command(["git", "commit", "--all", "-m", message])
|
|
except subprocess.CalledProcessError as e:
|
|
if not allow_error:
|
|
raise e
|
|
|
|
|
|
def git_tag(name: str):
|
|
"""Create tag."""
|
|
|
|
command(["git", "tag", name])
|
|
|
|
|
|
def git_push(branches_to_push: list, ask: bool = True, push: bool = False):
|
|
"""Push all changes."""
|
|
|
|
if ask:
|
|
push = input("Do you want to push changes? (y)") in (
|
|
"",
|
|
"y",
|
|
"yes",
|
|
)
|
|
|
|
cmd = ["git", "push", "--tags", "origin", "master", *branches_to_push]
|
|
if push:
|
|
command(cmd)
|
|
else:
|
|
print(
|
|
f"Changes are not pushed. Command for manual pushing: {subprocess.list2cmdline(cmd)}"
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
git_clean(ask=True)
|