From e455ee69aa94769329cb763ae489d2cf67248da4 Mon Sep 17 00:00:00 2001 From: Rory Crean <49672044+RMCrean@users.noreply.github.com> Date: Mon, 7 Apr 2025 05:17:09 +0200 Subject: [PATCH] remote: show default when run "dvc remote list" (#10711) * remote: show default when run "dvc remote list" Fixes #10708 * Indent other remotes if there is a default remote Now regardless of whether there is a default remote or not, all remotes are equally indented * stricter test for listing remotes shows default * Rewrite dvc remote list implemetation - Default remote is indicated at end of the output and colored green - Remotes no longer reordered to show default first - Test updated to reflect changes and remove need for function escape_ansi. --------- Co-authored-by: RMCrean --- dvc/commands/remote.py | 10 +++++++++- tests/func/test_remote.py | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/dvc/commands/remote.py b/dvc/commands/remote.py index 4b6921dd7..325eeda25 100644 --- a/dvc/commands/remote.py +++ b/dvc/commands/remote.py @@ -110,8 +110,16 @@ class CmdRemoteDefault(CmdRemote): class CmdRemoteList(CmdRemote): def run(self): conf = self.config.read(self.args.level) + default_remote = conf["core"].get("remote") + for name, remote_conf in conf["remote"].items(): - ui.write(name, remote_conf["url"], sep="\t") + if name == default_remote: + text = f"{name}\t{remote_conf['url']}\t(default)" + color = "green" + else: + text = f"{name}\t{remote_conf['url']}" + color = "" + ui.write(ui.rich_text(text, style=color), styled=True) return 0 diff --git a/tests/func/test_remote.py b/tests/func/test_remote.py index 9604f1807..da8826dfb 100644 --- a/tests/func/test_remote.py +++ b/tests/func/test_remote.py @@ -115,6 +115,20 @@ def test_show_default(dvc, capsys): assert out == "foo\n" +def test_list_shows_default(dvc, capsys): + default_remote = "foo" + other_remote = "bar" + bucket_url = "s3://bucket/name" + assert main(["remote", "add", default_remote, bucket_url]) == 0 + assert main(["remote", "add", other_remote, bucket_url]) == 0 + assert main(["remote", "default", default_remote]) == 0 + assert main(["remote", "list"]) == 0 + out, _ = capsys.readouterr() + out_lines = out.splitlines() + assert out_lines[0].split() == [default_remote, bucket_url, "(default)"] + assert out_lines[1].split() == [other_remote, bucket_url] + + def test_upper_case_remote(tmp_dir, dvc, local_cloud): remote_name = "UPPERCASEREMOTE"