mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
transport-helper: add no-private-update capability
Since 664059fb
(transport-helper: update remote helper namespace,
2013-04-17), a 'push' operation on a remote helper updates the
private ref by default. This is often a good thing, but it can also
be desirable to disable this update to force the next 'pull' to
re-import the pushed revisions.
Allow remote-helpers to disable the automatic update by introducing a new
capability.
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8987cda9e1
commit
597b831afb
@ -120,6 +120,11 @@ connecting (see the 'connect' command under COMMANDS).
|
||||
When choosing between 'push' and 'export', Git prefers 'push'.
|
||||
Other frontends may have some other order of preference.
|
||||
|
||||
'no-private-update'::
|
||||
When using the 'refspec' capability, git normally updates the
|
||||
private ref on successful push. This update is disabled when
|
||||
the remote-helper declares the capability 'no-private-update'.
|
||||
|
||||
|
||||
Capabilities for Fetching
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -38,6 +38,7 @@ do
|
||||
echo "*export-marks $gitmarks"
|
||||
fi
|
||||
test -n "$GIT_REMOTE_TESTGIT_SIGNED_TAGS" && echo "signed-tags"
|
||||
test -n "$GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE" && echo "no-private-update"
|
||||
echo
|
||||
;;
|
||||
list)
|
||||
|
@ -182,6 +182,17 @@ test_expect_success 'push update refs' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'push update refs disabled by no-private-update' '
|
||||
(cd local &&
|
||||
echo more-update >>file &&
|
||||
git commit -a -m more-update &&
|
||||
git rev-parse --verify testgit/origin/heads/update >expect &&
|
||||
GIT_REMOTE_TESTGIT_NO_PRIVATE_UPDATE=t git push origin update &&
|
||||
git rev-parse --verify testgit/origin/heads/update >actual &&
|
||||
test_cmp expect actual
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'push update refs failure' '
|
||||
(cd local &&
|
||||
git checkout update &&
|
||||
|
@ -27,7 +27,8 @@ struct helper_data {
|
||||
push : 1,
|
||||
connect : 1,
|
||||
signed_tags : 1,
|
||||
no_disconnect_req : 1;
|
||||
no_disconnect_req : 1,
|
||||
no_private_update : 1;
|
||||
char *export_marks;
|
||||
char *import_marks;
|
||||
/* These go from remote name (as in "list") to private name */
|
||||
@ -205,6 +206,8 @@ static struct child_process *get_helper(struct transport *transport)
|
||||
strbuf_addstr(&arg, "--import-marks=");
|
||||
strbuf_addstr(&arg, capname + strlen("import-marks "));
|
||||
data->import_marks = strbuf_detach(&arg, NULL);
|
||||
} else if (!prefixcmp(capname, "no-private-update")) {
|
||||
data->no_private_update = 1;
|
||||
} else if (mandatory) {
|
||||
die("Unknown mandatory capability %s. This remote "
|
||||
"helper probably needs newer version of Git.",
|
||||
@ -723,7 +726,7 @@ static void push_update_refs_status(struct helper_data *data,
|
||||
if (push_update_ref_status(&buf, &ref, remote_refs))
|
||||
continue;
|
||||
|
||||
if (!data->refspecs)
|
||||
if (!data->refspecs || data->no_private_update)
|
||||
continue;
|
||||
|
||||
/* propagate back the update to the remote namespace */
|
||||
|
Loading…
Reference in New Issue
Block a user