@@ -1487,6 +1487,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
1487
1487
const char * (* quote_arg )(const char * arg ) =
1488
1488
is_msys2_sh (cmd ? cmd : * argv ) ?
1489
1489
quote_arg_msys2 : quote_arg_msvc ;
1490
+ const char * strace_env ;
1490
1491
1491
1492
/* Make sure to override previous errors, if any */
1492
1493
errno = 0 ;
@@ -1570,6 +1571,31 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
1570
1571
free (quoted );
1571
1572
}
1572
1573
1574
+ strace_env = getenv ("GIT_STRACE_COMMANDS" );
1575
+ if (strace_env ) {
1576
+ char * p = path_lookup ("strace.exe" , 1 );
1577
+ if (!p )
1578
+ return error ("strace not found!" );
1579
+ if (xutftowcs_path (wcmd , p ) < 0 ) {
1580
+ free (p );
1581
+ return -1 ;
1582
+ }
1583
+ free (p );
1584
+ if (!strcmp ("1" , strace_env ) ||
1585
+ !strcasecmp ("yes" , strace_env ) ||
1586
+ !strcasecmp ("true" , strace_env ))
1587
+ strbuf_insert (& args , 0 , "strace " , 7 );
1588
+ else {
1589
+ const char * quoted = quote_arg (strace_env );
1590
+ struct strbuf buf = STRBUF_INIT ;
1591
+ strbuf_addf (& buf , "strace -o %s " , quoted );
1592
+ if (quoted != strace_env )
1593
+ free ((char * )quoted );
1594
+ strbuf_insert (& args , 0 , buf .buf , buf .len );
1595
+ strbuf_release (& buf );
1596
+ }
1597
+ }
1598
+
1573
1599
ALLOC_ARRAY (wargs , st_add (st_mult (2 , args .len ), 1 ));
1574
1600
xutftowcs (wargs , args .buf , 2 * args .len + 1 );
1575
1601
strbuf_release (& args );
0 commit comments