thinkserver/thinks/jujutsu.py

48 lines
1.2 KiB
Python

import functools
import subprocess
from django.conf import settings
def ensure_jj(fn):
@functools.wraps(fn)
def ofn(self,*args,**kwargs):
self.init_jj()
return fn(self,*args,**kwargs)
return ofn
class JJController:
def __init__(self, think):
self.think = think
self.root = think.root
def run(self, cmd, **kwargs):
print("Run command",cmd)
res = subprocess.run(
cmd,
cwd=self.root,
encoding='utf8',
capture_output=True,
**kwargs
)
return res
def init_jj(self):
print("Init jj")
if not (self.root / '.jj').exists():
self.run(['jj','git','init'])
self.ignore_paths(['.make.*'])
git_url = settings.GIT_REPO_URL_TEMPLATE.format(name=self.think.slug)
self.run(['jj','git','remote','add','origin', git_url])
@ensure_jj
def status(self):
res = self.run(['jj','st'])
return res.stdout
@ensure_jj
def commit(self, message):
res = self.run(['jj','describe','--stdin','--no-edit'], input=message)
if res.returncode == 0:
self.run(['jj','new'])
return res