transport-helper: add 'force' to 'export' helpers
Otherwise they cannot know when to force the push or not (other than hacks). Tests-by: Richard Hansen <rhansen@bbn.com> Documentation-by: Richard Hansen <rhansen@bbn.com> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5a75353fe3
commit
510fa6f518
@ -437,6 +437,10 @@ set by Git if the remote helper has the 'option' capability.
|
|||||||
'option check-connectivity' \{'true'|'false'\}::
|
'option check-connectivity' \{'true'|'false'\}::
|
||||||
Request the helper to check connectivity of a clone.
|
Request the helper to check connectivity of a clone.
|
||||||
|
|
||||||
|
'option force' \{'true'|'false'\}::
|
||||||
|
Request the helper to perform a force update. Defaults to
|
||||||
|
'false'.
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
linkgit:git-remote[1]
|
linkgit:git-remote[1]
|
||||||
|
@ -15,6 +15,8 @@ test -z "$refspec" && prefix="refs"
|
|||||||
|
|
||||||
export GIT_DIR="$url/.git"
|
export GIT_DIR="$url/.git"
|
||||||
|
|
||||||
|
force=
|
||||||
|
|
||||||
mkdir -p "$dir"
|
mkdir -p "$dir"
|
||||||
|
|
||||||
if test -z "$GIT_REMOTE_TESTGIT_NO_MARKS"
|
if test -z "$GIT_REMOTE_TESTGIT_NO_MARKS"
|
||||||
@ -39,6 +41,7 @@ do
|
|||||||
fi
|
fi
|
||||||
test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
|
test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
|
||||||
test -n "$GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE" && echo "no-private-update"
|
test -n "$GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE" && echo "no-private-update"
|
||||||
|
echo 'option'
|
||||||
echo
|
echo
|
||||||
;;
|
;;
|
||||||
list)
|
list)
|
||||||
@ -93,6 +96,7 @@ do
|
|||||||
before=$(git for-each-ref --format=' %(refname) %(objectname) ')
|
before=$(git for-each-ref --format=' %(refname) %(objectname) ')
|
||||||
|
|
||||||
git fast-import \
|
git fast-import \
|
||||||
|
${force:+--force} \
|
||||||
${testgitmarks:+"--import-marks=$testgitmarks"} \
|
${testgitmarks:+"--import-marks=$testgitmarks"} \
|
||||||
${testgitmarks:+"--export-marks=$testgitmarks"} \
|
${testgitmarks:+"--export-marks=$testgitmarks"} \
|
||||||
--quiet
|
--quiet
|
||||||
@ -115,6 +119,20 @@ do
|
|||||||
|
|
||||||
echo
|
echo
|
||||||
;;
|
;;
|
||||||
|
option\ *)
|
||||||
|
read cmd opt val <<-EOF
|
||||||
|
$line
|
||||||
|
EOF
|
||||||
|
case $opt in
|
||||||
|
force)
|
||||||
|
test $val = "true" && force="true" || force=
|
||||||
|
echo "ok"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "unsupported"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
'')
|
'')
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
|
@ -94,6 +94,19 @@ test_expect_failure 'push new branch with old:new refspec' '
|
|||||||
compare_refs local HEAD server refs/heads/new-refspec
|
compare_refs local HEAD server refs/heads/new-refspec
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'forced push' '
|
||||||
|
(cd local &&
|
||||||
|
git checkout -b force-test &&
|
||||||
|
echo content >> file &&
|
||||||
|
git commit -a -m eight &&
|
||||||
|
git push origin force-test &&
|
||||||
|
echo content >> file &&
|
||||||
|
git commit -a --amend -m eight-modified &&
|
||||||
|
git push --force origin force-test
|
||||||
|
) &&
|
||||||
|
compare_refs local refs/heads/force-test server refs/heads/force-test
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'cloning without refspec' '
|
test_expect_success 'cloning without refspec' '
|
||||||
GIT_REMOTE_TESTGIT_REFSPEC="" \
|
GIT_REMOTE_TESTGIT_REFSPEC="" \
|
||||||
git clone "testgit::${PWD}/server" local2 2>error &&
|
git clone "testgit::${PWD}/server" local2 2>error &&
|
||||||
|
@ -854,6 +854,11 @@ static int push_refs_with_export(struct transport *transport,
|
|||||||
die("helper %s does not support dry-run", data->name);
|
die("helper %s does not support dry-run", data->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & TRANSPORT_PUSH_FORCE) {
|
||||||
|
if (set_helper_option(transport, "force", "true") != 0)
|
||||||
|
warning("helper %s does not support 'force'", data->name);
|
||||||
|
}
|
||||||
|
|
||||||
helper = get_helper(transport);
|
helper = get_helper(transport);
|
||||||
|
|
||||||
write_constant(helper->in, "export\n");
|
write_constant(helper->in, "export\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user