2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-25 08:41:51 +00:00

Bugfix for git add for uploaded drawings

This commit is contained in:
Philip Sargent 2022-08-13 21:14:57 +03:00
parent f3002a694d
commit 1eadc931cb

View File

@ -603,6 +603,7 @@ def dwgupload(request, folder=None, gitdisable='no'):
if request.method == 'POST': if request.method == 'POST':
form = FilesForm(request.POST,request.FILES) form = FilesForm(request.POST,request.FILES)
if form.is_valid(): if form.is_valid():
# print(f'! - FORM dwgupload - POST valid: "{request.FILES["uploadfiles"]}" ')
f = request.FILES["uploadfiles"] f = request.FILES["uploadfiles"]
multiple = request.FILES.getlist('uploadfiles') multiple = request.FILES.getlist('uploadfiles')
fs = FileSystemStorage(os.path.join(settings.DRAWINGS_DATA, folder)) fs = FileSystemStorage(os.path.join(settings.DRAWINGS_DATA, folder))
@ -616,29 +617,49 @@ def dwgupload(request, folder=None, gitdisable='no'):
git = settings.GIT git = settings.GIT
else: else:
git = 'echo' git = 'echo'
# print(f'git DISABLED {f.name}')
if multiple: if multiple:
for f in multiple: for f in multiple:
# print(f'! - FORM dwgupload - file {f} in {multiple=}')
if dwgvalid(f.name): if dwgvalid(f.name):
try: # crashes in Django os.chmod call if on WSL without metadata drvfs, but does save file! try: # crashes in Django os.chmod call if on WSL without metadata drvfs, but does save file!
saved_filename = fs.save(f.name, content=f) saved_filename = fs.save(f.name, content=f)
except: except:
print(f'\n !! Permissions failure ?! on attempting to save file {f.name}') print(f'! - FORM dwgupload - \n!! Permissions failure ?! on attempting to save file {f.name}. Attempting to continue..')
if 'saved_filename' in locals(): if 'saved_filename' in locals():
if saved_filename.is_file(): if Path(dirpath, saved_filename).is_file():
actual_saved.append(saved_filename) actual_saved.append(saved_filename)
if gitdisable != 'yes': if gitdisable != 'yes':
dr_add = subprocess.run([git, "add", saved_filename], cwd=dirpath, capture_output=True, text=True) dr_add = subprocess.run([git, "add", saved_filename], cwd=dirpath, capture_output=True, text=True)
msgdata = dr_add.stderr + '\n' + dr_add.stdout + '\nreturn code: ' + str(dr_add.returncode)
# message = f'! - FORM dwgupload - Success: git ADD on server for this file {saved_filename}.' + msgdata
# print(message)
if dr_add.returncode != 0: if dr_add.returncode != 0:
msgdata = 'Ask a nerd to fix this.\n\n' + dr_add.stderr + '\n\n' + dr_add.stdout + '\n\nreturn code: ' + str(dr_add.returncode) msgdata = 'Ask a nerd to fix this.\n\n' + dr_add.stderr + '\n\n' + dr_add.stdout + '\n\nreturn code: ' + str(dr_add.returncode)
message = f'CANNOT git on server for this file {saved_filename}. Edits saved but not added to git.\n\n' + msgdata message = f'! - FORM dwgupload - CANNOT git ADD on server for this file {saved_filename}. Edits saved but not added to git.\n' + msgdata
print(message)
return render(request,'errors/generic.html', {'message': message}) return render(request,'errors/generic.html', {'message': message})
dwgfile, created = DrawingFile.objects.get_or_create(dwgpath=saved_filename, dwgname=Path(f.name).stem, filesize=f.size) dwgfile, created = DrawingFile.objects.get_or_create(dwgpath=saved_filename, dwgname=Path(f.name).stem, filesize=f.size)
dwgfile.save() dwgfile.save()
else:
message = f'! - FORM dwgupload - NOT A FILE {Path(dirpath, saved_filename)=}. '
print(message)
else:
message = f'! - FORM dwgupload - Save failure for {saved_filename}. Changes NOT saved.'
print(message)
return render(request,'errors/generic.html', {'message': message})
if saved_filename != f.name:
# message = f'! - FORM dwgupload - Save RENAME {f.name} renamed as {saved_filename}. This is OK.'
# print(message)
pass
else: else:
refused.append(f.name) refused.append(f.name)
print(f'REFUSED {f.name}') # print(f'REFUSED {f.name}')
if actual_saved: # maybe all were refused by the suffix test in dwgvalid()
if actual_saved:
filesaved = True filesaved = True
if len(actual_saved) > 1: if len(actual_saved) > 1:
dots = "..." dots = "..."
@ -646,15 +667,23 @@ def dwgupload(request, folder=None, gitdisable='no'):
dots = "" dots = ""
if gitdisable != 'yes': if gitdisable != 'yes':
dr_commit = subprocess.run([git, "commit", "-m", f'Drawings upload - {actual_saved[0]}{dots}'], cwd=dirpath, capture_output=True, text=True) dr_commit = subprocess.run([git, "commit", "-m", f'Drawings upload - {actual_saved[0]}{dots}'], cwd=dirpath, capture_output=True, text=True)
# message = f'! - FORM dwgupload - For uploading {actual_saved[0]}{dots}. Edits saved, added to git, and COMMITTED.\n' + msgdata
# print(message)
# This produces return code = 1 if it commits OK # This produces return code = 1 if it commits OK
if dr_commit.returncode != 0: if dr_commit.returncode != 0:
msgdata = 'Ask a nerd to fix this.\n\n' + dr_commit.stderr + '\n\n' + dr_commit.stdout + '\n\nreturn code: ' + str(dr_commit.returncode) msgdata = 'Ask a nerd to fix this.\n\n' + dr_commit.stderr + '\n' + dr_commit.stdout + '\nreturn code: ' + str(dr_commit.returncode)
message = f'Error code with git on server for this {actual_saved[0]}{dots}. Edits saved, added to git, but NOT committed.\n\n' + msgdata message = f'! - FORM dwgupload -Error code with git on server for this {actual_saved[0]}{dots}. Edits saved, added to git, but NOT committed.\n' + msgdata
print(message)
return render(request,'errors/generic.html', {'message': message}) return render(request,'errors/generic.html', {'message': message})
else:
print(f' git disabled "{git=}"')
else:# maybe all were refused by the suffix test in dwgvalid()
message = f'! - FORM dwgupload - Nothing actually saved. All were refused. {actual_saved=}'
print(message)
files = [] files = []
dirs = [] dirs = []
# print(f'! - FORM dwgupload - start {folder} \n"{dirpath}" \n"{dirpath.parent}" \n"{dirpath.exists()}"') # print(f'! - FORM dwgupload - start {folder=} \n"{dirpath=}" \n"{dirpath.parent=}" \n"{dirpath.exists()=}"')
try: try:
for f in dirpath.iterdir(): for f in dirpath.iterdir():
if f.is_dir(): if f.is_dir():