@@ -47,7 +47,7 @@ module.exports = {
47
47
return path . dirname ( require . resolve ( packageJson . name ) ) ;
48
48
}
49
49
} ,
50
- checkDirExist : async path => {
50
+ createDirIfNotExist : async path => {
51
51
try {
52
52
await fs . access ( path ) ;
53
53
} catch ( e ) {
@@ -60,6 +60,20 @@ module.exports = {
60
60
}
61
61
}
62
62
} ,
63
+ checkDirOrFileExist : async path => {
64
+ try {
65
+ await fs . access ( path ) ;
66
+ return true ;
67
+ } catch ( e ) {
68
+ if ( e . code === 'ENOENT' ) {
69
+ return false ;
70
+ } else {
71
+ throw new Error (
72
+ `[checkDirOrFileExist] Unhandled error from fs.access() with following error:\n${ e } ` ,
73
+ ) ;
74
+ }
75
+ }
76
+ } ,
63
77
getMetamaskReleases : async version => {
64
78
let filename ;
65
79
let downloadUrl ;
@@ -91,8 +105,6 @@ module.exports = {
91
105
} ,
92
106
download : async ( url , destination ) => {
93
107
try {
94
- // todo: check if zip file exists, if yes then remove it before
95
- // todo: if directory exists, dont overwrite
96
108
await download ( url , destination , { extract : true } ) ;
97
109
} catch ( e ) {
98
110
throw new Error (
@@ -103,9 +115,22 @@ module.exports = {
103
115
prepareMetamask : async version => {
104
116
const release = await module . exports . getMetamaskReleases ( version ) ;
105
117
const downloadsDirectory = path . resolve ( __dirname , 'downloads' ) ;
106
- await module . exports . dirExists ( downloadsDirectory ) ;
118
+ await module . exports . createDirIfNotExist ( downloadsDirectory ) ;
107
119
const metamaskDirectory = path . join ( downloadsDirectory , release . tagName ) ;
108
- await module . exports . download ( release . downloadUrl , metamaskDirectory ) ;
120
+ const metamaskDirectoryExists = await module . exports . checkDirOrFileExist (
121
+ metamaskDirectory ,
122
+ ) ;
123
+ const metamaskManifestFilePath = path . join (
124
+ downloadsDirectory ,
125
+ release . tagName ,
126
+ 'manifest.json' ,
127
+ ) ;
128
+ const metamaskManifestFileExists = await module . exports . checkDirOrFileExist (
129
+ metamaskManifestFilePath ,
130
+ ) ;
131
+ if ( ! metamaskDirectoryExists && ! metamaskManifestFileExists ) {
132
+ await module . exports . download ( release . downloadUrl , metamaskDirectory ) ;
133
+ }
109
134
return metamaskDirectory ;
110
135
} ,
111
136
} ;
0 commit comments