Skip to content

Commit

Permalink
add ability to clean & purge cache from pax
Browse files Browse the repository at this point in the history
  • Loading branch information
froehlichA committed Apr 18, 2022
1 parent 4db99ed commit 1ffd5df
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 11 deletions.
20 changes: 20 additions & 0 deletions src/api/cfcache.nim
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,26 @@ proc getAddonFile*(fileId: int): Option[JsonNode] =
return some(file.parseJson)
return none[JsonNode]()

proc clean*(): int =
## remove old files from the cache.
## returns the number of files cleared.
result = 0
for filename in walkFiles(cacheDir / "addon:*"):
let info = getFileInfo(filename)
if info.lastWriteTime + addonCacheTime < getTime():
removeFile(filename)
inc(result)
for filename in walkFiles(cacheDir / "file:*"):
let info = getFileInfo(filename)
if info.lastWriteTime + addonFileCacheTime < getTime():
removeFile(filename)
inc(result)

proc purge*(): void =
## remove all files from the cache.
removeDir(cacheDir)
createDir(cacheDir)

template withCachedAddon*(c: untyped, projectId: int, body: untyped) =
## do something with a cached addon.
let addon = getAddon(projectId)
Expand Down
16 changes: 16 additions & 0 deletions src/cmd/cache.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import ../api/cfcache
import ../term/log

proc paxCache*(action: string): void =
## clean/purge the cache
case action:
of "clean":
echoInfo "Cleaning cache..."
let numCleanedItems = cfcache.clean()
echoInfo "Removed ", numCleanedItems.`$`.fgCyan, " items."
of "purge":
echoInfo "Purging cache..."
cfcache.purge()
echoInfo "Purged cache."
else:
discard
17 changes: 15 additions & 2 deletions src/pax.nim
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import std/os
import therapist
import api/cfcache
import cmd/add, cmd/expo, cmd/impo, cmd/init, cmd/list, cmd/pin, cmd/remove, cmd/update, cmd/upgrade, cmd/version
import term/color, term/prompt
import cmd/[add, cache, expo, impo, init, list, pin, remove, update, upgrade, version]
import term/[color, prompt]
import util/paxVersion

let commonArgs = (
Expand Down Expand Up @@ -153,6 +153,13 @@ let exportCmd = (
help: commonArgs.help
)

let cacheCmd = (
action: newStringArg(@["<action>"],
choices = @["clean", "purge"],
help = "the action to take (clean|purge)"
)
)

let spec = (
init: newCommandArg(@["init"],
initCmd,
Expand Down Expand Up @@ -194,6 +201,10 @@ let spec = (
exportCmd,
help = "export to .zip"
),
cache: newCommandArg(@["cache"],
cacheCmd,
help = "clean/purge the mod cache"
),
yes: commonArgs.yes,
noColor: commonArgs.noColor,
paxVersion: commonArgs.version,
Expand Down Expand Up @@ -240,5 +251,7 @@ elif spec.impo.seen:
skipGit = importCmd.skipGit.seen)
elif spec.expo.seen:
paxExport(path = exportCmd.path.value)
elif spec.cache.seen:
paxCache(action = cacheCmd.action.value)
else:
echo spec.render_help()
20 changes: 11 additions & 9 deletions tests/api/tcfcache.nim
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
import std/[json, options, os]
import std/[json, options]
import api/cfcache

block: # caching addons
removeFile(getAddonFilename(123))
cfcache.purge()

block: # caching addons
let json = %* {
"id": 123
}
doAssert getAddon(123).isNone()
putAddon(json)
cfcache.putAddon(json)
doAssert getAddon(123).get() == json

block: # caching addons
removeFile(getAddonFileFilename(456))

block: # caching addon files
let json = %* {
"id": 456
}
doAssert getAddonFile(456).isNone()
putAddonFile(json)
doAssert getAddonFile(456).get() == json
cfcache.putAddonFile(json)
doAssert getAddonFile(456).get() == json

block: # cleaning
let numCleanedFiles = cfcache.clean()
doAssert numCleanedFiles == 0

0 comments on commit 1ffd5df

Please sign in to comment.