push.c: add an --atomic argument
Add a command line argument to the git push command to request atomic pushes. Signed-off-by: Ronnie Sahlberg <sahlberg@google.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4ff17f10c4
commit
d0e8e09cd8
@ -9,7 +9,7 @@ git-push - Update remote refs along with associated objects
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git push' [--all | --mirror | --tags] [--follow-tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
|
'git push' [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
|
||||||
[--repo=<repository>] [-f | --force] [--prune] [-v | --verbose]
|
[--repo=<repository>] [-f | --force] [--prune] [-v | --verbose]
|
||||||
[-u | --set-upstream] [--signed]
|
[-u | --set-upstream] [--signed]
|
||||||
[--force-with-lease[=<refname>[:<expect>]]]
|
[--force-with-lease[=<refname>[:<expect>]]]
|
||||||
@ -136,6 +136,11 @@ already exists on the remote side.
|
|||||||
logged. See linkgit:git-receive-pack[1] for the details
|
logged. See linkgit:git-receive-pack[1] for the details
|
||||||
on the receiving end.
|
on the receiving end.
|
||||||
|
|
||||||
|
--[no-]atomic::
|
||||||
|
Use an atomic transaction on the remote side if available.
|
||||||
|
Either all refs are updated, or on error, no refs are updated.
|
||||||
|
If the server does not support atomic pushes the push will fail.
|
||||||
|
|
||||||
--receive-pack=<git-receive-pack>::
|
--receive-pack=<git-receive-pack>::
|
||||||
--exec=<git-receive-pack>::
|
--exec=<git-receive-pack>::
|
||||||
Path to the 'git-receive-pack' program on the remote
|
Path to the 'git-receive-pack' program on the remote
|
||||||
|
@ -487,6 +487,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
|||||||
int flags = 0;
|
int flags = 0;
|
||||||
int tags = 0;
|
int tags = 0;
|
||||||
int rc;
|
int rc;
|
||||||
|
int atomic = 0;
|
||||||
const char *repo = NULL; /* default repository */
|
const char *repo = NULL; /* default repository */
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
OPT__VERBOSITY(&verbosity),
|
OPT__VERBOSITY(&verbosity),
|
||||||
@ -518,6 +519,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
|||||||
OPT_BIT(0, "follow-tags", &flags, N_("push missing but relevant tags"),
|
OPT_BIT(0, "follow-tags", &flags, N_("push missing but relevant tags"),
|
||||||
TRANSPORT_PUSH_FOLLOW_TAGS),
|
TRANSPORT_PUSH_FOLLOW_TAGS),
|
||||||
OPT_BIT(0, "signed", &flags, N_("GPG sign the push"), TRANSPORT_PUSH_CERT),
|
OPT_BIT(0, "signed", &flags, N_("GPG sign the push"), TRANSPORT_PUSH_CERT),
|
||||||
|
OPT_BOOL(0, "atomic", &atomic, N_("request atomic transaction on remote side")),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -533,6 +535,9 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
|||||||
if (tags)
|
if (tags)
|
||||||
add_refspec("refs/tags/*");
|
add_refspec("refs/tags/*");
|
||||||
|
|
||||||
|
if (atomic)
|
||||||
|
flags |= TRANSPORT_PUSH_ATOMIC;
|
||||||
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
repo = argv[0];
|
repo = argv[0];
|
||||||
set_refspecs(argv + 1, argc - 1, repo);
|
set_refspecs(argv + 1, argc - 1, repo);
|
||||||
|
@ -830,6 +830,7 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re
|
|||||||
args.dry_run = !!(flags & TRANSPORT_PUSH_DRY_RUN);
|
args.dry_run = !!(flags & TRANSPORT_PUSH_DRY_RUN);
|
||||||
args.porcelain = !!(flags & TRANSPORT_PUSH_PORCELAIN);
|
args.porcelain = !!(flags & TRANSPORT_PUSH_PORCELAIN);
|
||||||
args.push_cert = !!(flags & TRANSPORT_PUSH_CERT);
|
args.push_cert = !!(flags & TRANSPORT_PUSH_CERT);
|
||||||
|
args.atomic = !!(flags & TRANSPORT_PUSH_ATOMIC);
|
||||||
args.url = transport->url;
|
args.url = transport->url;
|
||||||
|
|
||||||
ret = send_pack(&args, data->fd, data->conn, remote_refs,
|
ret = send_pack(&args, data->fd, data->conn, remote_refs,
|
||||||
|
@ -125,6 +125,7 @@ struct transport {
|
|||||||
#define TRANSPORT_PUSH_NO_HOOK 512
|
#define TRANSPORT_PUSH_NO_HOOK 512
|
||||||
#define TRANSPORT_PUSH_FOLLOW_TAGS 1024
|
#define TRANSPORT_PUSH_FOLLOW_TAGS 1024
|
||||||
#define TRANSPORT_PUSH_CERT 2048
|
#define TRANSPORT_PUSH_CERT 2048
|
||||||
|
#define TRANSPORT_PUSH_ATOMIC 4096
|
||||||
|
|
||||||
#define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)
|
#define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)
|
||||||
#define TRANSPORT_SUMMARY(x) (int)(TRANSPORT_SUMMARY_WIDTH + strlen(x) - gettext_width(x)), (x)
|
#define TRANSPORT_SUMMARY(x) (int)(TRANSPORT_SUMMARY_WIDTH + strlen(x) - gettext_width(x)), (x)
|
||||||
|
Loading…
Reference in New Issue
Block a user