@@ -144,18 +144,33 @@ export default class IBMiContent {
144
144
*/
145
145
async downloadMemberContent ( asp : string | undefined , library : string , sourceFile : string , member : string , localPath ?: string ) {
146
146
asp = asp || this . config . sourceASP ;
147
- library = library . toUpperCase ( ) ;
148
- sourceFile = sourceFile . toUpperCase ( ) ;
149
- member = member . toUpperCase ( ) ;
147
+ library = this . ibmi . upperCaseName ( library ) ;
148
+ sourceFile = this . ibmi . upperCaseName ( sourceFile ) ;
149
+ member = this . ibmi . upperCaseName ( member ) ;
150
150
151
151
let retry = false ;
152
152
let path = Tools . qualifyPath ( library , sourceFile , member , asp ) ;
153
153
const tempRmt = this . getTempRemote ( path ) ;
154
154
while ( true ) {
155
- const copyResult = await this . ibmi . runCommand ( {
156
- command : `CPYTOSTMF FROMMBR('${ path } ') TOSTMF('${ tempRmt } ') STMFOPT(*REPLACE) STMFCCSID(1208) DBFCCSID(${ this . config . sourceFileCCSID } )` ,
157
- noLibList : true
158
- } ) ;
155
+ let copyResult : CommandResult ;
156
+ if ( this . ibmi . dangerousVariants && new RegExp ( `[${ this . ibmi . variantChars . local } ]` ) . test ( path ) ) {
157
+ copyResult = { code : 0 , stdout : '' , stderr : '' } ;
158
+ try {
159
+ await this . runSQL ( [
160
+ `@QSYS/CPYF FROMFILE(${ library } /${ sourceFile } ) TOFILE(QTEMP/QTEMPSRC) FROMMBR(${ member } ) TOMBR(TEMPMEMBER) MBROPT(*REPLACE) CRTFILE(*YES);` ,
161
+ `@QSYS/CPYTOSTMF FROMMBR('${ Tools . qualifyPath ( "QTEMP" , "QTEMPSRC" , "TEMPMEMBER" , undefined ) } ') TOSTMF('${ tempRmt } ') STMFOPT(*REPLACE) STMFCCSID(1208) DBFCCSID(${ this . config . sourceFileCCSID } );`
162
+ ] . join ( "\n" ) ) ;
163
+ } catch ( error : any ) {
164
+ copyResult . code = - 1 ;
165
+ copyResult . stderr = String ( error ) ;
166
+ }
167
+ }
168
+ else {
169
+ copyResult = await this . ibmi . runCommand ( {
170
+ command : `QSYS/CPYTOSTMF FROMMBR('${ path } ') TOSTMF('${ tempRmt } ') STMFOPT(*REPLACE) STMFCCSID(1208) DBFCCSID(${ this . config . sourceFileCCSID } )` ,
171
+ noLibList : true
172
+ } ) ;
173
+ }
159
174
160
175
if ( copyResult . code === 0 ) {
161
176
if ( ! localPath ) {
@@ -197,9 +212,9 @@ export default class IBMiContent {
197
212
*/
198
213
async uploadMemberContent ( asp : string | undefined , library : string , sourceFile : string , member : string , content : string | Uint8Array ) {
199
214
asp = asp || this . config . sourceASP ;
200
- library = library . toUpperCase ( ) ;
201
- sourceFile = sourceFile . toUpperCase ( ) ;
202
- member = member . toUpperCase ( ) ;
215
+ library = this . ibmi . upperCaseName ( library ) ;
216
+ sourceFile = this . ibmi . upperCaseName ( sourceFile ) ;
217
+ member = this . ibmi . upperCaseName ( member ) ;
203
218
204
219
const client = this . ibmi . client ;
205
220
const tmpobj = await tmpFile ( ) ;
@@ -212,10 +227,26 @@ export default class IBMiContent {
212
227
await client . putFile ( tmpobj , tempRmt ) ;
213
228
214
229
while ( true ) {
215
- const copyResult = await this . ibmi . runCommand ( {
216
- command : `QSYS/CPYFRMSTMF FROMSTMF('${ tempRmt } ') TOMBR('${ path } ') MBROPT(*REPLACE) STMFCCSID(1208) DBFCCSID(${ this . config . sourceFileCCSID } )` ,
217
- noLibList : true
218
- } ) ;
230
+ let copyResult : CommandResult ;
231
+ if ( this . ibmi . dangerousVariants && new RegExp ( `[${ this . ibmi . variantChars . local } ]` ) . test ( path ) ) {
232
+ copyResult = { code : 0 , stdout : '' , stderr : '' } ;
233
+ try {
234
+ await this . runSQL ( [
235
+ `@QSYS/CPYF FROMFILE(${ library } /${ sourceFile } ) FROMMBR(${ member } ) TOFILE(QTEMP/QTEMPSRC) TOMBR(TEMPMEMBER) MBROPT(*REPLACE) CRTFILE(*YES);` ,
236
+ `@QSYS/CPYFRMSTMF FROMSTMF('${ tempRmt } ') TOMBR('${ Tools . qualifyPath ( "QTEMP" , "QTEMPSRC" , "TEMPMEMBER" , undefined ) } ') MBROPT(*REPLACE) STMFCCSID(1208) DBFCCSID(${ this . config . sourceFileCCSID } )` ,
237
+ `@QSYS/CPYF FROMFILE(QTEMP/QTEMPSRC) FROMMBR(TEMPMEMBER) TOFILE(${ library } /${ sourceFile } ) TOMBR(${ member } ) MBROPT(*REPLACE);`
238
+ ] . join ( "\n" ) ) ;
239
+ } catch ( error : any ) {
240
+ copyResult . code = - 1 ;
241
+ copyResult . stderr = String ( error ) ;
242
+ }
243
+ }
244
+ else {
245
+ copyResult = await this . ibmi . runCommand ( {
246
+ command : `QSYS/CPYFRMSTMF FROMSTMF('${ tempRmt } ') TOMBR('${ path } ') MBROPT(*REPLACE) STMFCCSID(1208) DBFCCSID(${ this . config . sourceFileCCSID } )` ,
247
+ noLibList : true
248
+ } ) ;
249
+ }
219
250
220
251
if ( copyResult . code === 0 ) {
221
252
const messages = Tools . parseMessages ( copyResult . stderr ) ;
0 commit comments