* [PATCH 0/2] Add --dry-run option to git-push @ 2007-10-10 23:34 Baz 2007-10-11 7:57 ` Lars Hjemli 0 siblings, 1 reply; 5+ messages in thread From: Baz @ 2007-10-10 23:34 UTC (permalink / raw) To: GIT list; +Cc: Junio C Hamano Hi, there was discussion recently about the default behaviour of git-push having the potential to confuse, making it easy to push commits that are still cooking in other branches. Its also possible for newbies to make mistakes with refspecs, but there's no way to know if you've got the syntax right without actually pushing. Steffan suggested a dry-run flag, which I've always wanted too, so here's an attempt. Patches git-send-pack, git-push, their docs, and adds a test for git-push. Treat me gentle... first patch to the list and the mailer will probably mangle it (sigh) Cheers, Baz Diffstat: Documentation/git-push.txt | 6 +++++- Documentation/git-send-pack.txt | 5 ++++- builtin-push.c | 10 ++++++++-- send-pack.c | 31 +++++++++++++++++++------------ t/t5516-fetch-push.sh | 10 ++++++++++ 5 files changed, 46 insertions(+), 16 deletions(-) ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] Add --dry-run option to git-push 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> 0 siblings, 1 reply; 5+ messages in thread From: Lars Hjemli @ 2007-10-11 7:57 UTC (permalink / raw) To: Baz; +Cc: git, Junio C Hamano On 10/11/07, Baz <brian.ewins@gmail.com> wrote: > there was discussion recently about the default behaviour of git-push > having the potential to confuse, making it easy to push commits that > are still cooking in other branches. > > Its also possible for newbies to make mistakes with refspecs, but > there's no way to know if you've got the syntax right without actually > pushing. Steffan suggested a dry-run flag, which I've always wanted > too, so here's an attempt. Patches git-send-pack, git-push, their > docs, and adds a test for git-push. Maybe some of this description could be reused in the commit messages? > first patch to the list and the mailer will > probably mangle it (sigh) Yeah, it did. Would it be possible for you to resend with git-send-email after adding proper commit messages? If git-send-email is not an option, attaching the patches are preferable to the current mangling. -- larsh ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <16913589bee1374245d8b8f7333ab3984b56ffcb.1192130892.git.Brian.Ewins@gmail.com>]
* [PATCH v2 1/2] Add a --dry-run option to git-send-pack. [not found] ` <16913589bee1374245d8b8f7333ab3984b56ffcb.1192130892.git.Brian.Ewins@gmail.com> @ 2007-10-11 19:32 ` Brian Ewins 2007-10-11 20:18 ` Lars Hjemli [not found] ` <fe9a919ada9f6b6a79d9810eda11c13fb1091103.1192130892.git.Brian.Ewins@gmail.com> 1 sibling, 1 reply; 5+ messages in thread From: Brian Ewins @ 2007-10-11 19:32 UTC (permalink / raw) To: git; +Cc: hjemli, gitster, Brian Ewins, Brian Ewins 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 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] Add a --dry-run option to git-send-pack. 2007-10-11 19:32 ` [PATCH v2 1/2] Add a --dry-run option to git-send-pack Brian Ewins @ 2007-10-11 20:18 ` Lars Hjemli 0 siblings, 0 replies; 5+ messages in thread From: Lars Hjemli @ 2007-10-11 20:18 UTC (permalink / raw) To: Brian Ewins; +Cc: git, gitster Thanks -- larsh ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <fe9a919ada9f6b6a79d9810eda11c13fb1091103.1192130892.git.Brian.Ewins@gmail.com>]
* [PATCH v2 2/2] Add a --dry-run option to git-push. [not found] ` <fe9a919ada9f6b6a79d9810eda11c13fb1091103.1192130892.git.Brian.Ewins@gmail.com> @ 2007-10-11 19:32 ` Brian Ewins 0 siblings, 0 replies; 5+ messages in thread From: Brian Ewins @ 2007-10-11 19:32 UTC (permalink / raw) To: git; +Cc: hjemli, gitster, Brian Ewins, Brian Ewins The default behaviour of git-push is potentially confusing for new users, since it will push changes that are not on the current branch. Publishing patches that were still cooking on a development branch is hard to undo. It would also be nice to be able to verify the expansion of refspecs if you've edited them, so that you know what branches matched on the server. Adding a --dry-run flag allows the user to experiment safely and learn how to use git-push properly. Originally suggested by Steffen Prohaska. Signed-off-by: Brian Ewins <brian.ewins@gmail.com> --- Documentation/git-push.txt | 5 ++++- builtin-push.c | 10 ++++++++-- t/t5516-fetch-push.sh | 10 ++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt index 6bc559d..e5dd4c1 100644 --- a/Documentation/git-push.txt +++ b/Documentation/git-push.txt @@ -9,7 +9,7 @@ git-push - Update remote refs along with associated objects SYNOPSIS -------- [verse] -'git-push' [--all] [--tags] [--receive-pack=<git-receive-pack>] +'git-push' [--all] [--dry-run] [--tags] [--receive-pack=<git-receive-pack>] [--repo=all] [-f | --force] [-v] [<repository> <refspec>...] DESCRIPTION @@ -63,6 +63,9 @@ the remote repository. Instead of naming each ref to push, specifies that all refs under `$GIT_DIR/refs/heads/` be pushed. +\--dry-run:: + Do everything except actually send the updates. + \--tags:: All refs under `$GIT_DIR/refs/tags` are pushed, in addition to refspecs explicitly listed on the command diff --git a/builtin-push.c b/builtin-push.c index 88c5024..141380b 100644 --- a/builtin-push.c +++ b/builtin-push.c @@ -7,9 +7,9 @@ #include "builtin.h" #include "remote.h" -static const char push_usage[] = "git-push [--all] [--tags] [--receive-pack=<git-receive-pack>] [--repo=all] [-f | --force] [-v] [<repository> <refspec>...]"; +static const char push_usage[] = "git-push [--all] [--dry-run] [--tags] [--receive-pack=<git-receive-pack>] [--repo=all] [-f | --force] [-v] [<repository> <refspec>...]"; -static int all, force, thin, verbose; +static int all, dry_run, force, thin, verbose; static const char *receivepack; static const char **refspec; @@ -69,6 +69,8 @@ static int do_push(const char *repo) argc = 1; if (all) argv[argc++] = "--all"; + if (dry_run) + argv[argc++] = "--dry-run"; if (force) argv[argc++] = "--force"; if (receivepack) @@ -147,6 +149,10 @@ int cmd_push(int argc, const char **argv, const char *prefix) all = 1; continue; } + if (!strcmp(arg, "--dry-run")) { + dry_run = 1; + continue; + } if (!strcmp(arg, "--tags")) { add_refspec("refs/tags/*"); continue; diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index ca46aaf..4fbd5b1 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -244,4 +244,14 @@ test_expect_success 'push with colon-less refspec (4)' ' ' +test_expect_success 'push with dry-run' ' + + mk_test heads/master && + cd testrepo && + old_commit=$(git show-ref -s --verify refs/heads/master) && + cd .. && + git push --dry-run testrepo && + check_push_result $old_commit heads/master +' + test_done -- 1.5.2.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-10-11 20:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 ` [PATCH v2 1/2] Add a --dry-run option to git-send-pack Brian Ewins
2007-10-11 20:18 ` 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
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).