git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Brian Ewins <brian.ewins@gmail.com>
To: git@vger.kernel.org
Cc: hjemli@gmail.com, gitster@pobox.com,
	Brian Ewins <Brian.Ewins@gmail.com>,
	Brian Ewins <brian.ewins@gmail.com>
Subject: [PATCH v2 1/2] Add a --dry-run option to git-send-pack.
Date: Thu, 11 Oct 2007 20:32:26 +0100	[thread overview]
Message-ID: <119213114734-git-send-email-Brian.Ewins@gmail.com> (raw)
Message-ID: <16913589bee1374245d8b8f7333ab3984b56ffcb.1192130892.git.Brian.Ewins@gmail.com> (raw)
In-Reply-To: <8c5c35580710110057r29c1fe0w7f9e2825fa33@mail.gmail.com>

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>
---
 Documentation/git-send-pack.txt |    5 ++++-
 send-pack.c                     |   31 +++++++++++++++++++------------
 2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/Documentation/git-send-pack.txt b/Documentation/git-send-pack.txt
index 3271e88..2fa01d4 100644
--- a/Documentation/git-send-pack.txt
+++ b/Documentation/git-send-pack.txt
@@ -8,7 +8,7 @@ git-send-pack - Push objects over git protocol to another repository
 
 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
 -----------
@@ -34,6 +34,9 @@ OPTIONS
 	Instead of explicitly specifying which refs to update,
 	update all heads that locally exist.
 
+\--dry-run::
+	Do everything except actually send the updates.
+
 \--force::
 	Usually, the command refuses to update a remote ref that
 	is not an ancestor of the local ref used to overwrite it.
diff --git a/send-pack.c b/send-pack.c
index f74e66a..16ed51f 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -7,13 +7,14 @@
 #include "remote.h"
 
 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.";
 static const char *receivepack = "git-receive-pack";
 static int verbose;
 static int send_all;
 static int force_update;
 static int use_thin_pack;
+static int dry_run;
 
 /*
  * 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));
 		new_hex = sha1_to_hex(ref->new_sha1);
 
-		if (ask_for_status_report) {
-			packet_write(out, "%s %s %s%c%s",
-				     old_hex, new_hex, ref->name, 0,
-				     "report-status");
-			ask_for_status_report = 0;
-			expect_status_report = 1;
+		if (!dry_run) {
+			if (ask_for_status_report) {
+				packet_write(out, "%s %s %s%c%s",
+					old_hex, new_hex, ref->name, 0,
+					"report-status");
+				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)
 			fprintf(stderr, "deleting '%s'\n", ref->name);
 		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",
 				old_hex, new_hex);
 		}
-		if (remote) {
+		if (remote && !dry_run) {
 			struct refspec rs;
 			rs.src = ref->name;
 			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);
-	if (new_refs)
+	if (new_refs && !dry_run)
 		ret = pack_objects(out, remote_refs);
 	close(out);
 
@@ -390,6 +393,10 @@ int main(int argc, char **argv)
 				send_all = 1;
 				continue;
 			}
+			if (!strcmp(arg, "--dry-run")) {
+				dry_run = 1;
+				continue;
+			}
 			if (!strcmp(arg, "--force")) {
 				force_update = 1;
 				continue;
-- 
1.5.2.5

  reply	other threads:[~2007-10-11 19:32 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-10 23:34 [PATCH 0/2] Add --dry-run option to git-push Baz
2007-10-11  7:57 ` Lars Hjemli
     [not found]   ` <16913589bee1374245d8b8f7333ab3984b56ffcb.1192130892.git.Brian.Ewins@gmail.com>
2007-10-11 19:32     ` Brian Ewins [this message]
2007-10-11 20:18       ` [PATCH v2 1/2] Add a --dry-run option to git-send-pack Lars Hjemli
     [not found]     ` <fe9a919ada9f6b6a79d9810eda11c13fb1091103.1192130892.git.Brian.Ewins@gmail.com>
2007-10-11 19:32       ` [PATCH v2 2/2] Add a --dry-run option to git-push Brian Ewins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=119213114734-git-send-email-Brian.Ewins@gmail.com \
    --to=brian.ewins@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=hjemli@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).