diff options
-rw-r--r-- | core/utils.py | 35 | ||||
-rw-r--r-- | core/views/wallets_edit.py | 70 | ||||
-rw-r--r-- | parsers/scans.py | 4 |
3 files changed, 34 insertions, 75 deletions
diff --git a/core/utils.py b/core/utils.py index 8647d44..154c468 100644 --- a/core/utils.py +++ b/core/utils.py @@ -210,7 +210,7 @@ def get_cookie(request): return editor def git_string(author_string): - """Rewrites the supplied editor string intoa git-complient author string + """Rewrites the supplied editor string into a git-complient author string Uses a regular expression for a git-compatible author string written mostly by Copilot valid example "John Doe <john.doe@example.com>" """ @@ -259,7 +259,7 @@ def git_add(filename, cwd, commands=[]): def git_commit(cwd, message, editor, commands=[]): - """Commits whatever has been Staged by git in this directory + """Commits whatever has been Staged by git in this directory 'cwd' """ git = settings.GIT print(f"git commit in {cwd}") @@ -277,25 +277,23 @@ def git_commit(cwd, message, editor, commands=[]): # which will be the case when running a test troggle system on a development machine # Several ways of testing if the commit failed - #This produces return code = 1 if it commits OK, but when the repo still needs to be pushed to origin/expoweb - # if (not cp_commit.stdout) or len(cp_commit.stdout) < 2 or cp_commit.stdout.split("\n")[-2] != "nothing to commit, working tree clean": + # if cp_commit.stdout.split("\n")[-2] != "nothing to commit, working tree clean": + # if cp_commit.returncode == 1 and cp_commit.stdout == DEV_OK: # only good for 1 commit ahead of origin/repo - if cp_commit.returncode == 1 and cp_commit.stdout == DEV_OK: # only good for 1 commit ahead of origin/repo - pass - else: - if cp_commit.returncode != 0 and not cp_commit.stdout.strip().endswith( - "nothing to commit, working tree clean" - ): - msgdata = f'--Ask a nerd to fix this problem in add_commit().\n--{cp_commit.stderr}\n--"{cp_commit.stdout}"\n--return code:{str(cp_commit.returncode)}' - print(msgdata) - raise WriteAndCommitError( - f"Error code with git on server in this directory: {cwd}. Edits saved, added to git, but NOT committed.\n\n" - + msgdata - ) + if cp_commit.returncode != 0 and not cp_commit.stdout.strip().endswith( + "nothing to commit, working tree clean" + ): + msgdata = f'--Ask a nerd to fix this problem in git_commit().\n--{cp_commit.stderr}\n--"{cp_commit.stdout}"\n--return code:{str(cp_commit.returncode)}' + print(msgdata) + raise WriteAndCommitError( + f"Error code with git on server in this directory: {cwd}. Edits saved, added to git, but NOT committed.\n\n" + + msgdata + ) return commands -def add_commit(fname, message, editor=None): - """Only used to commit a survex file edited and saved in view/survex.py""" +def add_commit(fname, message, editor): + """Used to commit a survex file edited and saved in view/survex.py + and also contents.json for an edited wallet""" cwd = fname.parent filename = fname.name commands = [] @@ -307,6 +305,7 @@ def add_commit(fname, message, editor=None): editor = "Anathema Device <a.device@potatohut.expo>" try: + # print(f"add_commit: {editor=} {filename=} {cwd=}") commands = git_add(filename, cwd, commands) commands = git_commit(cwd, message, editor, commands) diff --git a/core/views/wallets_edit.py b/core/views/wallets_edit.py index dfb67d3..2c8ffe3 100644 --- a/core/views/wallets_edit.py +++ b/core/views/wallets_edit.py @@ -19,12 +19,13 @@ from troggle.core.models.logbooks import LogbookEntry # , PersonLogEntry from troggle.core.models.survex import SurvexBlock, SurvexFile, SurvexPersonRole from troggle.core.models.troggle import DataIssue, Expedition from troggle.core.models.wallets import YEAR_RANGE, Wallet, make_valid_date -from troggle.core.utils import COOKIE_MAX_AGE, WriteAndCommitError, current_expo, get_cookie, git_string, sanitize_name, write_and_commit +from troggle.core.utils import COOKIE_MAX_AGE, WriteAndCommitError, add_commit, current_expo, get_cookie, git_add, \ + git_commit, git_string, sanitize_name, write_and_commit from troggle.core.views.auth import login_required_if_public from troggle.core.views.caves import get_cave_leniently, getCave from troggle.core.views.scans import caveifywallet, oldwallet from troggle.core.views.uploads import FilesForm -from troggle.parsers.scans import contentsjson +from troggle.parsers.scans import CONTENTSJSON """Main wallet editing form, which includes scan file upload into the wallet """ @@ -504,60 +505,19 @@ def walletedit(request, path=None): return w def commit_json(waldata): - # CHANGE THIS to use git_commit() from troggle.utils - destfolder = contents_path.parent - dr_add = subprocess.run([git, "add", contentsjson], cwd=destfolder, capture_output=True, text=True) - if dr_add.returncode != 0: - msgdata = ( - "Ask a nerd to fix this.\n--" - + dr_add.stderr - + "\n--" - + dr_add.stdout - + "\n--return code: " - + str(dr_add.returncode) - ) - message = ( - f"CANNOT git on server for this file {contentsjson}. Edits saved but not added to git.\n\n" + msgdata - ) - print(message) - return render(request, "errors/generic.html", {"message": message}) + print(f"commit_json \n..{editor=} \n..{contents_path=}") + + if "cave" in waldata: + label = str(waldata["cave"]).replace("[","").replace("]","") else: - - if socket.gethostname() != "expo": - comment = f"on dev machine '{socket.gethostname()}' " - else: - comment = "" - if "cave" in waldata: - label = waldata["cave"] + if "name" in waldata: + label = waldata["name"] else: - if "name" in waldata: - label = waldata["name"] - else: - label = "" - - dr_commit = subprocess.run( - [git, "commit", "-m", f"JSON update wallet {wallet} {label} {comment}"], - cwd=destfolder, - capture_output=True, - text=True, - ) - # This produces return code = 1 if it commits OK - if dr_commit.returncode != 0: - msgdata = ( - "Ask a nerd to fix this.\n\nstderr: " - + dr_commit.stderr - + "\n\nstdout: " - + dr_commit.stdout - + "\n\nreturn code: " - + str(dr_commit.returncode) - ) - message = ( - f"Error code with git on server for this {contentsjson}. File is added to git, but NOT committed.\n" - + msgdata - ) - print(message) - return render(request, "errors/generic.html", {"message": message}) - + label = "" + + message = f"JSON update wallet {wallet} {label}" + add_commit(contents_path, message, editor) + def get_logbook_trips(): return None @@ -706,7 +666,7 @@ def walletedit(request, path=None): wurl = f"/walletedit/{wallet}".replace("#", ":") wallet = wallet.replace(":", "#") dirpath = Path(settings.SCANS_ROOT, year, wallet) - contents_path = Path(settings.DRAWINGS_DATA, "walletjson") / year / wallet / contentsjson + contents_path = Path(settings.DRAWINGS_DATA, "walletjson") / year / wallet / CONTENTSJSON fresh_wallet = False diff --git a/parsers/scans.py b/parsers/scans.py index ed383dc..a2deac1 100644 --- a/parsers/scans.py +++ b/parsers/scans.py @@ -12,7 +12,7 @@ todo - update the survexblock scanswallet field to refer to the wallet, if it is But we can't do that, we only have the survexfile, not the blcok. But we could set it for ALL the blocks? Hmm. """ -contentsjson = "contents.json" +CONTENTSJSON = "contents.json" git = settings.GIT @@ -160,7 +160,7 @@ def load_all_scans(): for yeardir in contents_path.iterdir(): if yeardir.is_dir(): for walletpath in yeardir.iterdir(): - if Path(walletpath, contentsjson).is_file(): + if Path(walletpath, CONTENTSJSON).is_file(): walletname = walletpath.name if walletname not in wallets: |