{"thread":{"id":"17263","subject":"[PATCH] contrib: add 'git bpush' to push to bundles","startedAt":"2009-01-19T23:46:31Z","lastAt":"2009-01-29T16:05:53Z","messageCount":3,"participants":["Santi Béjar","Mike Hommey"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"101188","messageId":"1232408791-16834-1-git-send-email-santi@agolina.net","threadId":"17263","inReplyTo":null,"subject":"[PATCH] contrib: add 'git bpush' to push to bundles","fromName":"Santi Béjar","fromEmail":"santi@agolina.net","sentAt":"2009-01-19T23:46:31Z","receivedAt":"2009-01-19T23:46:31Z","isPatch":true,"sender":{"key":"santi@agolina.net","avatar":null},"body":"'git bpush' updates the branches in a bundle, while adding the objects\nnecessary to complete the given branches. Basically, it is a 'git push'\nfor bundles.\n\nSigned-off-by: Santi Béjar <santi@agolina.net>\n---\n contrib/bpush/git-bpush            |  195 ++++++++++++++++++++++++++++++++++++\n contrib/bpush/git-bpush.txt        |   68 +++++++++++++\n contrib/bpush/t5519-bundle-push.sh |  193 +++++++++++++++++++++++++++++++++++\n contrib/bpush/t5519/expect.10      |    4 +\n contrib/bpush/t5519/expect.11      |    4 +\n contrib/bpush/t5519/expect.12      |    7 ++\n contrib/bpush/t5519/expect.13      |    4 +\n contrib/bpush/t5519/expect.14      |    4 +\n contrib/bpush/t5519/expect.15      |    4 +\n contrib/bpush/t5519/expect.16      |    4 +\n contrib/bpush/t5519/expect.17      |    5 +\n contrib/bpush/t5519/expect.18      |    6 +\n contrib/bpush/t5519/expect.19      |    6 +\n contrib/bpush/t5519/expect.2       |    4 +\n contrib/bpush/t5519/expect.3       |    3 +\n contrib/bpush/t5519/expect.4       |    4 +\n contrib/bpush/t5519/expect.5       |    5 +\n contrib/bpush/t5519/expect.6       |    5 +\n contrib/bpush/t5519/expect.7       |    5 +\n contrib/bpush/t5519/expect.8       |    5 +\n contrib/bpush/t5519/expect.9       |    4 +\n 21 files changed, 539 insertions(+), 0 deletions(-)\n create mode 100755 contrib/bpush/git-bpush\n create mode 100644 contrib/bpush/git-bpush.txt\n create mode 100755 contrib/bpush/t5519-bundle-push.sh\n create mode 100644 contrib/bpush/t5519/expect.10\n create mode 100644 contrib/bpush/t5519/expect.11\n create mode 100644 contrib/bpush/t5519/expect.12\n create mode 100644 contrib/bpush/t5519/expect.13\n create mode 100644 contrib/bpush/t5519/expect.14\n create mode 100644 contrib/bpush/t5519/expect.15\n create mode 100644 contrib/bpush/t5519/expect.16\n create mode 100644 contrib/bpush/t5519/expect.17\n create mode 100644 contrib/bpush/t5519/expect.18\n create mode 100644 contrib/bpush/t5519/expect.19\n create mode 100644 contrib/bpush/t5519/expect.2\n create mode 100644 contrib/bpush/t5519/expect.3\n create mode 100644 contrib/bpush/t5519/expect.4\n create mode 100644 contrib/bpush/t5519/expect.5\n create mode 100644 contrib/bpush/t5519/expect.6\n create mode 100644 contrib/bpush/t5519/expect.7\n create mode 100644 contrib/bpush/t5519/expect.8\n create mode 100644 contrib/bpush/t5519/expect.9\n\ndiff --git a/contrib/bpush/git-bpush b/contrib/bpush/git-bpush\nnew file mode 100755\nindex 0000000..a004c42\n--- /dev/null\n+++ b/contrib/bpush/git-bpush\n@@ -0,0 +1,195 @@\n+#!/bin/sh\n+\n+OPTIONS_KEEPDASHDASH=\n+OPTIONS_SPEC=\"\\\n+git bpush [options] [<remote> [<refs>...]]\n+--\n+f,force   force updates\n+full      create a full bundle\n+v         be verbose\n+\"\n+SUBDIRECTORY_OK=Yes\n+. git-sh-setup\n+. git-parse-remote\n+\n+cd_to_toplevel\n+\n+LF='\n+'\n+IFS=\"$LF\"\n+\n+bases=\n+bbases=\n+changed=\n+force=\n+nonff=\n+remote=\n+refs=\n+while :\n+do\n+\tcase \"$1\" in\n+\t-v)\n+\t\tverbose=t ;;\n+\t--full)\n+\t\tfull=t ;;\n+\t-f|--force)\n+\t\tforce=t ;;\n+\t--)\n+\t\tshift\n+\t\tbreak ;;\n+\t*)\n+\t\tusage ;;\n+\tesac\n+\tshift\n+done\n+\n+test -n \"$1\" && remote=$1 && shift\n+refs=\"$*\"\n+\n+test -z \"$remote\" && remote=$(get_default_remote)\n+remoteurl=$(git config remote.${remote}.url)\n+test -z \"$remoteurl\" && remoteurl=$remote\n+test -d \"$remoteurl\" && die \"$remoteurl is a directory\"\n+\n+# Default bases in bundle.base\n+# Default {refs,base} can be specified in remote.<remote>.{push,bundlebase}\n+if test \"$remote\" != \"$remoteurl\"\n+then\n+\ttest -z \"$refs\" &&\n+\trefs=$(git config --get-all remote.${remote}.push)\n+\tbases=$(git config --get-all remote.${remote}.bundlebase ||\n+\t\tgit config --get-all bundle.base)\n+else\n+\tbases=$(git config --get-all bundle.base)\n+fi\n+\n+# git rev-parse --symbolic-full-name resolves symlinks\n+# Keep at least HEAD\n+head=\n+for ref in $refs ; do\n+\ttest \"$ref\" = HEAD && head=t && break\n+done\n+\n+test -n \"$bases\" && bases=$(git rev-parse --revs-only $bases | sort -u)\n+\n+# Full symbolic refs need to be uniq\n+test -n \"$refs\" &&\n+refs=$(git-rev-parse --symbolic-full-name --revs-only $refs | sort -u)\n+\n+test -n \"$head\" && refs=\"HEAD$LF$refs\"\n+\n+if test -e \"$remoteurl\"\n+then\n+\tblines=$(git bundle verify \"$remoteurl\" 2>/dev/null) ||\n+\tdie \"Verification of \\\"$remoteurl\\\" failed\"\n+\t# Find the bundle's bases\n+\trefs=\"$refs$LF$(git bundle list-heads $remoteurl | cut -d \" \" -f 2)\"\n+\trequires=\n+\tfor line in $blines\n+\tdo\n+\t\tcase \"$requires,$line\" in\n+\t\t\",The bundle requires\"*)\n+\t\t\trequires=t ;;\n+\t\tt,) ;;\n+\t\tt,*)\n+\t\t\tbbase=$(echo $line | cut -d \" \" -f 1)\n+\t\t\tbbases=\"$bbases$LF$bbase\"\n+\t\t\t;;\n+\t\tesac\n+\tdone\n+\tbases=\"$bases$LF$bbases\"\n+elif test -z \"$refs\" ; then\n+\t# Push current branch\n+\trefs=\"HEAD$LF$(git symbolic-ref -q HEAD)\"\n+fi\n+\n+test -z \"$refs\" && die \"No refs to push\"\n+\n+refs=$(echo \"$refs\" | sort -u)\n+\n+for ref in $bases $refs\n+do\n+\ttest \"$(git cat-file -t $ref^{})\" != commit &&\n+\tdie \"$(basename $0): $ref is not a commit\"\n+done\n+\n+header=\"To $remoteurl\"\n+test -n \"$verbose\" && echo \"Pushing to $remoteurl\" && echo $header && header=\n+\n+# Find what is/is not a fast-forward, up to date or new\n+# As \"git bundle\" does not support refspecs we must push all matching branches\n+for ref in $refs ; do\n+\ttext=\n+\tbchanged=\n+\tcase $ref in\n+\trefs/tags/*)\n+\t\tbshort=$(echo $ref | sed -e \"s|^refs/tags/||\")\n+\t\tnewtext=\"new tag\";;\n+\trefs/heads/*|HEAD)\n+\t\tbshort=$(echo $ref | sed -e \"s|^refs/heads/||\")\n+\t\tnewtext=\"new branch\" ;;\n+\tesac\n+\tnewhash=$(git rev-parse $ref) || die \"Ref $ref not valid\"\n+\tnewshort=$(git rev-parse --short $ref)\n+\tbheads=\n+\ttest -e \"$remoteurl\" && bheads=\"$(git bundle list-heads $remoteurl)\"\n+\tfor bhead in $bheads\n+\tdo\n+\t\tbhash=$(echo $bhead | cut -d \" \" -f 1)\n+\t\tbref=$(echo $bhead | cut -d \" \" -f 2)\n+\t\t# Find the matching ref in the bundle\n+\t\ttest \"$bref\" != \"$ref\" && continue\n+\t\toldshort=$(git rev-parse --short $bhash)\n+\t\tmergebase=\n+\t\tcase $ref in\n+\t\trefs/tags/*)\n+\t\t\t# Only test if it is different\n+\t\t\tmergebase=$newhash;;\n+\t\trefs/heads/*|HEAD)\n+\t\t\tmergebase=$(git merge-base $bref $bhash);;\n+\t\tesac\n+\t\tcase $newhash,$bhash,$mergebase,$force in\n+\t\t$bhash,$newhash,*)\n+\t\t\t# No changes\n+\t\t\ttext=\" = [up to date] $bshort -> $bshort\"\n+\t\t\t;;\n+\t\t*,*,$bhash,*)\n+\t\t\t# Fast-forward\n+\t\t\tbchanged=t\n+\t\t\ttext=\"   $oldshort..$newshort $bshort -> $bshort\"\n+\t\t\t;;\n+\t\t*,t)\n+\t\t\t# Forced non fast-forward\n+\t\t\tbchanged=t\n+\t\t\ttext=\" + $oldshort...$newshort $bshort -> $bshort (forced update)\"\n+\t\t\t;;\n+\t\t*)\n+\t\t\tbchanged=t\n+\t\t\tnonff=t\n+\t\t\ttext=\" ! [rejected] $bshort -> $bshort (non-fast forward)\"\n+\t\tesac\n+\t\tbreak\n+\tdone\n+\ttest -z \"$text\" && text=\" * [$newtext] $bshort -> $bshort\" && bchanged=t\n+\tif test -n \"$bchanged\" || test -n \"$verbose\"\n+\tthen\n+\t\ttest -n \"$header\" && echo $header && header=\n+\t\techo $text\n+\tfi\n+\ttest -n \"$bchanged\" && changed=t\n+done\n+\n+# Recreate the bundle if --full and the current bundle is not full\n+test -n \"$full\" && bases= && test -n \"$bbases\" && changed=t\n+\n+test -n \"$nonff\" && die \"error: failed to push some refs to $remoteurl\"\n+test -z \"$changed\" && die \"Everything up-to-date\"\n+test -n \"$bases\" && bases=\"--not$LF$bases\"\n+\n+git bundle create $remoteurl $refs $bases ||\n+die \"Cannot create bundle \\\"$remoteurl\\\"\"\n+\n+test \"$remote\" != \"$remoteurl\" && { git fetch -q \"$remote\" ||\n+\tdie \"Error fetch from bundle \\\"$remoteurl\\\"\" ; }\n+\n+exit 0\ndiff --git a/contrib/bpush/git-bpush.txt b/contrib/bpush/git-bpush.txt\nnew file mode 100644\nindex 0000000..a045c91\n--- /dev/null\n+++ b/contrib/bpush/git-bpush.txt\n@@ -0,0 +1,68 @@\n+git-bpush(1)\n+============\n+\n+NAME\n+----\n+git-bpush - Update bundles along with associated objects\n+\n+SYNOPSIS\n+--------\n+[verse]\n+'git bpush' [--full] [--force] [<bundle> <refs>...]\n+\n+DESCRIPTION\n+-----------\n+\n+'git bpush' updates the branches in a bundle, while adding the objects\n+necessary to complete the given branches. Basically, it is a 'git push'\n+for bundles.\n+\n+By default, if the bundle does not exist a full bundle is create with the\n+current branch, and if it does exist it updates all the branches in it\n+appending all the needed objects.\n+\n+OPTIONS\n+-------\n+<bundle>::\n+\tEqual to the <repository> parameter of 'git push' but pointing\n+\tto a local path.\n+\n+<refs>::\n+\tA list of branches to push\n+\n+--full::\n+\tCreate a bundle with all the needed object even if the existing\n+\tbundle is not full.\n+\n+--force::\n+\tEquivalent to the '--force' flag to 'git push'.\n+\n+CONFIG VARIABLES\n+----------------\n+branch.<name>.remote::\n+remote.<name>.url::\n+remote.<name>.push::\n+\tWith the same meaning but the URL should be a local path and the\n+\t'push' config should list only branches, not refspecs.\n+\n+remote.<name>.bundlebase::\n+bundle.base::\n+\tDefault base to create a new bundle (per remote or global).\n+\n+SEE ALSO\n+--------\n+linkgit:git-diff[1]\n+\n+linkgit:git-config[1]\n+\n+AUTHOR\n+------\n+Written by Santi Béjar <santi@agolina.net>.\n+\n+Documentation\n+--------------\n+Documentation by Santi Béjar.\n+\n+GIT\n+---\n+Part of the contrib section of the linkgit:git[1] suite\ndiff --git a/contrib/bpush/t5519-bundle-push.sh b/contrib/bpush/t5519-bundle-push.sh\nnew file mode 100755\nindex 0000000..464f32f\n--- /dev/null\n+++ b/contrib/bpush/t5519-bundle-push.sh\n@@ -0,0 +1,193 @@\n+#!/bin/sh\n+\n+test_description='Bundle pushing'\n+\n+. ./test-lib.sh\n+\n+other=\n+\n+mk_test () {\n+\tnum=$(( $num + 1 )) &&\n+\tactual=actual.$num &&\n+\texpect=\"$TEST_DIRECTORY\"/t5519/expect.$num &&\n+\texpect_other=\"$TEST_DIRECTORY\"/t5519/expect.$other &&\n+\tgit bundle verify b.bundle > \"$actual\" &&\n+\tif test -f \"$expect\"\n+\tthen\n+\t\tif [ -n \"$other\" ] ; then\n+\t\t\ttest_cmp \"$expect_other\" \"$actual\"\n+\t\telse\n+\t\t\ttrue\n+\t\tfi &&\n+\t\ttest_cmp \"$expect\" \"$actual\" &&\n+\t\trm -f \"$actual\"\n+\telse\n+\t\t# this is to help developing new tests.\n+\t\tcp \"$actual\" \"$expect\"\n+\t\tfalse\n+\tfi\n+}\n+\n+test_expect_success setup '\n+\n+\t: >path1 &&\n+\tgit add path1 &&\n+\ttest_tick &&\n+\tgit commit -a -m repo &&\n+\tthe_first_commit=$(git show-ref -s --verify refs/heads/master) &&\n+\tgit branch b1 &&\n+\tgit tag t1 &&\n+\n+\t: >path2 &&\n+\tgit add path2 &&\n+\ttest_tick &&\n+\tgit commit -a -m second &&\n+\tthe_second_commit=$(git show-ref -s --verify refs/heads/master) &&\n+\tgit branch b2 &&\n+\tgit tag t2 &&\n+\n+\t: >path3 &&\n+\tgit add path3 &&\n+\ttest_tick &&\n+\tgit commit -a -m third &&\n+\tthe_third_commit=$(git show-ref -s --verify refs/heads/master) &&\n+\tgit branch b3 &&\n+\tgit tag t3 &&\n+\n+\tgit reset --hard b2 &&\n+\t: >path4 &&\n+\tgit add path4 &&\n+\ttest_tick &&\n+\tgit commit -a -m fourth &&\n+\tthe_fourth_commit=$(git show-ref -s --verify refs/heads/master) &&\n+\tgit branch b4 &&\n+\tgit tag t4 &&\n+\n+\tnum=1\n+'\n+\n+test_expect_success 'full bundle' '\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+\n+test_expect_success 'full bundle with 1 branch' '\n+\trm b.bundle &&\n+\tgit bpush b.bundle b2 &&\n+\tmk_test\n+'\n+\n+test_expect_success 'full bundle with 2 branches' '\n+\trm b.bundle &&\n+\tgit bpush b.bundle b2 master &&\n+\tmk_test\n+'\n+\n+test_expect_success 'bundle with 1 commit as base' '\n+\trm b.bundle &&\n+\tgit config bundle.base $the_first_commit\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+\n+test_expect_success 'bundle with 1 branch as base' '\n+\trm b.bundle &&\n+\tother=$num &&\n+\tgit config bundle.base b1\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+test_expect_success 'bundle with 1 tag as base' '\n+\trm b.bundle &&\n+\tgit config bundle.base t1\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+\n+test_expect_success 'bundle with 1 sha1 expression as base' '\n+\trm b.bundle &&\n+\tgit config bundle.base t2^\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+\n+test_expect_success 'Force a full bundle' '\n+\tgit bpush --full b.bundle &&\n+\tother=2 &&\n+\tmk_test\n+\n+'\n+unset other\n+git config --unset bundle.base\n+\n+test_expect_success 'updating bundle: initial' '\n+\trm b.bundle &&\n+\tgit reset --hard b1 &&\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+\n+test_expect_success 'updating bundle: update' '\n+\tgit reset --hard b2 &&\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+\n+test_expect_success 'updating bundle with extra branches' '\n+\tgit bpush b.bundle b2 b3 b4 &&\n+\tmk_test\n+'\n+\n+test_expect_success 'Deny non fast forward: initial' '\n+\trm b.bundle &&\n+\tgit reset --hard b3 &&\n+\tgit bpush b.bundle &&\n+\tmk_test\n+'\n+\n+test_expect_success 'Deny non fast-fordard: denied' '\n+\tgit reset --hard b4 &&\n+\ttest_must_fail git bpush b.bundle &&\n+\tother=$num &&\n+\tmk_test\n+'\n+\n+test_expect_success 'Deny non fast-fordard: force' '\n+\tgit bpush --force b.bundle &&\n+\tother=2\n+\tmk_test\n+'\n+\n+git config remote.b.url b.bundle\n+\n+test_expect_success 'pushing to a <remote>' '\n+\trm b.bundle &&\n+\tgit bpush b &&\n+\tother=2\n+\tmk_test\n+'\n+\n+unset other\n+\n+test_expect_success 'remote with remote.<remote>.push' '\n+\tgit config remote.b.push b4 &&\n+\tgit bpush b &&\n+\tmk_test\n+'\n+\n+test_expect_success 'remote with multiple remote.<remote>.push' '\n+\tgit config --add remote.b.push b3 &&\n+\tgit bpush b &&\n+\tmk_test\n+'\n+\n+test_expect_success 'cancel bases in remote.<remote>.bundlebase' '\n+\trm b.bundle &&\n+\tgit config --add remote.b.push HEAD &&\n+\tgit config remote.b.bundlebase \"\" &&\n+\tgit config bundle.base t1 &&\n+\tgit bpush b &&\n+\tmk_test\n+'\n+\n+test_done\ndiff --git a/contrib/bpush/t5519/expect.10 b/contrib/bpush/t5519/expect.10\nnew file mode 100644\nindex 0000000..f16f35f\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.10\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+b9c09d6cc74d3857142fb7c082dca65b88254c6d HEAD\n+b9c09d6cc74d3857142fb7c082dca65b88254c6d refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.11 b/contrib/bpush/t5519/expect.11\nnew file mode 100644\nindex 0000000..23b288f\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.11\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f HEAD\n+9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.12 b/contrib/bpush/t5519/expect.12\nnew file mode 100644\nindex 0000000..583c759\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.12\n@@ -0,0 +1,7 @@\n+The bundle contains 5 refs\n+9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f HEAD\n+9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f refs/heads/b2\n+0c61b881205ba69f6b78d3fdd45db054d236eea8 refs/heads/b3\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/b4\n+9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.13 b/contrib/bpush/t5519/expect.13\nnew file mode 100644\nindex 0000000..fb1c2a7\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.13\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+0c61b881205ba69f6b78d3fdd45db054d236eea8 HEAD\n+0c61b881205ba69f6b78d3fdd45db054d236eea8 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.14 b/contrib/bpush/t5519/expect.14\nnew file mode 100644\nindex 0000000..fb1c2a7\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.14\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+0c61b881205ba69f6b78d3fdd45db054d236eea8 HEAD\n+0c61b881205ba69f6b78d3fdd45db054d236eea8 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.15 b/contrib/bpush/t5519/expect.15\nnew file mode 100644\nindex 0000000..9047296\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.15\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.16 b/contrib/bpush/t5519/expect.16\nnew file mode 100644\nindex 0000000..9047296\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.16\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.17 b/contrib/bpush/t5519/expect.17\nnew file mode 100644\nindex 0000000..14c8713\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.17\n@@ -0,0 +1,5 @@\n+The bundle contains 3 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/b4\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.18 b/contrib/bpush/t5519/expect.18\nnew file mode 100644\nindex 0000000..dd8682b\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.18\n@@ -0,0 +1,6 @@\n+The bundle contains 4 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+0c61b881205ba69f6b78d3fdd45db054d236eea8 refs/heads/b3\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/b4\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.19 b/contrib/bpush/t5519/expect.19\nnew file mode 100644\nindex 0000000..dd8682b\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.19\n@@ -0,0 +1,6 @@\n+The bundle contains 4 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+0c61b881205ba69f6b78d3fdd45db054d236eea8 refs/heads/b3\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/b4\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.2 b/contrib/bpush/t5519/expect.2\nnew file mode 100644\nindex 0000000..9047296\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.2\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.3 b/contrib/bpush/t5519/expect.3\nnew file mode 100644\nindex 0000000..3b476c7\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.3\n@@ -0,0 +1,3 @@\n+The bundle contains 1 ref\n+9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f refs/heads/b2\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.4 b/contrib/bpush/t5519/expect.4\nnew file mode 100644\nindex 0000000..59c144c\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.4\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+9ad36e1e54b2130a20d55abb4f0f3ca8494ead3f refs/heads/b2\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\ndiff --git a/contrib/bpush/t5519/expect.5 b/contrib/bpush/t5519/expect.5\nnew file mode 100644\nindex 0000000..ba77351\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.5\n@@ -0,0 +1,5 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 1 ref\n+b9c09d6cc74d3857142fb7c082dca65b88254c6d repo\ndiff --git a/contrib/bpush/t5519/expect.6 b/contrib/bpush/t5519/expect.6\nnew file mode 100644\nindex 0000000..ba77351\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.6\n@@ -0,0 +1,5 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 1 ref\n+b9c09d6cc74d3857142fb7c082dca65b88254c6d repo\ndiff --git a/contrib/bpush/t5519/expect.7 b/contrib/bpush/t5519/expect.7\nnew file mode 100644\nindex 0000000..ba77351\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.7\n@@ -0,0 +1,5 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 1 ref\n+b9c09d6cc74d3857142fb7c082dca65b88254c6d repo\ndiff --git a/contrib/bpush/t5519/expect.8 b/contrib/bpush/t5519/expect.8\nnew file mode 100644\nindex 0000000..ba77351\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.8\n@@ -0,0 +1,5 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 1 ref\n+b9c09d6cc74d3857142fb7c082dca65b88254c6d repo\ndiff --git a/contrib/bpush/t5519/expect.9 b/contrib/bpush/t5519/expect.9\nnew file mode 100644\nindex 0000000..9047296\n--- /dev/null\n+++ b/contrib/bpush/t5519/expect.9\n@@ -0,0 +1,4 @@\n+The bundle contains 2 refs\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 HEAD\n+2d4a0f4bd0a1c33802f2f3417f5a999dff37f9d7 refs/heads/master\n+The bundle requires these 0 ref\n-- \n1.6.1.258.g7ff14\n"},{"id":"101220","messageId":"20090120064732.GA14580@glandium.org","threadId":"17263","inReplyTo":"1232408791-16834-1-git-send-email-santi@agolina.net","subject":"Re: [PATCH] contrib: add 'git bpush' to push to bundles","fromName":"Mike Hommey","fromEmail":"mh@glandium.org","sentAt":"2009-01-20T06:47:32Z","receivedAt":"2009-01-20T06:47:32Z","isPatch":true,"sender":{"key":"mh@glandium.org","avatar":"https://avatars.githubusercontent.com/u/1038527?v=4"},"body":"On Tue, Jan 20, 2009 at 12:46:31AM +0100, Santi Béjar wrote:\n> 'git bpush' updates the branches in a bundle, while adding the objects\n> necessary to complete the given branches. Basically, it is a 'git\n> push' for bundles.\n\nI think it'd be better to improve git-push to support that, instead of\nadding yet another git command.\n\nMike\n"},{"id":"102472","messageId":"adf1fd3d0901290805s64161899u72905a31dfec2fc6@mail.gmail.com","threadId":"17263","inReplyTo":"20090120064732.GA14580@glandium.org","subject":"Re: [PATCH] contrib: add 'git bpush' to push to bundles","fromName":"Santi Béjar","fromEmail":"santi@agolina.net","sentAt":"2009-01-29T16:05:53Z","receivedAt":"2009-01-29T16:05:53Z","isPatch":true,"sender":{"key":"santi@agolina.net","avatar":null},"body":"2009/1/20 Mike Hommey <mh@glandium.org>:\n> On Tue, Jan 20, 2009 at 12:46:31AM +0100, Santi Béjar wrote:\n>> 'git bpush' updates the branches in a bundle, while adding the objects\n>> necessary to complete the given branches. Basically, it is a 'git\n>> push' for bundles.\n>\n> I think it'd be better to improve git-push to support that, instead of\n> adding yet another git command.\n\nYes, I also think it'd be better if git-push supports it, but this is\nnot a trivial task, and my script works now. So I think it makes sense\nto add it to the *contrib* directory.\n\nSanti\n"}]}