All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bert Wesarg <bert.wesarg@googlemail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Denton Liu" <liu.denton@gmail.com>,
	"SZEDER Gábor" <szeder.dev@gmail.com>,
	"Git Mailing List" <git@vger.kernel.org>
Subject: Re: [PATCH v5 1/2] format-patch: create leading components of output directory
Date: Mon, 21 Oct 2019 15:20:39 +0200	[thread overview]
Message-ID: <CAKPyHN3QQuX4Z8-sySU3DbQYj1mfTqGjzgX8RFw_H6UFA07ohw@mail.gmail.com> (raw)
In-Reply-To: <ac3cc3df4452355dc41c58fe94961c37ca09ebec.1571653441.git.bert.wesarg@googlemail.com>

Please ignore this. Will rebase on 2.24-rc0 and will only include the
test changes.

Bert

On Mon, Oct 21, 2019 at 12:25 PM Bert Wesarg <bert.wesarg@googlemail.com> wrote:
>
> 'git format-patch -o <outdir>' did an equivalent of 'mkdir <outdir>'
> not 'mkdir -p <outdir>', which is being corrected.
>
> Avoid the usage of 'adjust_shared_perm' on the leading directories which
> may have security implications. Achieved by temporarily disabling of
> 'config.sharedRepository' like 'git init' does.
>
> Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
>
> ---
> Changes in v2:
>  * squashed and base new tests on 'dl/format-patch-doc-test-cleanup'
>
> Changes in v3:
>  * avoid applying adjust_shared_perm
>
> Changes in v4:
>  * based on dl/format-patch-doc-test-cleanup and adopt it
>
> Changes in v5:
>  * make tests self-contained
>
> Cc: Denton Liu <liu.denton@gmail.com>
> Cc: Junio C Hamano <gitster@pobox.com>
> Cc: SZEDER Gábor <szeder.dev@gmail.com>
> ---
>  Documentation/config/format.txt    |  2 +-
>  Documentation/git-format-patch.txt |  3 ++-
>  builtin/log.c                      | 16 ++++++++++++++++
>  t/t4014-format-patch.sh            | 26 ++++++++++++++++++++++++++
>  4 files changed, 45 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/config/format.txt b/Documentation/config/format.txt
> index cb629fa769..40cad9278f 100644
> --- a/Documentation/config/format.txt
> +++ b/Documentation/config/format.txt
> @@ -81,7 +81,7 @@ format.coverLetter::
>
>  format.outputDirectory::
>         Set a custom directory to store the resulting files instead of the
> -       current working directory.
> +       current working directory. All directory components will be created.
>
>  format.useAutoBase::
>         A boolean value which lets you enable the `--base=auto` option of
> diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
> index 0ac56f4b70..2035d4d5d5 100644
> --- a/Documentation/git-format-patch.txt
> +++ b/Documentation/git-format-patch.txt
> @@ -66,7 +66,8 @@ they are created in the current working directory. The default path
>  can be set with the `format.outputDirectory` configuration option.
>  The `-o` option takes precedence over `format.outputDirectory`.
>  To store patches in the current working directory even when
> -`format.outputDirectory` points elsewhere, use `-o .`.
> +`format.outputDirectory` points elsewhere, use `-o .`. All directory
> +components will be created.
>
>  By default, the subject of a single patch is "[PATCH] " followed by
>  the concatenation of lines from the commit message up to the first blank
> diff --git a/builtin/log.c b/builtin/log.c
> index 44b10b3415..8d08632858 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -1765,10 +1765,26 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
>                 setup_pager();
>
>         if (output_directory) {
> +               int saved;
>                 if (rev.diffopt.use_color != GIT_COLOR_ALWAYS)
>                         rev.diffopt.use_color = GIT_COLOR_NEVER;
>                 if (use_stdout)
>                         die(_("standard output, or directory, which one?"));
> +               /*
> +                * We consider <outdir> as 'outside of gitdir', therefore avoid
> +                * applying adjust_shared_perm in s-c-l-d.
> +                */
> +               saved = get_shared_repository();
> +               set_shared_repository(0);
> +               switch (safe_create_leading_directories_const(output_directory)) {
> +               case SCLD_OK:
> +               case SCLD_EXISTS:
> +                       break;
> +               default:
> +                       die(_("could not create leading directories "
> +                             "of '%s'"), output_directory);
> +               }
> +               set_shared_repository(saved);
>                 if (mkdir(output_directory, 0777) < 0 && errno != EEXIST)
>                         die_errno(_("could not create directory '%s'"),
>                                   output_directory);
> diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
> index 72b09896cf..3aab25da76 100755
> --- a/t/t4014-format-patch.sh
> +++ b/t/t4014-format-patch.sh
> @@ -1606,6 +1606,32 @@ test_expect_success 'From line has expected format' '
>         test_cmp from filtered
>  '
>
> +test_expect_success 'format-patch -o with no leading directories' '
> +       rm -fr patches &&
> +       git format-patch -o patches master..side &&
> +       count=$(git rev-list --count master..side) &&
> +       ls patches >list &&
> +       test_line_count = $count list
> +'
> +
> +test_expect_success 'format-patch -o with leading existing directories' '
> +       rm -rf existing-dir &&
> +       mkdir existing-dir &&
> +       git format-patch -o existing-dir/patches master..side &&
> +       count=$(git rev-list --count master..side) &&
> +       ls existing-dir/patches >list &&
> +       test_line_count = $count list
> +'
> +
> +test_expect_success 'format-patch -o with leading non-existing directories' '
> +       rm -rf non-existing-dir &&
> +       git format-patch -o non-existing-dir/patches master..side &&
> +       count=$(git rev-list --count master..side) &&
> +       test_path_is_dir non-existing-dir
> +       ls non-existing-dir/patches >list &&
> +       test_line_count = $count list
> +'
> +
>  test_expect_success 'format-patch format.outputDirectory option' '
>         test_config format.outputDirectory patches &&
>         rm -fr patches &&
> --
> 2.23.0.13.g28bc381d7c
>

  parent reply	other threads:[~2019-10-21 13:20 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <30278644805925935d05ae877c4b14843e37e40c.1570469582.git.bert.wesarg@googlemail.com>
2019-10-11  8:36 ` [PATCH v4 1/2] format-patch: create leading components of output directory Bert Wesarg
2019-10-11  8:36   ` [PATCH v4 2/2] format-patch: configure a command to generate the output directory name Bert Wesarg
2019-10-11 14:46   ` [PATCH v4 1/2] format-patch: create leading components of output directory SZEDER Gábor
2019-10-11 15:45     ` Bert Wesarg
2019-10-11 15:47       ` Bert Wesarg
2019-10-11 16:17         ` SZEDER Gábor
2019-10-21 10:25 ` [PATCH v5 " Bert Wesarg
2019-10-21 10:25   ` [PATCH v5 2/2] format-patch: configure a command to generate the output directory name Bert Wesarg
2019-10-21 13:20   ` Bert Wesarg [this message]
2019-10-23  2:08     ` [PATCH v5 1/2] format-patch: create leading components of output directory Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAKPyHN3QQuX4Z8-sySU3DbQYj1mfTqGjzgX8RFw_H6UFA07ohw@mail.gmail.com \
    --to=bert.wesarg@googlemail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=liu.denton@gmail.com \
    --cc=szeder.dev@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.