@@ -231,7 +231,7 @@ func TrimSpace(value string) string {
231
231
232
232
type argFilterFunc func (int , string , []string ) bool
233
233
234
- func PrepareCommandFilteredArgs (pattern string , filter argFilterFunc , logger i18n.Logger ) (* exec.Cmd , error ) {
234
+ func PrepareCommandFilteredArgs (pattern string , filter argFilterFunc , logger i18n.Logger , relativePath string ) (* exec.Cmd , error ) {
235
235
parts , err := ParseCommandLine (pattern , logger )
236
236
if err != nil {
237
237
return nil , i18n .WrapError (err )
@@ -241,19 +241,36 @@ func PrepareCommandFilteredArgs(pattern string, filter argFilterFunc, logger i18
241
241
var args []string
242
242
for idx , part := range parts {
243
243
if filter (idx , part , parts ) {
244
+ // if relativePath is specified, the overall commandline is too long for the platform
245
+ // try reducing the length by making the filenames relative
246
+ // and changing working directory to build.path
247
+ if relativePath != "" {
248
+ if _ , err := os .Stat (part ); ! os .IsNotExist (err ) {
249
+ tmp , err := filepath .Rel (relativePath , part )
250
+ if err == nil {
251
+ part = tmp
252
+ }
253
+ }
254
+ }
244
255
args = append (args , part )
245
256
}
246
257
}
247
258
248
- return exec .Command (command , args ... ), nil
259
+ cmd := exec .Command (command , args ... )
260
+
261
+ if relativePath != "" {
262
+ cmd .Dir = relativePath
263
+ }
264
+
265
+ return cmd , nil
249
266
}
250
267
251
268
func filterEmptyArg (_ int , arg string , _ []string ) bool {
252
269
return arg != constants .EMPTY_STRING
253
270
}
254
271
255
- func PrepareCommand (pattern string , logger i18n.Logger ) (* exec.Cmd , error ) {
256
- return PrepareCommandFilteredArgs (pattern , filterEmptyArg , logger )
272
+ func PrepareCommand (pattern string , logger i18n.Logger , relativePath string ) (* exec.Cmd , error ) {
273
+ return PrepareCommandFilteredArgs (pattern , filterEmptyArg , logger , relativePath )
257
274
}
258
275
259
276
func MapHas (aMap map [string ]interface {}, key string ) bool {
0 commit comments