[PATCH 2/2] git remote: prune all remotes with `prune -a`

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is handy when working with lots of remotes.

Signed-off-by: Lars Hjemli <hjemli@xxxxxxxxx>
---
 Documentation/git-remote.txt |    4 +++-
 builtin-remote.c             |   32 ++++++++++++++++++++++++++++++--
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index bb99810..55c108e 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' [-n | --dry-run] <name>
+'git remote prune' [-n | --dry-run] [-a | <name>]
 'git remote update' [group]
 
 DESCRIPTION
@@ -82,6 +82,8 @@ referenced by <name>, but are still locally available in
 +
 With `--dry-run` option, report what branches will be pruned, but do no
 actually prune them.
++
+With `-a` option, prune all remotes.
 
 'update'::
 
diff --git a/builtin-remote.c b/builtin-remote.c
index 626256e..973637e 100644
--- a/builtin-remote.c
+++ b/builtin-remote.c
@@ -572,20 +572,48 @@ static int prune_one(const char *name, int dry_run)
 	return result;
 }
 
+struct prune_cbdata {
+	int result;
+	int dry_run;
+};
+
+static int prune_all_cb(struct remote *remote, void *cbdata)
+{
+	struct prune_cbdata *cb = cbdata;
+
+	cb->result |= prune_one(remote->name, cb->dry_run);
+	return 0;
+}
+
+static int prune_all(int dry_run)
+{
+	int result;
+	struct prune_cbdata cb;
+
+	cb.result = 0;
+	cb.dry_run = dry_run;
+	result = for_each_remote(prune_all_cb, &cb);
+	return (result | cb.result);
+}
+
 static int prune(int argc, const char **argv)
 {
-	int dry_run = 0, result = 0;
+	int dry_run = 0, all = 0, result = 0;
 	struct option options[] = {
 		OPT_GROUP("prune specific options"),
+		OPT_BOOLEAN('a', NULL, &all, "prune all remotes"),
 		OPT__DRY_RUN(&dry_run),
 		OPT_END()
 	};
 
 	argc = parse_options(argc, argv, options, builtin_remote_usage, 0);
 
-	if (argc < 1)
+	if (!argc == !all)
 		usage_with_options(builtin_remote_usage, options);
 
+	if (all)
+		return prune_all(dry_run);
+
 	for (; argc; argc--, argv++)
 		result |= prune_one(*argv, dry_run);
 
-- 
1.6.0.2.309.gc1f46

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux