Re: [PATCH v4] git-send-pack: fix --all option when used with directory
stanislav@assembla.com writes:
Show 19 quoted lines
> From: Stanislav Kolotinskiy <stanislav@assembla.com>
>
> When using git send-pack with --all option
> and a target repository specification ([<host>:]<directory>),
> usage message is being displayed instead of performing
> the actual transmission.
>
> The reason for this issue is that destination and refspecs are being set
> in the same conditional and are populated from argv. When a target
> repository is passed, refspecs is being populated as well with its value.
> This makes the check for refspecs not being NULL to always return true,
> which, in conjunction with the check for --all or --mirror options,
> is always true as well and returns usage message instead of proceeding.
>
> This ensures that send-pack will stop execution only when --all
> or --mirror switch is used in conjunction with any refspecs passed.
>
> Signed-off-by: Stanislav Kolotinskiy <stanislav@assembla.com>
> ---
Show 42 quoted lines
> builtin/send-pack.c | 2 +-
> t/t5400-send-pack.sh | 12 ++++++++++++
> 2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/send-pack.c b/builtin/send-pack.c
> index f6e5d64..19f0577 100644
> --- a/builtin/send-pack.c
> +++ b/builtin/send-pack.c
> @@ -225,7 +225,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
> * --all and --mirror are incompatible; neither makes sense
> * with any refspecs.
> */
> - if ((refspecs && (send_all || args.send_mirror)) ||
> + if ((nr_refspecs > 0 && (send_all || args.send_mirror)) ||
> (send_all && args.send_mirror))
> usage_with_options(send_pack_usage, options);
>
> diff --git a/t/t5400-send-pack.sh b/t/t5400-send-pack.sh
> index 04cea97..305ca7a 100755
> --- a/t/t5400-send-pack.sh
> +++ b/t/t5400-send-pack.sh
> @@ -128,6 +128,18 @@ test_expect_success 'denyNonFastforwards trumps --force' '
> test "$victim_orig" = "$victim_head"
> '
>
> +test_expect_success 'send-pack --all sends all branches' '
> + # make sure we have at least 2 branches with different
> + # values, just to be thorough
> + git branch other-branch HEAD^ &&
> +
> + git init --bare all.git &&
> + git send-pack --all all.git &&
> + git for-each-ref refs/heads >expect &&
> + git -C all.git for-each-ref refs/heads >actual &&
> + test_cmp expect actual
> +'
> +
> test_expect_success 'push --all excludes remote-tracking hierarchy' '
> mkdir parent &&
> (
> --
> 2.8.0