FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node/test/common/tmpdir.js at main · fetchapi/node · GitHub
fetchapi
/
node
Public
forked from
nodejs/node
Notifications
You must be signed in to change notification settings
Fork
1
Star
0
Code
Pull requests
1
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
node
/
test
/
common
/
tmpdir.js
Copy path
More file actions
More file actions
Latest commit
History
History
History
95 lines (79 loc) · 2.49 KB
Breadcrumbs
node
/
test
/
common
/
tmpdir.js
Copy path
File metadata and controls
95 lines (79 loc) · 2.49 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
'use strict'
;
const
{
spawnSync
}
=
require
(
'child_process'
)
;
const
fs
=
require
(
'fs'
)
;
const
path
=
require
(
'path'
)
;
const
{
pathToFileURL
}
=
require
(
'url'
)
;
const
{
isMainThread
}
=
require
(
'worker_threads'
)
;
function
rmSync
(
pathname
,
useSpawn
)
{
if
(
useSpawn
)
{
const
escapedPath
=
pathname
.
replaceAll
(
'\\'
,
'\\\\'
)
;
spawnSync
(
process
.
execPath
,
[
'-e'
,
`require("fs").rmSync("
${
escapedPath
}
", { maxRetries: 3, recursive: true, force: true });`
,
]
,
)
;
}
else
{
fs
.
rmSync
(
pathname
,
{
maxRetries
:
3
,
recursive
:
true
,
force
:
true
}
)
;
}
}
const
testRoot
=
process
.
env
.
NODE_TEST_DIR
?
fs
.
realpathSync
(
process
.
env
.
NODE_TEST_DIR
)
:
path
.
resolve
(
__dirname
,
'..'
)
;
// Using a `.` prefixed name, which is the convention for "hidden" on POSIX,
// gets tools to ignore it by default or by simple rules, especially eslint.
const
tmpdirName
=
'.tmp.'
+
(
process
.
env
.
TEST_SERIAL_ID
||
process
.
env
.
TEST_THREAD_ID
||
'0'
)
;
const
tmpPath
=
path
.
join
(
testRoot
,
tmpdirName
)
;
let
firstRefresh
=
true
;
function
refresh
(
useSpawn
=
false
)
{
rmSync
(
tmpPath
,
useSpawn
)
;
fs
.
mkdirSync
(
tmpPath
)
;
if
(
firstRefresh
)
{
firstRefresh
=
false
;
// Clean only when a test uses refresh. This allows for child processes to
// use the tmpdir and only the parent will clean on exit.
process
.
on
(
'exit'
,
(
)
=>
{
return
onexit
(
useSpawn
)
;
}
)
;
}
}
function
onexit
(
useSpawn
)
{
// Change directory to avoid possible EBUSY
if
(
isMainThread
)
process
.
chdir
(
testRoot
)
;
try
{
rmSync
(
tmpPath
,
useSpawn
)
;
}
catch
(
e
)
{
console
.
error
(
'Can\'t clean tmpdir:'
,
tmpPath
)
;
const
files
=
fs
.
readdirSync
(
tmpPath
)
;
console
.
error
(
'Files blocking:'
,
files
)
;
if
(
files
.
some
(
(
f
)
=>
f
.
startsWith
(
'.nfs'
)
)
)
{
// Warn about NFS "silly rename"
console
.
error
(
'Note: ".nfs*" might be files that were open and '
+
'unlinked but not closed.'
)
;
console
.
error
(
'See http://nfs.sourceforge.net/#faq_d2 for details.'
)
;
}
console
.
error
(
)
;
throw
e
;
}
}
function
resolve
(
...
paths
)
{
return
path
.
resolve
(
tmpPath
,
...
paths
)
;
}
function
hasEnoughSpace
(
size
)
{
const
{
bavail
,
bsize
}
=
fs
.
statfsSync
(
tmpPath
)
;
return
bavail
>=
Math
.
ceil
(
size
/
bsize
)
;
}
function
fileURL
(
...
paths
)
{
// When called without arguments, add explicit trailing slash
const
fullPath
=
path
.
resolve
(
tmpPath
+
path
.
sep
,
...
paths
)
;
return
pathToFileURL
(
fullPath
)
;
}
module
.
exports
=
{
fileURL
,
hasEnoughSpace
,
path
:
tmpPath
,
refresh
,
resolve
,
}
;
Back
|
FazBrowse Home
|
New Git URL