git-pusher/main.py

63 lines
1.9 KiB
Python
Raw Normal View History

2024-10-08 00:18:36 +03:00
import argparse
2024-10-09 23:39:22 +03:00
import subprocess
2024-10-08 00:18:36 +03:00
from app.logger import logger as l
import datetime as dt
import subprocess as proc
from scheduler import Scheduler
import time
2024-10-09 23:39:22 +03:00
from time import localtime, strftime
2024-10-08 00:18:36 +03:00
delta = dt.timedelta(hours=3)
tz_msk = dt.timezone(offset=delta, name="MSK")
logger = l.getChild(__name__)
logger.warning("Starting")
parser = argparse.ArgumentParser(__name__)
2024-10-09 23:39:22 +03:00
parser.add_argument("-w", "--watch", help="Directory to watch")
2024-10-08 00:18:36 +03:00
args = parser.parse_args()
2024-10-09 23:39:22 +03:00
directory = args.watch
2024-10-08 00:18:36 +03:00
logger.info(f"Directory to watch: {directory}")
def c(command: str) -> list[str]:
return command.split(" ")
def _watcher() -> None:
2024-10-09 23:39:22 +03:00
logger.info("Starting to watch")
g_status = proc.check_output(c("git status -s"), cwd=directory)
output = ''
if len(g_status) > 0:
logger.info("Changes found")
output += "\n{}".format(proc.run(c("git add ."), cwd=directory, stderr=subprocess.STDOUT))
now = strftime("%Y-%m-%dT%H:%M:%S", localtime())
output += "\n{}".format(proc.run(c(f"git commit -m '{now}'"), cwd=directory, stderr=subprocess.STDOUT))
output += "\n{}".format(proc.run(c("git fetch"), cwd=directory))
try:
out = proc.run(c("git rebase"), cwd=directory, stderr=subprocess.STDOUT)
output += "\n{}".format(out)
except subprocess.SubprocessError as ex:
output += "\n{}".format(ex.output)
if ex.output.find('--skip') > 0:
proc.run(c("git rebase --skip"), stderr=subprocess.STDOUT)
else:
logger.error("Unexpected output")
output += "\n{}".format(proc.run(c("git push"), cwd=directory))
else:
output += "\n{}".format(proc.run(c("git pull"), cwd=directory, stderr=subprocess.STDOUT))
logger.info(output)
logger.info("Done")
schedule = Scheduler()
schedule.cyclic(dt.timedelta(seconds=10), _watcher)
print(schedule)
while True:
schedule.exec_jobs()
time.sleep(1)