Skip to content

Commit ec9dfab

Browse files
committed
Merge branch 'msys2'
2 parents 586446c + e035159 commit ec9dfab

20 files changed

+309
-86
lines changed

Documentation/Makefile

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -286,9 +286,9 @@ docdep_prereqs = \
286286
cmd-list.made $(cmds_txt)
287287

288288
doc.dep : $(docdep_prereqs) $(wildcard *.txt) build-docdep.perl
289-
$(QUIET_GEN)$(RM) $@+ $@ && \
290-
$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
291-
mv $@+ $@
289+
$(QUIET_GEN)$(RM) $@.new $@ && \
290+
$(PERL_PATH) ./build-docdep.perl >$@.new $(QUIET_STDERR) && \
291+
mv $@.new $@
292292

293293
-include doc.dep
294294

@@ -324,8 +324,8 @@ mergetools-list.made: ../git-mergetool--lib.sh $(wildcard ../mergetools/*)
324324
date >$@
325325

326326
clean:
327-
$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
328-
$(RM) *.texi *.texi+ *.texi++ git.info gitman.info
327+
$(RM) *.xml *.xml.new *.html *.html.new *.1 *.5 *.7
328+
$(RM) *.texi *.texi.new *.texi.new.new git.info gitman.info
329329
$(RM) *.pdf
330330
$(RM) howto-index.txt howto/*.html doc.dep
331331
$(RM) technical/*.html technical/api-index.txt
@@ -334,14 +334,14 @@ clean:
334334
$(RM) manpage-base-url.xsl
335335

336336
$(MAN_HTML): %.html : %.txt asciidoc.conf
337-
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
338-
$(TXT_TO_HTML) -d manpage -o $@+ $< && \
339-
mv $@+ $@
337+
$(QUIET_ASCIIDOC)$(RM) $@.new $@ && \
338+
$(TXT_TO_HTML) -d manpage -o $@.new $< && \
339+
mv $@.new $@
340340

341341
$(OBSOLETE_HTML): %.html : %.txto asciidoc.conf
342-
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
343-
$(TXT_TO_HTML) -o $@+ $< && \
344-
mv $@+ $@
342+
$(QUIET_ASCIIDOC)$(RM) $@.new $@ && \
343+
$(TXT_TO_HTML) -o $@.new $< && \
344+
mv $@.new $@
345345

346346
manpage-base-url.xsl: manpage-base-url.xsl.in
347347
sed "s|@@MAN_BASE_URL@@|$(MAN_BASE_URL)|" $< > $@
@@ -351,14 +351,14 @@ manpage-base-url.xsl: manpage-base-url.xsl.in
351351
$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<
352352

353353
%.xml : %.txt asciidoc.conf
354-
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
355-
$(TXT_TO_XML) -d manpage -o $@+ $< && \
356-
mv $@+ $@
354+
$(QUIET_ASCIIDOC)$(RM) $@.new $@ && \
355+
$(TXT_TO_XML) -d manpage -o $@.new $< && \
356+
mv $@.new $@
357357

358358
user-manual.xml: user-manual.txt user-manual.conf
359-
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
360-
$(TXT_TO_XML) -d book -o $@+ $< && \
361-
mv $@+ $@
359+
$(QUIET_ASCIIDOC)$(RM) $@.new $@ && \
360+
$(TXT_TO_XML) -d book -o $@.new $< && \
361+
mv $@.new $@
362362

363363
technical/api-index.txt: technical/api-index-skel.txt \
364364
technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS))
@@ -375,46 +375,46 @@ XSLT = docbook.xsl
375375
XSLTOPTS = --xinclude --stringparam html.stylesheet docbook-xsl.css
376376

377377
user-manual.html: user-manual.xml $(XSLT)
378-
$(QUIET_XSLTPROC)$(RM) $@+ $@ && \
379-
xsltproc $(XSLTOPTS) -o $@+ $(XSLT) $< && \
380-
mv $@+ $@
378+
$(QUIET_XSLTPROC)$(RM) $@.new $@ && \
379+
xsltproc $(XSLTOPTS) -o $@.new $(XSLT) $< && \
380+
mv $@.new $@
381381

382382
git.info: user-manual.texi
383383
$(QUIET_MAKEINFO)$(MAKEINFO) --no-split -o $@ user-manual.texi
384384

385385
user-manual.texi: user-manual.xml
386-
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
387-
$(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout >$@++ && \
388-
$(PERL_PATH) fix-texi.perl <$@++ >$@+ && \
389-
rm $@++ && \
390-
mv $@+ $@
386+
$(QUIET_DB2TEXI)$(RM) $@.new $@ && \
387+
$(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout >$@.new.new && \
388+
$(PERL_PATH) fix-texi.perl <$@.new.new >$@.new && \
389+
rm $@.new.new && \
390+
mv $@.new $@
391391

392392
user-manual.pdf: user-manual.xml
393-
$(QUIET_DBLATEX)$(RM) $@+ $@ && \
394-
$(DBLATEX) -o $@+ $(DBLATEX_COMMON) $< && \
395-
mv $@+ $@
393+
$(QUIET_DBLATEX)$(RM) $@.new $@ && \
394+
$(DBLATEX) -o $@.new $(DBLATEX_COMMON) $< && \
395+
mv $@.new $@
396396

397397
gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl
398-
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
399-
($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml)+ texi.xsl $(xml) && \
400-
$(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml)+ && \
401-
rm $(xml)+ &&) true) > $@++ && \
402-
$(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \
403-
rm $@++ && \
404-
mv $@+ $@
398+
$(QUIET_DB2TEXI)$(RM) $@.new $@ && \
399+
($(foreach xml,$(sort $(MAN_XML)),xsltproc -o $(xml).new texi.xsl $(xml) && \
400+
$(DOCBOOK2X_TEXI) --encoding=UTF-8 --to-stdout $(xml).new && \
401+
rm $(xml).new &&) true) > $@.new.new && \
402+
$(PERL_PATH) cat-texi.perl $@ <$@.new.new >$@.new && \
403+
rm $@.new.new && \
404+
mv $@.new $@
405405

406406
gitman.info: gitman.texi
407407
$(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $*.texi
408408

409409
$(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
410-
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
411-
$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+ && \
412-
mv $@+ $@
410+
$(QUIET_DB2TEXI)$(RM) $@.new $@ && \
411+
$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@.new && \
412+
mv $@.new $@
413413

414414
howto-index.txt: howto-index.sh $(wildcard howto/*.txt)
415-
$(QUIET_GEN)$(RM) $@+ $@ && \
416-
'$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(wildcard howto/*.txt)) >$@+ && \
417-
mv $@+ $@
415+
$(QUIET_GEN)$(RM) $@.new $@ && \
416+
'$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(wildcard howto/*.txt)) >$@.new && \
417+
mv $@.new $@
418418

419419
$(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt
420420
$(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt
@@ -423,10 +423,10 @@ WEBDOC_DEST = /pub/software/scm/git/docs
423423

424424
howto/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
425425
$(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt
426-
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
426+
$(QUIET_ASCIIDOC)$(RM) $@.new $@ && \
427427
sed -e '1,/^$$/d' $< | \
428-
$(TXT_TO_HTML) - >$@+ && \
429-
mv $@+ $@
428+
$(TXT_TO_HTML) - >$@.new && \
429+
mv $@.new $@
430430

431431
install-webdoc : html
432432
'$(SHELL_PATH_SQ)' ./install-webdoc.sh $(WEBDOC_DEST)

builtin/clean.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff)
576576
clean_get_color(CLEAN_COLOR_RESET));
577577
}
578578

579+
fflush(stdout);
579580
if (strbuf_getline_lf(&choice, stdin) != EOF) {
580581
strbuf_trim(&choice);
581582
} else {
@@ -658,6 +659,7 @@ static int filter_by_patterns_cmd(void)
658659
clean_print_color(CLEAN_COLOR_PROMPT);
659660
printf(_("Input ignore patterns>> "));
660661
clean_print_color(CLEAN_COLOR_RESET);
662+
fflush(stdout);
661663
if (strbuf_getline_lf(&confirm, stdin) != EOF)
662664
strbuf_trim(&confirm);
663665
else
@@ -756,6 +758,7 @@ static int ask_each_cmd(void)
756758
qname = quote_path_relative(item->string, NULL, &buf);
757759
/* TRANSLATORS: Make sure to keep [y/N] as is */
758760
printf(_("Remove %s [y/N]? "), qname);
761+
fflush(stdout);
759762
if (strbuf_getline_lf(&confirm, stdin) != EOF) {
760763
strbuf_trim(&confirm);
761764
} else {

compat/mingw.c

Lines changed: 115 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,7 @@ char *mingw_getcwd(char *pointer, int len)
10141014
* See http://msdn2.microsoft.com/en-us/library/17w5ykft(vs.71).aspx
10151015
* (Parsing C++ Command-Line Arguments)
10161016
*/
1017-
static const char *quote_arg(const char *arg)
1017+
static const char *quote_arg_msvc(const char *arg)
10181018
{
10191019
/* count chars to quote */
10201020
int len = 0, n = 0;
@@ -1069,6 +1069,37 @@ static const char *quote_arg(const char *arg)
10691069
return q;
10701070
}
10711071

1072+
#include "quote.h"
1073+
1074+
static const char *quote_arg_msys2(const char *arg)
1075+
{
1076+
struct strbuf buf = STRBUF_INIT;
1077+
const char *p2 = arg, *p;
1078+
1079+
for (p = arg; *p; p++) {
1080+
int ws = isspace(*p);
1081+
if (!ws && *p != '\\' && *p != '"' && *p != '{')
1082+
continue;
1083+
if (!buf.len)
1084+
strbuf_addch(&buf, '"');
1085+
if (p != p2)
1086+
strbuf_add(&buf, p2, p - p2);
1087+
if (!ws && *p != '{')
1088+
strbuf_addch(&buf, '\\');
1089+
p2 = p;
1090+
}
1091+
1092+
if (p == arg)
1093+
strbuf_addch(&buf, '"');
1094+
else if (!buf.len)
1095+
return arg;
1096+
else
1097+
strbuf_add(&buf, p2, p - p2),
1098+
1099+
strbuf_addch(&buf, '"');
1100+
return strbuf_detach(&buf, 0);
1101+
}
1102+
10721103
static const char *parse_interpreter(const char *cmd)
10731104
{
10741105
static char buf[100];
@@ -1300,6 +1331,34 @@ struct pinfo_t {
13001331
static struct pinfo_t *pinfo = NULL;
13011332
CRITICAL_SECTION pinfo_cs;
13021333

1334+
static int is_msys2_sh(const char *cmd)
1335+
{
1336+
if (cmd && !strcmp(cmd, "sh")) {
1337+
static int ret = -1;
1338+
char *p;
1339+
1340+
if (ret >= 0)
1341+
return ret;
1342+
1343+
p = path_lookup(cmd, 0);
1344+
if (!p)
1345+
ret = 0;
1346+
else {
1347+
size_t len = strlen(p);
1348+
ret = len > 15 &&
1349+
is_dir_sep(p[len - 15]) &&
1350+
!strncasecmp(p + len - 14, "usr", 3) &&
1351+
is_dir_sep(p[len - 11]) &&
1352+
!strncasecmp(p + len - 10, "bin", 3) &&
1353+
is_dir_sep(p[len - 7]) &&
1354+
!strcasecmp(p + len - 6, "sh.exe");
1355+
free(p);
1356+
}
1357+
return ret;
1358+
}
1359+
return 0;
1360+
}
1361+
13031362
static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaenv,
13041363
const char *dir,
13051364
int prepend_cmd, int fhin, int fhout, int fherr)
@@ -1311,6 +1370,9 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
13111370
unsigned flags = CREATE_UNICODE_ENVIRONMENT;
13121371
BOOL ret;
13131372
HANDLE cons;
1373+
const char *(*quote_arg)(const char *arg) =
1374+
is_msys2_sh(*argv) ? quote_arg_msys2 : quote_arg_msvc;
1375+
const char *strace_env;
13141376

13151377
do_unset_environment_variables();
13161378

@@ -1368,6 +1430,31 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
13681430
free(quoted);
13691431
}
13701432

1433+
strace_env = getenv("GIT_STRACE_COMMANDS");
1434+
if (strace_env) {
1435+
char *p = path_lookup("strace.exe", 1);
1436+
if (!p)
1437+
return error("strace not found!");
1438+
if (xutftowcs_path(wcmd, p) < 0) {
1439+
free(p);
1440+
return -1;
1441+
}
1442+
free(p);
1443+
if (!strcmp("1", strace_env) ||
1444+
!strcasecmp("yes", strace_env) ||
1445+
!strcasecmp("true", strace_env))
1446+
strbuf_insert(&args, 0, "strace ", 7);
1447+
else {
1448+
const char *quoted = quote_arg(strace_env);
1449+
struct strbuf buf = STRBUF_INIT;
1450+
strbuf_addf(&buf, "strace -o %s ", quoted);
1451+
if (quoted != strace_env)
1452+
free((char *)quoted);
1453+
strbuf_insert(&args, 0, buf.buf, buf.len);
1454+
strbuf_release(&buf);
1455+
}
1456+
}
1457+
13711458
ALLOC_ARRAY(wargs, st_add(st_mult(2, args.len), 1));
13721459
xutftowcs(wargs, args.buf, 2 * args.len + 1);
13731460
strbuf_release(&args);
@@ -2382,6 +2469,33 @@ static void setup_windows_environment(void)
23822469
/* simulate TERM to enable auto-color (see color.c) */
23832470
if (!getenv("TERM"))
23842471
setenv("TERM", "cygwin", 1);
2472+
2473+
/* calculate HOME if not set */
2474+
if (!getenv("HOME")) {
2475+
/*
2476+
* try $HOMEDRIVE$HOMEPATH - the home share may be a network
2477+
* location, thus also check if the path exists (i.e. is not
2478+
* disconnected)
2479+
*/
2480+
if ((tmp = getenv("HOMEDRIVE"))) {
2481+
struct strbuf buf = STRBUF_INIT;
2482+
strbuf_addstr(&buf, tmp);
2483+
if ((tmp = getenv("HOMEPATH"))) {
2484+
strbuf_addstr(&buf, tmp);
2485+
if (is_directory(buf.buf))
2486+
setenv("HOME", buf.buf, 1);
2487+
else
2488+
tmp = NULL; /* use $USERPROFILE */
2489+
}
2490+
strbuf_release(&buf);
2491+
}
2492+
/* use $USERPROFILE if the home share is not available */
2493+
if (!tmp && (tmp = getenv("USERPROFILE")))
2494+
setenv("HOME", tmp, 1);
2495+
}
2496+
2497+
if (!getenv("LC_ALL") && !getenv("LC_CTYPE") && !getenv("LANG"))
2498+
setenv("LC_CTYPE", "C", 1);
23852499
}
23862500

23872501
int handle_long_path(wchar_t *path, int len, int max_path, int expand)

0 commit comments

Comments
 (0)