aboutsummaryrefslogtreecommitdiff
path: root/src/core/locker.nim
diff options
context:
space:
mode:
authoraethrvmn <me@aethrvmn.gr>2025-10-07 23:48:09 +0000
committeraethrvmn <me@aethrvmn.gr>2025-10-07 23:48:09 +0000
commit5ae296afa27c5623dd5731014c96f2b219ceca2b (patch)
tree4a0edb9d093d157742090515bfcc6b5e28178c2d /src/core/locker.nim
parentsetup project (diff)
added core functionality bar the parser for dependencies
Diffstat (limited to '')
-rw-r--r--src/core/locker.nim102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/core/locker.nim b/src/core/locker.nim
new file mode 100644
index 0000000..d52b55d
--- /dev/null
+++ b/src/core/locker.nim
@@ -0,0 +1,102 @@
+import std / [
+ os,
+ json,
+ hashes,
+ strformat
+]
+
+import ./manager
+
+proc lockPath*(): string =
+ let
+ homeDir: string = getHomeDir()
+ lockDir: string = homeDir / ".local" / "tesserae"
+ ensureDir(lockDir)
+ result = lockDir / "tesserae.lock"
+
+proc loadLock*(): JsonNode =
+ let lockFile: string = lockPath()
+ result = %*{}
+ if fileExists(lockFile):
+ try:
+ result = parseFile(lockFile)
+ except JsonParsingError:
+ echo "JsonParsingError. Treating the lockfile as non existant"
+ result = %*{}
+
+proc writeLock*(jsonObject: JsonNode) =
+ let lockFile: string = lockPath()
+ writeFile(lockFile, jsonObject.pretty())
+
+proc updateLock*(
+ packageName: string,
+ sourceURL: string,
+ chosenTag: string,
+ configPath: string
+) =
+ ## Updates the lockfile
+ var lock: JsonNode = loadLock()
+ let
+ config: string = readConfigFile(configPath)
+ jsonObject: JsonNode = %*{
+ "source": { "url": sourceURL },
+ "tag": chosenTag,
+ "config": config
+ # I should probably add a sha256 thingy
+ }
+ lock[packageName] = jsonObject
+ writeLock(lock)
+ echo "Updated {packageName}".fmt
+
+
+proc needRebuildLock*(
+ packageName: string,
+ sourceURL: string,
+ chosenTag: string,
+ configPath: string
+): bool =
+ ## Checks whether the following have changed:\n
+ ## - source (repo url)
+ ## - tag (new release, manually updated, etc)
+ result = false
+ let lockFile = loadLock()
+ if not lockFile.hasKey(packageName):
+ echo "{packageName} added to queue"
+ result = true
+ else:
+ let package = lockFile[packageName]
+ if not package.hasKey("source"):
+ echo "Could not find source for package {packageName}".fmt
+ echo "{packageName} added to queue"
+ result = true
+
+ if package.hasKey("source") and package["source"].hasKey("url"):
+ let packageSource: string = package["source"]["url"].getStr
+ if packageSource != sourceURL:
+ echo "Source URL for package {packageName} has changed".fmt
+ echo "{packageName} added to queue"
+ result = true
+
+ if not package.hasKey("tag"):
+ result = true
+ else:
+ if package["tag"].getStr != chosenTag:
+ echo "Release tag has changed from {package["tag"]} -> {chosenTag}".fmt
+ echo "{packageName} added to queue"
+ result = true
+ if not package.hasKey("config"):
+ echo "Configuration file not found for package {packageName}".fmt
+ echo "{packageName} added to queue"
+ result = true
+ else:
+ let config: string = readConfigFile(configPath)
+ if package["config"].getStr != config:
+ echo "Configuration file changed for package {packageName}".fmt
+ echo "{packageName} added to queue"
+ result = true
+
+
+
+
+
+
Directive (EU) 2019/790, Article 4(3); all rights regarding Text and Data Mining (TDM) are reserved.