зеркало из https://github.com/microsoft/git.git
Merge branch 'ae/better-template-failure-report'
* ae/better-template-failure-report: Improve error messages when temporary file creation fails
This commit is contained in:
Коммит
70ec8687a6
1
Makefile
1
Makefile
|
@ -435,6 +435,7 @@ TEST_PROGRAMS_NEED_X += test-subprocess
|
|||
TEST_PROGRAMS_NEED_X += test-svn-fe
|
||||
TEST_PROGRAMS_NEED_X += test-treap
|
||||
TEST_PROGRAMS_NEED_X += test-index-version
|
||||
TEST_PROGRAMS_NEED_X += test-mktemp
|
||||
|
||||
TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
|
||||
|
||||
|
|
|
@ -12,4 +12,17 @@ test_expect_success 'character classes (isspace, isalpha etc.)' '
|
|||
test-ctype
|
||||
'
|
||||
|
||||
test_expect_success 'mktemp to nonexistent directory prints filename' '
|
||||
test_must_fail test-mktemp doesnotexist/testXXXXXX 2>err &&
|
||||
grep "doesnotexist/test" err
|
||||
'
|
||||
|
||||
test_expect_success POSIXPERM 'mktemp to unwritable directory prints filename' '
|
||||
mkdir cannotwrite &&
|
||||
chmod -w cannotwrite &&
|
||||
test_when_finished "chmod +w cannotwrite" &&
|
||||
test_must_fail test-mktemp cannotwrite/testXXXXXX 2>err &&
|
||||
grep "cannotwrite/test" err
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* test-mktemp.c: code to exercise the creation of temporary files
|
||||
*/
|
||||
#include "git-compat-util.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc != 2)
|
||||
usage("Expected 1 parameter defining the temporary file template");
|
||||
|
||||
xmkstemp(xstrdup(argv[1]));
|
||||
|
||||
return 0;
|
||||
}
|
32
wrapper.c
32
wrapper.c
|
@ -198,10 +198,22 @@ FILE *xfdopen(int fd, const char *mode)
|
|||
int xmkstemp(char *template)
|
||||
{
|
||||
int fd;
|
||||
char origtemplate[PATH_MAX];
|
||||
strlcpy(origtemplate, template, sizeof(origtemplate));
|
||||
|
||||
fd = mkstemp(template);
|
||||
if (fd < 0)
|
||||
die_errno("Unable to create temporary file");
|
||||
if (fd < 0) {
|
||||
int saved_errno = errno;
|
||||
const char *nonrelative_template;
|
||||
|
||||
if (!template[0])
|
||||
template = origtemplate;
|
||||
|
||||
nonrelative_template = make_nonrelative_path(template);
|
||||
errno = saved_errno;
|
||||
die_errno("Unable to create temporary file '%s'",
|
||||
nonrelative_template);
|
||||
}
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
@ -321,10 +333,22 @@ int gitmkstemps(char *pattern, int suffix_len)
|
|||
int xmkstemp_mode(char *template, int mode)
|
||||
{
|
||||
int fd;
|
||||
char origtemplate[PATH_MAX];
|
||||
strlcpy(origtemplate, template, sizeof(origtemplate));
|
||||
|
||||
fd = git_mkstemp_mode(template, mode);
|
||||
if (fd < 0)
|
||||
die_errno("Unable to create temporary file");
|
||||
if (fd < 0) {
|
||||
int saved_errno = errno;
|
||||
const char *nonrelative_template;
|
||||
|
||||
if (!template[0])
|
||||
template = origtemplate;
|
||||
|
||||
nonrelative_template = make_nonrelative_path(template);
|
||||
errno = saved_errno;
|
||||
die_errno("Unable to create temporary file '%s'",
|
||||
nonrelative_template);
|
||||
}
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче