summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Kolotinskiy <stanislav@assembla.com>2016-03-31 16:55:09 +0300
committerJunio C Hamano <gitster@pobox.com>2016-03-31 14:58:26 -0700
commitc6777563cd2b3e1d1989732c3daf05a72fddb068 (patch)
tree28a0b6564a1bdc68ffa112714ea5bf4358c87e47
parent68c757f2199911005918aba45aa8ae0fecc72074 (diff)
downloadgit-sk/send-pack-all-fix.tar.gz
git-send-pack: fix --all option when used with directorysk/send-pack-all-fix
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/send-pack.c2
-rwxr-xr-xt/t5400-send-pack.sh12
2 files changed, 13 insertions, 1 deletions
diff --git a/builtin/send-pack.c b/builtin/send-pack.c
index f6e5d643c1..19f0577fa0 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 04cea97f87..305ca7a930 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 &&
(