git commit when editing survex files online

This commit is contained in:
Philip Sargent 2022-07-18 18:42:21 +03:00
parent 5b7c105c5f
commit 4efeefe6c9
3 changed files with 42 additions and 9 deletions

View File

@ -31,6 +31,8 @@ troggle.utils.TROG
chaosmonkey(n) - used by survex import to regenerate some .3d files chaosmonkey(n) - used by survex import to regenerate some .3d files
save_carefully() - core function that saves troggle objects in the database save_carefully() - core function that saves troggle objects in the database
various git add/commit functions that need refactoring together
''' '''
TROG = { TROG = {
@ -57,14 +59,16 @@ def get_process_memory():
return usage[2]/1024.0 return usage[2]/1024.0
def chaosmonkey(n): def chaosmonkey(n):
# returns True once every n calls - randomly '''returns True once every n calls - randomly'''
if random.randrange(0,n) != 0: if random.randrange(0,n) != 0:
return False return False
# print("CHAOS strikes !", file=sys.stderr) # print("CHAOS strikes !", file=sys.stderr)
return True return True
# handles url or file, so we can refer to a set of scans (not drawings) on another server #
def GetListDir(sdir): def GetListDir(sdir):
'''handles url or file, so we can refer to a set of scans (not drawings) on another server
'''
res = [ ] res = [ ]
if type(sdir) is str and sdir[:7] == "http://": if type(sdir) is str and sdir[:7] == "http://":
# s = urllib.request.urlopen(sdir) # s = urllib.request.urlopen(sdir)
@ -79,8 +83,37 @@ def GetListDir(sdir):
res.append((f, ff, os.path.isdir(ff))) res.append((f, ff, os.path.isdir(ff)))
return res return res
def only_commit(fname, message):
'''Only used to commit a survex file edited and saved in view/survex.py
'''
git = settings.GIT
cwd = fname.parent
filename = fname.name
#print(f'{fname=} ')
try:
cp_add = subprocess.run([git, "add", filename], cwd=cwd, capture_output=True, text=True)
if cp_add.returncode != 0:
msgdata = f'Ask a nerd to fix this problem in only_commit().\n\n{cp_add.stderr}\n\n{cp_add.stdout}\n\nreturn code:{str(cp_add.returncode)}'
raise WriteAndCommitError(f'CANNOT git on server for this file {filename}. Edits saved but not added to git.\n\n' + msgdata)
cp_commit = subprocess.run([git, "commit", "-m", message], cwd=cwd, capture_output=True, text=True)
# This produces return code = 1 if it commits OK, but when the repo still needs to be pushed to origin/expoweb
if cp_commit.returncode != 0 and cp_commit.stdout != 'nothing to commit, working tree clean':
msgdata = f'Ask a nerd to fix this problem in only_commit().\n\n{cp_add.stderr}\n\n{cp_add.stdout}\n\nreturn code:{str(cp_add.returncode)}'
print(msgdata)
raise WriteAndCommitError(f'Error code with git on server for this file {filename}. Edits saved, added to git, but NOT committed.\n\n' + msgdata)
except subprocess.SubprocessError:
raise WriteAndCommitError(f'CANNOT git on server for this file {filename}. Subprocess error. Edits not saved.\nAsk a nerd to fix this.')
def write_and_commit(files, message): def write_and_commit(files, message):
"""Writes the content to the filepath and adds and commits the file to git. If this fails, a WriteAndCommitError is raised.""" """Writes the content to the filepath and adds and commits the file to git. If this fails, a WriteAndCommitError is raised.
This does not create any needed intermediate folders, which is what we do when writing survex files, so functionality here
is duplicated in only_commit()
These need refactoring
"""
git = settings.GIT git = settings.GIT
try: try:
for filepath, content, encoding in files: for filepath, content, encoding in files:

View File

@ -16,13 +16,11 @@ from django.contrib import admin
import django.forms as forms import django.forms as forms
from .auth import login_required_if_public
from troggle.core.models.caves import Cave
import troggle.core.views.caves import troggle.core.views.caves
import troggle.settings as settings import troggle.settings as settings
from .auth import login_required_if_public
from troggle.core.models.caves import Cave
from troggle.core.utils import write_and_commit, WriteAndCommitError from troggle.core.utils import write_and_commit, WriteAndCommitError
from troggle.core.views.editor_helpers import HTMLarea from troggle.core.views.editor_helpers import HTMLarea

View File

@ -18,6 +18,7 @@ from troggle.core.models.troggle import Expedition, Person, PersonExpedition
from troggle.core.models.survex import SurvexBlock, SurvexPersonRole, SurvexFile, SurvexDirectory from troggle.core.models.survex import SurvexBlock, SurvexPersonRole, SurvexFile, SurvexDirectory
from troggle.core.models.caves import Cave, PersonTrip, LogbookEntry from troggle.core.models.caves import Cave, PersonTrip, LogbookEntry
from troggle.parsers.people import GetPersonExpeditionNameLookup from troggle.parsers.people import GetPersonExpeditionNameLookup
from troggle.core.utils import only_commit, WriteAndCommitError
'''Everything that views survexfiles '''Everything that views survexfiles
but also displays data on a cave or caves when there is ambiguity but also displays data on a cave or caves when there is ambiguity
@ -124,6 +125,7 @@ class SvxForm(forms.Form):
svxtext = fin.read() svxtext = fin.read()
fin.close() fin.close()
except: except:
# hack. Replace this with something better.
fin = open(fname, "r",encoding='iso-8859-1',newline='') fin = open(fname, "r",encoding='iso-8859-1',newline='')
svxtext = fin.read() svxtext = fin.read()
fin.close() fin.close()
@ -163,9 +165,9 @@ class SvxForm(forms.Form):
res = fout.write("\n") res = fout.write("\n")
fout.close() fout.close()
# INSERT code to do git add and commit here, to loser repo. When Wookey chnages :loser: to use git. only_commit(fname, f"Online survex edit: {self.data['filename']}.svx")
return "SAVED" return "SAVED and committed to git"
def Process(self): def Process(self):
print(">>>>....\n....Processing\n") print(">>>>....\n....Processing\n")