зеркало из 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-svn-fe
|
||||||
TEST_PROGRAMS_NEED_X += test-treap
|
TEST_PROGRAMS_NEED_X += test-treap
|
||||||
TEST_PROGRAMS_NEED_X += test-index-version
|
TEST_PROGRAMS_NEED_X += test-index-version
|
||||||
|
TEST_PROGRAMS_NEED_X += test-mktemp
|
||||||
|
|
||||||
TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
|
TEST_PROGRAMS = $(patsubst %,%$X,$(TEST_PROGRAMS_NEED_X))
|
||||||
|
|
||||||
|
|
|
@ -12,4 +12,17 @@ test_expect_success 'character classes (isspace, isalpha etc.)' '
|
||||||
test-ctype
|
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
|
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 xmkstemp(char *template)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
char origtemplate[PATH_MAX];
|
||||||
|
strlcpy(origtemplate, template, sizeof(origtemplate));
|
||||||
|
|
||||||
fd = mkstemp(template);
|
fd = mkstemp(template);
|
||||||
if (fd < 0)
|
if (fd < 0) {
|
||||||
die_errno("Unable to create temporary file");
|
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;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,10 +333,22 @@ int gitmkstemps(char *pattern, int suffix_len)
|
||||||
int xmkstemp_mode(char *template, int mode)
|
int xmkstemp_mode(char *template, int mode)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
char origtemplate[PATH_MAX];
|
||||||
|
strlcpy(origtemplate, template, sizeof(origtemplate));
|
||||||
|
|
||||||
fd = git_mkstemp_mode(template, mode);
|
fd = git_mkstemp_mode(template, mode);
|
||||||
if (fd < 0)
|
if (fd < 0) {
|
||||||
die_errno("Unable to create temporary file");
|
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;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче