Merge branch 'jc/setup-cleanup-fix'
"git archive" and "git mailinfo" stopped reading from local configuration file with a recent update. * jc/setup-cleanup-fix: archive: read local configuration mailinfo: read local configuration
This commit is contained in:
commit
c34a7daad7
@ -504,15 +504,11 @@ static int parse_archive_args(int argc, const char **argv,
|
||||
}
|
||||
|
||||
int write_archive(int argc, const char **argv, const char *prefix,
|
||||
int setup_prefix, const char *name_hint, int remote)
|
||||
const char *name_hint, int remote)
|
||||
{
|
||||
int nongit = 0;
|
||||
const struct archiver *ar = NULL;
|
||||
struct archiver_args args;
|
||||
|
||||
if (setup_prefix && prefix == NULL)
|
||||
prefix = setup_git_directory_gently(&nongit);
|
||||
|
||||
git_config_get_bool("uploadarchive.allowunreachable", &remote_allow_unreachable);
|
||||
git_config(git_default_config, NULL);
|
||||
|
||||
@ -520,7 +516,7 @@ int write_archive(int argc, const char **argv, const char *prefix,
|
||||
init_zip_archiver();
|
||||
|
||||
argc = parse_archive_args(argc, argv, &ar, &args, name_hint, remote);
|
||||
if (nongit) {
|
||||
if (!startup_info->have_repository) {
|
||||
/*
|
||||
* We know this will die() with an error, so we could just
|
||||
* die ourselves; but its error message will be more specific
|
||||
|
@ -36,7 +36,7 @@ typedef int (*write_archive_entry_fn_t)(struct archiver_args *args,
|
||||
unsigned int mode);
|
||||
|
||||
extern int write_archive_entries(struct archiver_args *args, write_archive_entry_fn_t write_entry);
|
||||
extern int write_archive(int argc, const char **argv, const char *prefix, int setup_prefix, const char *name_hint, int remote);
|
||||
extern int write_archive(int argc, const char **argv, const char *prefix, const char *name_hint, int remote);
|
||||
|
||||
const char *archive_format_from_filename(const char *filename);
|
||||
extern void *sha1_file_to_archive(const struct archiver_args *args,
|
||||
|
@ -85,8 +85,8 @@ int cmd_archive(int argc, const char **argv, const char *prefix)
|
||||
const char *output = NULL;
|
||||
const char *remote = NULL;
|
||||
struct option local_opts[] = {
|
||||
OPT_STRING('o', "output", &output, N_("file"),
|
||||
N_("write the archive to this file")),
|
||||
OPT_FILENAME('o', "output", &output,
|
||||
N_("write the archive to this file")),
|
||||
OPT_STRING(0, "remote", &remote, N_("repo"),
|
||||
N_("retrieve the archive from remote repository <repo>")),
|
||||
OPT_STRING(0, "exec", &exec, N_("command"),
|
||||
@ -105,5 +105,5 @@ int cmd_archive(int argc, const char **argv, const char *prefix)
|
||||
|
||||
setvbuf(stderr, NULL, _IOLBF, BUFSIZ);
|
||||
|
||||
return write_archive(argc, argv, prefix, 1, output, 0);
|
||||
return write_archive(argc, argv, prefix, output, 0);
|
||||
}
|
||||
|
@ -11,15 +11,20 @@
|
||||
static const char mailinfo_usage[] =
|
||||
"git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] <msg> <patch> < mail >info";
|
||||
|
||||
static char *prefix_copy(const char *prefix, const char *filename)
|
||||
{
|
||||
if (!prefix || is_absolute_path(filename))
|
||||
return xstrdup(filename);
|
||||
return xstrdup(prefix_filename(prefix, strlen(prefix), filename));
|
||||
}
|
||||
|
||||
int cmd_mailinfo(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
const char *def_charset;
|
||||
struct mailinfo mi;
|
||||
int status;
|
||||
char *msgfile, *patchfile;
|
||||
|
||||
/* NEEDSWORK: might want to do the optional .git/ directory
|
||||
* discovery
|
||||
*/
|
||||
setup_mailinfo(&mi);
|
||||
|
||||
def_charset = get_commit_output_encoding();
|
||||
@ -54,8 +59,14 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix)
|
||||
|
||||
mi.input = stdin;
|
||||
mi.output = stdout;
|
||||
status = !!mailinfo(&mi, argv[1], argv[2]);
|
||||
|
||||
msgfile = prefix_copy(prefix, argv[1]);
|
||||
patchfile = prefix_copy(prefix, argv[2]);
|
||||
|
||||
status = !!mailinfo(&mi, msgfile, patchfile);
|
||||
clear_mailinfo(&mi);
|
||||
|
||||
free(msgfile);
|
||||
free(patchfile);
|
||||
return status;
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ int cmd_upload_archive_writer(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
|
||||
/* parse all options sent by the client */
|
||||
return write_archive(sent_argv.argc, sent_argv.argv, prefix, 0, NULL, 1);
|
||||
return write_archive(sent_argv.argc, sent_argv.argv, prefix, NULL, 1);
|
||||
}
|
||||
|
||||
__attribute__((format (printf, 1, 2)))
|
||||
|
4
git.c
4
git.c
@ -396,7 +396,7 @@ static struct cmd_struct commands[] = {
|
||||
{ "am", cmd_am, RUN_SETUP | NEED_WORK_TREE },
|
||||
{ "annotate", cmd_annotate, RUN_SETUP },
|
||||
{ "apply", cmd_apply, RUN_SETUP_GENTLY },
|
||||
{ "archive", cmd_archive },
|
||||
{ "archive", cmd_archive, RUN_SETUP_GENTLY },
|
||||
{ "bisect--helper", cmd_bisect__helper, RUN_SETUP },
|
||||
{ "blame", cmd_blame, RUN_SETUP },
|
||||
{ "branch", cmd_branch, RUN_SETUP },
|
||||
@ -445,7 +445,7 @@ static struct cmd_struct commands[] = {
|
||||
{ "ls-files", cmd_ls_files, RUN_SETUP | SUPPORT_SUPER_PREFIX },
|
||||
{ "ls-remote", cmd_ls_remote, RUN_SETUP_GENTLY },
|
||||
{ "ls-tree", cmd_ls_tree, RUN_SETUP },
|
||||
{ "mailinfo", cmd_mailinfo },
|
||||
{ "mailinfo", cmd_mailinfo, RUN_SETUP_GENTLY },
|
||||
{ "mailsplit", cmd_mailsplit },
|
||||
{ "merge", cmd_merge, RUN_SETUP | NEED_WORK_TREE },
|
||||
{ "merge-base", cmd_merge_base, RUN_SETUP },
|
||||
|
@ -94,6 +94,20 @@ check_tar() {
|
||||
'
|
||||
}
|
||||
|
||||
# run "$@" inside a non-git directory
|
||||
nongit () {
|
||||
test -d non-repo ||
|
||||
mkdir non-repo ||
|
||||
return 1
|
||||
|
||||
(
|
||||
GIT_CEILING_DIRECTORIES=$(pwd) &&
|
||||
export GIT_CEILING_DIRECTORIES &&
|
||||
cd non-repo &&
|
||||
"$@"
|
||||
)
|
||||
}
|
||||
|
||||
test_expect_success \
|
||||
'populate workdir' \
|
||||
'mkdir a &&
|
||||
@ -179,6 +193,15 @@ test_expect_success 'git archive --remote' \
|
||||
'git archive --remote=. HEAD >b5.tar &&
|
||||
test_cmp_bin b.tar b5.tar'
|
||||
|
||||
test_expect_success 'git archive --remote with configured remote' '
|
||||
git config remote.foo.url . &&
|
||||
(
|
||||
cd a &&
|
||||
git archive --remote=foo --output=../b5-nick.tar HEAD
|
||||
) &&
|
||||
test_cmp_bin b.tar b5-nick.tar
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'validate file modification time' \
|
||||
'mkdir extract &&
|
||||
@ -197,9 +220,15 @@ test_expect_success 'git archive with --output, override inferred format' '
|
||||
test_cmp_bin b.tar d4.zip
|
||||
'
|
||||
|
||||
test_expect_success \
|
||||
'git archive --list outside of a git repo' \
|
||||
'GIT_DIR=some/non-existing/directory git archive --list'
|
||||
test_expect_success 'git archive --list outside of a git repo' '
|
||||
nongit git archive --list
|
||||
'
|
||||
|
||||
test_expect_success 'git archive --remote outside of a git repo' '
|
||||
git archive HEAD >expect.tar &&
|
||||
nongit git archive --remote="$PWD" HEAD >actual.tar &&
|
||||
test_cmp_bin expect.tar actual.tar
|
||||
'
|
||||
|
||||
test_expect_success 'clients cannot access unreachable commits' '
|
||||
test_commit unreachable &&
|
||||
|
@ -158,4 +158,17 @@ test_expect_success 'mailinfo handles rfc2822 comment' '
|
||||
test_cmp "$DATA/comment.expect" comment/info
|
||||
'
|
||||
|
||||
test_expect_success 'mailinfo with mailinfo.scissors config' '
|
||||
test_config mailinfo.scissors true &&
|
||||
(
|
||||
mkdir sub &&
|
||||
cd sub &&
|
||||
git mailinfo ../msg0014.sc ../patch0014.sc <../0014 >../info0014.sc
|
||||
) &&
|
||||
test_cmp "$DATA/msg0014--scissors" msg0014.sc &&
|
||||
test_cmp "$DATA/patch0014--scissors" patch0014.sc &&
|
||||
test_cmp "$DATA/info0014--scissors" info0014.sc
|
||||
'
|
||||
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user