Add a --dry-run option to git-send-pack.
Implement support for --dry-run, so that it can be used in calls from git-push. With this flag set, git-send-pack will not send any updates to the server. Signed-off-by: Brian Ewins <brian.ewins@gmail.com> Signed-off-by: Lars Hjemli <hjemli@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:

committed by
Shawn O. Pearce

parent
90d16ec032
commit
a63103ae4f
@ -8,7 +8,7 @@ git-send-pack - Push objects over git protocol to another repository
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-send-pack' [--all] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]
|
'git-send-pack' [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@ -34,6 +34,9 @@ OPTIONS
|
|||||||
Instead of explicitly specifying which refs to update,
|
Instead of explicitly specifying which refs to update,
|
||||||
update all heads that locally exist.
|
update all heads that locally exist.
|
||||||
|
|
||||||
|
\--dry-run::
|
||||||
|
Do everything except actually send the updates.
|
||||||
|
|
||||||
\--force::
|
\--force::
|
||||||
Usually, the command refuses to update a remote ref that
|
Usually, the command refuses to update a remote ref that
|
||||||
is not an ancestor of the local ref used to overwrite it.
|
is not an ancestor of the local ref used to overwrite it.
|
||||||
|
31
send-pack.c
31
send-pack.c
@ -7,13 +7,14 @@
|
|||||||
#include "remote.h"
|
#include "remote.h"
|
||||||
|
|
||||||
static const char send_pack_usage[] =
|
static const char send_pack_usage[] =
|
||||||
"git-send-pack [--all] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]\n"
|
"git-send-pack [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]\n"
|
||||||
" --all and explicit <ref> specification are mutually exclusive.";
|
" --all and explicit <ref> specification are mutually exclusive.";
|
||||||
static const char *receivepack = "git-receive-pack";
|
static const char *receivepack = "git-receive-pack";
|
||||||
static int verbose;
|
static int verbose;
|
||||||
static int send_all;
|
static int send_all;
|
||||||
static int force_update;
|
static int force_update;
|
||||||
static int use_thin_pack;
|
static int use_thin_pack;
|
||||||
|
static int dry_run;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make a pack stream and spit it out into file descriptor fd
|
* Make a pack stream and spit it out into file descriptor fd
|
||||||
@ -282,16 +283,18 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
|
|||||||
strcpy(old_hex, sha1_to_hex(ref->old_sha1));
|
strcpy(old_hex, sha1_to_hex(ref->old_sha1));
|
||||||
new_hex = sha1_to_hex(ref->new_sha1);
|
new_hex = sha1_to_hex(ref->new_sha1);
|
||||||
|
|
||||||
if (ask_for_status_report) {
|
if (!dry_run) {
|
||||||
packet_write(out, "%s %s %s%c%s",
|
if (ask_for_status_report) {
|
||||||
old_hex, new_hex, ref->name, 0,
|
packet_write(out, "%s %s %s%c%s",
|
||||||
"report-status");
|
old_hex, new_hex, ref->name, 0,
|
||||||
ask_for_status_report = 0;
|
"report-status");
|
||||||
expect_status_report = 1;
|
ask_for_status_report = 0;
|
||||||
|
expect_status_report = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
packet_write(out, "%s %s %s",
|
||||||
|
old_hex, new_hex, ref->name);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
packet_write(out, "%s %s %s",
|
|
||||||
old_hex, new_hex, ref->name);
|
|
||||||
if (will_delete_ref)
|
if (will_delete_ref)
|
||||||
fprintf(stderr, "deleting '%s'\n", ref->name);
|
fprintf(stderr, "deleting '%s'\n", ref->name);
|
||||||
else {
|
else {
|
||||||
@ -302,7 +305,7 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
|
|||||||
fprintf(stderr, "\n from %s\n to %s\n",
|
fprintf(stderr, "\n from %s\n to %s\n",
|
||||||
old_hex, new_hex);
|
old_hex, new_hex);
|
||||||
}
|
}
|
||||||
if (remote) {
|
if (remote && !dry_run) {
|
||||||
struct refspec rs;
|
struct refspec rs;
|
||||||
rs.src = ref->name;
|
rs.src = ref->name;
|
||||||
rs.dst = NULL;
|
rs.dst = NULL;
|
||||||
@ -321,7 +324,7 @@ static int send_pack(int in, int out, struct remote *remote, int nr_refspec, cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
packet_flush(out);
|
packet_flush(out);
|
||||||
if (new_refs)
|
if (new_refs && !dry_run)
|
||||||
ret = pack_objects(out, remote_refs);
|
ret = pack_objects(out, remote_refs);
|
||||||
close(out);
|
close(out);
|
||||||
|
|
||||||
@ -390,6 +393,10 @@ int main(int argc, char **argv)
|
|||||||
send_all = 1;
|
send_all = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!strcmp(arg, "--dry-run")) {
|
||||||
|
dry_run = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!strcmp(arg, "--force")) {
|
if (!strcmp(arg, "--force")) {
|
||||||
force_update = 1;
|
force_update = 1;
|
||||||
continue;
|
continue;
|
||||||
|
Reference in New Issue
Block a user