summaryrefslogtreecommitdiff
path: root/sw/ideScripts/updateWorkspaceFile.py
diff options
context:
space:
mode:
authorStijn Kuipers <stijnkuipers@gmail.com>2023-06-29 16:26:07 +0200
committerStijn Kuipers <stijnkuipers@gmail.com>2023-06-29 16:26:07 +0200
commitfb5a321dd7c2848128b04b306f3e1e59c87a3f70 (patch)
treea8ef6273f9f331ebb1971a9baf20a8c897955612 /sw/ideScripts/updateWorkspaceFile.py
parentbae7568fd4dd0676b370be8548c7ec95d6521ba1 (diff)
downloadplinky-fb5a321dd7c2848128b04b306f3e1e59c87a3f70.tar.gz
Initial Filedump
Tadaaa!!
Diffstat (limited to 'sw/ideScripts/updateWorkspaceFile.py')
-rwxr-xr-xsw/ideScripts/updateWorkspaceFile.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/sw/ideScripts/updateWorkspaceFile.py b/sw/ideScripts/updateWorkspaceFile.py
new file mode 100755
index 0000000..80a96f2
--- /dev/null
+++ b/sw/ideScripts/updateWorkspaceFile.py
@@ -0,0 +1,105 @@
+'''
+Update existing VS Code workspace file with debug paths in "settings":
+ - "cortex-debug.armToolchainPath"
+ - "cortex-debug.openocdPath"
+'''
+import os
+import json
+
+import utilities as utils
+import updatePaths as pth
+import updateBuildData as build
+
+__version__ = utils.__version__
+
+
+class UpdateWorkspaceFile():
+ def __init__(self):
+ self.bStr = build.BuildDataStrings()
+
+ def checkWorkspaceFile(self):
+ '''
+ Check if workspace '*.code-workspace' file exists. If it does, check if it is a valid JSON file.
+ If it doesn't exist report error and quit.
+ '''
+ workspaceFiles = utils.getCodeWorkspaces()
+ if len(workspaceFiles) == 1:
+ _, fileName = os.path.split(workspaceFiles[0])
+ workspaceFileName, _ = os.path.splitext(fileName)
+ if utils.pathExists(utils.workspaceFilePath):
+ # file exists, check if it loads OK
+ try:
+ with open(utils.workspaceFilePath, 'r') as workspaceFile:
+ workspaceFileData = json.load(workspaceFile)
+
+ print("Existing " + fileName + " file found.")
+
+ except Exception as err:
+ errorMsg = "Invalid " + fileName + " file.\n"
+ errorMsg += "Possible cause: invalid json format or comments (not supported by this scripts). Error:\n"
+ errorMsg += str(err)
+ print(errorMsg)
+
+ # else: verified in 'utils.verifyFolderStructure()'
+
+ def getWorkspaceFileData(self):
+ '''
+ Get data from current '*.code-workspace' file.
+ File existance is previoulsy checked in 'checkWorkspaceFile()'.
+ '''
+ with open(utils.workspaceFilePath, 'r') as workspaceFile:
+ data = json.load(workspaceFile)
+
+ return data
+
+ def addBuildDataToWorkspaceFile(self, workspaceData, buildData):
+ '''
+ This function ads "cortex-debug.*" items to workspace file, if they don't exist yet.
+ Returns new data.
+ '''
+ armToolchainPath = os.path.dirname(buildData[self.bStr.gccExePath])
+ armToolchainPath = utils.pathWithForwardSlashes(armToolchainPath)
+
+ if 'settings' not in workspaceData:
+ workspaceData["settings"] = {}
+
+ workspaceData["settings"]["cortex-debug.armToolchainPath"] = armToolchainPath
+ workspaceData["settings"]["cortex-debug.openocdPath"] = buildData[self.bStr.openOcdPath]
+
+ return workspaceData
+
+ def overwriteWorkspaceFile(self, data):
+ '''
+ Overwrite existing '*.code-workspace' file with new data.
+ '''
+ try:
+ with open(utils.workspaceFilePath, 'r+') as workspaceFile:
+ workspaceFile.seek(0)
+ workspaceFile.truncate()
+ dataToWrite = json.dumps(data, indent=4, sort_keys=False)
+ workspaceFile.write(dataToWrite)
+
+ print("'*.code-workspace' file updated!")
+
+ except Exception as err:
+ errorMsg = "Exception error overwriting '*.code-workspace' file:\n"
+ errorMsg += str(err)
+ utils.printAndQuit(errorMsg)
+
+
+########################################################################################################################
+if __name__ == "__main__":
+ utils.verifyFolderStructure()
+
+ paths = pth.UpdatePaths()
+ bData = build.BuildData()
+ wksFile = UpdateWorkspaceFile()
+
+ # build data (update tools paths if neccessary)
+ buildData = bData.prepareBuildData()
+
+ wksFile.checkWorkspaceFile()
+ wksData = wksFile.getWorkspaceFileData()
+ wksData = wksFile.addBuildDataToWorkspaceFile(wksData, buildData)
+
+ wksFile.overwriteWorkspaceFile(wksData)