Repository: borgbackup/borg

Issue:
prune: only show the archives that are pruned
          While discussing the prune output, I'd like the option to only show the archives
          that are pruned, not those that are kept.
          For me, only one or two are pruned each time, but dozens are kept, which clutters the output.

_Originally posted by @jdchristensen in https://github.com/borgbackup/borg/issues/3238#issuecomment-341113742_
            


Discussion:

Resolving patch:
diff --git a/src/borg/archiver/__init__.py b/src/borg/archiver/__init__.py
--- a/src/borg/archiver/__init__.py
+++ b/src/borg/archiver/__init__.py
@@ -441,7 +441,6 @@ def _setup_implied_logging(self, args):
         """turn on INFO level logging for args that imply that they will produce output"""
         # map of option name to name of logger for that option
         option_logger = {
-            "output_list": "borg.output.list",
             "show_version": "borg.output.show-version",
             "show_rc": "borg.output.show-rc",
             "stats": "borg.output.stats",
@@ -451,6 +450,10 @@ def _setup_implied_logging(self, args):
             option_set = args.get(option, False)
             logging.getLogger(logger_name).setLevel("INFO" if option_set else "WARN")
 
+        # special-case --list / --list-kept / --list-pruned as they all work on same logger
+        options = [args.get(name, False) for name in ("output_list", "list_kept", "list_pruned")]
+        logging.getLogger("borg.output.list").setLevel("INFO" if any(options) else "WARN")
+
     def _setup_topic_debugging(self, args):
         """Turn on DEBUG level logging for specified --debug-topics."""
         for topic in args.debug_topics:
diff --git a/src/borg/archiver/prune_cmd.py b/src/borg/archiver/prune_cmd.py
--- a/src/borg/archiver/prune_cmd.py
+++ b/src/borg/archiver/prune_cmd.py
@@ -163,7 +163,11 @@ def checkpoint_func():
                         log_message = "Keeping archive (rule: {rule} #{num}):".format(
                             rule=kept_because[archive.id][0], num=kept_because[archive.id][1]
                         )
-                if args.output_list:
+                if (
+                    args.output_list
+                    or (args.list_pruned and archive in to_delete)
+                    or (args.list_kept and archive not in to_delete)
+                ):
                     list_logger.info(f"{log_message:<40} {formatter.format_item(archive)}")
             pi.finish()
             if sig_int:
@@ -265,6 +269,12 @@ def build_parser_prune(self, subparsers, common_parser, mid_common_parser):
             "--list", dest="output_list", action="store_true", help="output verbose list of archives it keeps/prunes"
         )
         subparser.add_argument("--short", dest="short", action="store_true", help="use a less wide archive part format")
+        subparser.add_argument(
+            "--list-pruned", dest="list_pruned", action="store_true", help="output verbose list of archives it prunes"
+        )
+        subparser.add_argument(
+            "--list-kept", dest="list_kept", action="store_true", help="output verbose list of archives it keeps"
+        )
         subparser.add_argument(
             "--format",
             metavar="FORMAT",


Test patch: