Skip to content

Commit 38b183f

Browse files
Madman10Kalehander92
authored andcommitted
bugfix(appimage): use standard tmp path resolution functions on non-macOS systems
1 parent c335bb6 commit 38b183f

File tree

8 files changed

+50
-29
lines changed

8 files changed

+50
-29
lines changed

src/backend-manager/src/paths.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,9 @@ pub struct Paths {
99
impl Default for Paths {
1010
fn default() -> Self {
1111
let tmpdir: PathBuf = if cfg!(target_os = "macos") {
12-
PathBuf::from(env::var("HOME").unwrap_or("/".to_string()))
13-
.join("Library/Caches/com.codetracer.CodeTracer/")
12+
PathBuf::from(env::var("HOME").unwrap_or("/".to_string())).join("Library/Caches/com.codetracer.CodeTracer/")
1413
} else {
15-
PathBuf::from(env::var("TMPDIR").unwrap_or(env::var("TEMPDIR").unwrap_or(
16-
env::var("TMP").unwrap_or(env::var("TEMP").unwrap_or("/tmp".to_string())),
17-
)))
18-
.join("codetracer/")
14+
env::temp_dir().join("codetracer/")
1915
};
2016
Self {
2117
tmp_path: PathBuf::from(&tmpdir),

src/ct/stylus/arb_node_utils.nim

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import std/[httpclient, json, net, strutils, parseutils, times, sets, os]
2-
import ../../common/[types]
2+
import ../../common/[types, paths]
33

44
const DEFAULT_NODE_URL* = "http://localhost:8547"
55

66
# TODO: get name from config? Maybe use SQLite?
7-
let CONTRACT_WASM_PATH* = getHomeDir() / ".local" / "share" / "codetracer" / "contract-debug-wasm"
8-
let EVM_TRACE_DIR_PATH* = getTempDir() / "codetracer"
7+
let
8+
CONTRACT_WASM_PATH* = getHomeDir() / ".local" / "share" / "codetracer" / "contract-debug-wasm"
9+
EVM_TRACE_DIR_PATH* = codetracerTmpPath
910

1011
proc jsonRpcRequest(methodParam: string, params: JsonNode): JsonNode {.raises: [IOError, ValueError].} =
1112
# TODO: add random/uniqie stuff to id

src/ct/utilities/zip_test.nim

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import std/[unittest, os, strutils, streams]
2-
import ../utilities/zip
1+
import
2+
std/[unittest, os, strutils, streams]
3+
../utilities/zip
4+
../../common/paths
35

46
suite "zipFolder / unzipIntoFolder":
57
test "zip and unzip with progress":
6-
let tmp = getTempDir()
7-
let inputDir = tmp / "zip_test_input"
8-
let outputDir = tmp / "zip_test_output"
9-
let unzipDir = tmp / "zip_test_unzipped"
8+
let inputDir = codetracerTmpPath / "zip_test_input"
9+
let outputDir = codetracerTmpPath / "zip_test_output"
10+
let unzipDir = codetracerTmpPath / "zip_test_unzipped"
1011
createDir(inputDir)
1112

1213
let testFile = inputDir / "test.txt"

src/db-backend/src/paths.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,7 @@ impl Default for Paths {
1313
let tmpdir: PathBuf = if cfg!(target_os = "macos") {
1414
PathBuf::from(env::var("HOME").unwrap_or("/".to_string())).join("Library/Caches/com.codetracer.CodeTracer/")
1515
} else {
16-
PathBuf::from(
17-
env::var("TMPDIR").unwrap_or(
18-
env::var("TEMPDIR")
19-
.unwrap_or(env::var("TMP").unwrap_or(env::var("TEMP").unwrap_or("/tmp".to_string()))),
20-
),
21-
)
22-
.join("codetracer/")
16+
env::temp_dir().join("codetracer/")
2317
};
2418
Self {
2519
tmp_path: PathBuf::from(&tmpdir),

src/frontend/index.nim

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,36 @@
11
import
22
std/jsffi,
33
lib,
4-
index/[ args, ipc_utils, electron_vars, server_config, config ]
4+
index/[ args, ipc_utils, electron_vars, server_config, config, window ]
55

66
data.start = now()
77
parseArgs()
88

99
when not defined(server):
1010
electron_vars.app.on("window-all-closed") do ():
11+
stopBackendManager()
1112
electron_vars.app.quit(0)
1213

14+
electron_vars.app.on("before-quit") do ():
15+
stopBackendManager()
16+
17+
# Ensure signal-driven exits also terminate the backend-manager.
18+
nodeProcess.on(cstring"SIGINT") do ():
19+
stopBackendManager()
20+
electron_vars.app.quit(0)
21+
22+
nodeProcess.on(cstring"SIGTERM") do ():
23+
stopBackendManager()
24+
electron_vars.app.quit(0)
25+
26+
nodeProcess.on(cstring"SIGHUP") do ():
27+
stopBackendManager()
28+
electron_vars.app.quit(0)
29+
30+
# As a last resort, cleanup on process exit as well.
31+
nodeProcess.on(cstring"exit") do (code: int):
32+
stopBackendManager()
33+
1334
electron_vars.app.on("ready") do ():
1435
electron_vars.app.js.setName "CodeTracer"
1536
electron_vars.app.js.setAppUserModelId "com.codetracer.CodeTracer"

src/frontend/index/traces.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ proc prepareForLoadingTrace*(traceId: int, pid: int) {.async.} =
105105
let packet = wrapJsonForSending js{
106106
"type": cstring"request",
107107
"command": cstring"ct/start-replay",
108-
"arguments": [cstring"db-backend"]
108+
"arguments": [cstring(dbBackendExe)]
109109
}
110110
backendManagerSocket.write(packet)
111111

@@ -207,4 +207,4 @@ proc onNewRecord*(sender: js, response: jsobject(args=seq[cstring], options=JsOb
207207
let errorSpecificText = if not processResult.error.isNil: cast[cstring](processResult.error.code) else: cstring""
208208
let errorText = cstring"record start process error: " & errorSpecificText
209209
mainWindow.webContents.send "CODETRACER::failed-record",
210-
js{errorMessage: errorText}
210+
js{errorMessage: errorText}

src/frontend/index/window.nim

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@ import
77
var
88
close = false
99
backendManagerProcess*: NodeSubProcess = nil
10+
backendManagerCleanedUp = false
11+
12+
13+
proc stopBackendManager* =
14+
# Ensure we only attempt cleanup once and guard against nil.
15+
if backendManagerCleanedUp:
16+
return
17+
backendManagerCleanedUp = true
18+
if not backendManagerProcess.isNil:
19+
backendManagerProcess.stopProcess()
20+
backendManagerProcess = nil
1021

1122
proc duration*(name: string) =
1223
infoPrint fmt"index: TIME for {name}: {now() - data.start}ms"
@@ -68,8 +79,7 @@ proc createMainWindow*: js =
6879

6980

7081
proc onCloseApp*(sender: js, response: js) {.async.} =
71-
if not backendManagerProcess.isNil:
72-
backendManagerProcess.stopProcess()
82+
stopBackendManager()
7383
mainWindow.close()
7484

7585
proc onRestart*(sender: js, response: js) {.async.} =

src/frontend/vscode.nim

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ when defined(ctInExtension):
8888
newMediatorWithSubscribers(name, isRemote=true, singleSubscriber=false, transport=transport)
8989

9090
when defined(ctInCentralExtensionContext):
91-
# let EVM_TRACE_DIR_PATH* = getTempDir() / "codetracer"
92-
9391
proc parseCTJson(raw: cstring): js =
9492
let rawString = $raw
9593
let idx = rawString.find(".AppImage installed")

0 commit comments

Comments
 (0)