From ab8813e38956c0ef4d09f73daf17868229495dca Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Thu, 30 Dec 2021 23:27:42 +0000 Subject: [PATCH] capture git subprocess errors --- core/views/expo.py | 21 ++++++++++++++------- templates/errors/generic.html | 2 ++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/core/views/expo.py b/core/views/expo.py index 8b3e27e..2adf75b 100644 --- a/core/views/expo.py +++ b/core/views/expo.py @@ -310,26 +310,33 @@ def editexpopage(request, path): cwd = filepath.parent filename = filepath.name git = settings.GIT + # see also core/models/cave.py writetrogglefile() try: with open(filepath, "w") as f: print(f'WRITING{cwd}---{filename} ') # as the wsgi process www-data, we have group write-access but are not owner, so cannot chmod. # os.chmod(filepath, 0o664) # set file permissions to rw-rw-r-- - # see also core/models/cave.py writetrogglefile() f.write(result) - # should replace .call with .run and capture_output=True except PermissionError: message = f'CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {filename}. Ask a nerd to fix this.' return render(request,'errors/generic.html', {'message': message}) try: - cp1 = subprocess.run([git, "add", filename], cwd=cwd, capture_output=True) - cp2 = subprocess.run([git, "commit", "-m", 'Edit this page'], cwd=cwd, capture_output=True) - message = f'Test output this file {filename}. git command output.\n' + str(cp1) + '\n\n' + str(cp2) - return render(request,'errors/debug.html', {'message': message}) + cp_add = subprocess.run([git, "add", filename], cwd=cwd, capture_output=True, text=True) + if cp_add.returncode != 0: + msgdata = 'Ask a nerd to fix this.\n\n' + cp_add.stderr + '\n\n' + cp_add.stdout + '\n\nreturn code: ' + str(cp_add.returncode) + message = f'CANNOT git on server for this file {filename}. Edits saved but not added to git.\n\n' + msgdata + return render(request,'errors/generic.html', {'message': message}) + + cp_commit = subprocess.run([git, "commit", "-m", 'Edit this page'], cwd=cwd, capture_output=True, text=True) + # This produces return code = 1 if it commits OK, but if 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 = 'Ask a nerd to fix this.\n\n' + cp_commit.stderr + '\n\n' + cp_commit.stdout + '\n\nreturn code: ' + str(cp_commit.returncode) + message = f'Eror code with git on server for this file {filename}. Edits saved, added to git but NOT committed.\n\n' + msgdata + return render(request,'errors/generic.html', {'message': message}) except subprocess.SubprocessError: - message = f'CANNOT git on server for this file {filename}. Edits not saved.\nAsk a nerd to fix this.' + message = f'CANNOT git on server for this file {filename}. Subprocess error. Edits not saved.\nAsk a nerd to fix this.' return render(request,'errors/generic.html', {'message': message}) return HttpResponseRedirect(reverse('expopage', args=[path])) # Redirect after POST diff --git a/templates/errors/generic.html b/templates/errors/generic.html index 0f2e876..9f345c0 100644 --- a/templates/errors/generic.html +++ b/templates/errors/generic.html @@ -16,7 +16,9 @@ {% if message %} +
             {{message}}
+        
{% else %}

We are terribly sorry but an unknown fault has occurred.