git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/4] remote prune: print the list of pruned branches

From
OMOlivier Marin <dkr+ml.git@free.fr>
Date
Jun 10, 2008, 14:51 UTC
Message-ID
<1213109495-6974-1-git-send-email-dkr+ml.git@free.fr>
In-Reply-To
<1213109413-6842-1-git-send-email-dkr+ml.git@free.fr>
From: Olivier Marin <dkr@freesurf.fr>
This command is really too quiet which make it unconfortable to use.

Also implement a --dry-run option, in place of the original -n one, to list stale tracking branches that will be pruned, but do not actually prune them.

Add a test case for --dry-run.
Signed-off-by: Olivier Marin <dkr@freesurf.fr>
---
 Documentation/git-remote.txt |    7 +++----
 builtin-remote.c             |   20 ++++++++++++++++----
 t/t5505-remote.sh            |   18 ++++++++++++++++++
 3 files changed, 37 insertions(+), 8 deletions(-)
diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index 7bd024e..345943a 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.txt
@@ -13,7 +13,7 @@ SYNOPSIS
 'git-remote' add [-t <branch>] [-m <master>] [-f] [--mirror] <name> <url>
 'git-remote' rm <name>
 'git-remote' show [-n] <name>
-'git-remote' prune <name>
+'git-remote' prune [-n | --dry-run] <name>
 'git-remote' update [group]
 
 DESCRIPTION
@@ -80,9 +80,8 @@ These stale branches have already been removed from the remote repository
 referenced by <name>, but are still locally available in
 "remotes/<name>".
 +
-With `-n` option, the remote heads are not confirmed first with `git
-ls-remote <name>`; cached information is used instead.  Use with
-caution.
+With `--dry-run` option, report what branches will be pruned, but do no
+actually prune them.
 
 'update'::
 
diff --git a/builtin-remote.c b/builtin-remote.c
index 745a4ee..851bdde 100644
--- a/builtin-remote.c
+++ b/builtin-remote.c
@@ -521,12 +521,14 @@ static int show(int argc, const char **argv)
 	return result;
 }
 
+#define SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)
+
 static int prune(int argc, const char **argv)
 {
-	int no_query = 0, result = 0;
+	int dry_run = 0, result = 0;
 	struct option options[] = {
 		OPT_GROUP("prune specific options"),
-		OPT_BOOLEAN('n', NULL, &no_query, "do not query remotes"),
+		OPT__DRY_RUN(&dry_run),
 		OPT_END()
 	};
 	struct ref_states states;
@@ -540,11 +542,21 @@ static int prune(int argc, const char **argv)
 	for (; argc; argc--, argv++) {
 		int i;
 
-		get_remote_ref_states(*argv, &states, !no_query);
+		get_remote_ref_states(*argv, &states, 1);
+
+		printf("Pruning %s\n", *argv);
+		if (states.stale.nr)
+			printf("From: %s\n", states.remote->url[0]);
 
 		for (i = 0; i < states.stale.nr; i++) {
 			const char *refname = states.stale.items[i].util;
-			result |= delete_ref(refname, NULL);
+
+			if (!dry_run)
+				result |= delete_ref(refname, NULL);
+
+			printf(" * %-*s %s\n", SUMMARY_WIDTH, "[stale branch]",
+				refname + strlen("refs/remotes/")
+				+ strlen(*argv) + 1);
 		}
 
 		/* NEEDSWORK: free remote */
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index c6a7bfb..c27cfad 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -165,6 +165,24 @@ test_expect_success 'prune' '
 	 ! git rev-parse refs/remotes/origin/side)
 '
 
+cat > test/expect << EOF
+Pruning origin
+From: $(pwd)/one/.git
+ * [stale branch]    side2
+EOF
+
+test_expect_success 'prune --dry-run' '
+	(cd one &&
+	 git branch -m side2 side) &&
+	(cd test &&
+	 git remote prune --dry-run origin > output &&
+	 git rev-parse refs/remotes/origin/side2 &&
+	 ! git rev-parse refs/remotes/origin/side &&
+	(cd ../one &&
+	 git branch -m side side2) &&
+	 test_cmp expect output)
+'
+
 test_expect_success 'add --mirror && prune' '
 	(mkdir mirror &&
 	 cd mirror &&
-- 
1.5.6.rc2.160.gd660c
Previous: Olivier MarinNext: Junio C Hamano
Message 28 of 36 in “remote show/prune: strange -n(--dry-run) option.”
  1. Olivier MarinJun 8, 2008
  2. Documentation/git-remote.txt: remove description for useless -n optionOlivier Marin, Jun 8, 2008
  3. Documentation/git-remote.txt: remove description for useless -n optiondkr+ml.git@free.fr, Jun 8, 2008
  4. Junio C HamanoJun 8, 2008
  5. Olivier MarinJun 9, 2008
  6. remote show: fix the -n optionOlivier Marin, Jun 9, 2008
  7. Johannes SchindelinJun 9, 2008
  8. Olivier MarinJun 9, 2008
  9. Johannes SchindelinJun 9, 2008
  10. Olivier MarinJun 9, 2008
  11. Johannes SchindelinJun 9, 2008
  12. Olivier MarinJun 9, 2008
  13. Olivier MarinJun 9, 2008
  14. Johannes SchindelinJun 9, 2008
  15. remote show: fix the -n optionOlivier Marin, Jun 9, 2008
  16. Johannes SchindelinJun 9, 2008
  17. Olivier MarinJun 9, 2008
  18. Johannes SchindelinJun 9, 2008
  19. Olivier MarinJun 9, 2008
  20. builtin-remote: make reuse of code easier by not die()ingJohannes Schindelin, Jun 9, 2008
  21. Olivier MarinJun 9, 2008
  22. Junio C HamanoJun 10, 2008
  23. Shawn O. PearceJun 10, 2008
  24. Johannes SchindelinJun 10, 2008
  25. 0/4 remote show/prune improvementOlivier Marin, Jun 10, 2008
  26. 1/4 remote show: fix the -n optionOlivier Marin, Jun 10, 2008
  27. 2/4 builtin-remote: split show_or_prune() in two separate functionsOlivier Marin, Jun 10, 2008
  28. 3/4 remote prune: print the list of pruned branchesOlivier Marin, Jun 10, 2008
  29. Junio C HamanoJun 12, 2008
  30. Olivier MarinJun 12, 2008
  31. 4/4 remote show: list tracked remote branches with -nOlivier Marin, Jun 10, 2008
  32. Junio C HamanoJun 10, 2008
  33. Olivier MarinJun 10, 2008
  34. Jakub NarebskiJun 10, 2008
  35. Olivier MarinJun 10, 2008
  36. Jakub NarebskiJun 10, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.