From 25a2ea0f40dcaf09dbc5e51dbc34e9550a4d1d8b Mon Sep 17 00:00:00 2001 From: Dong Zhou Date: Mon, 17 Jul 2023 12:56:06 -0400 Subject: [PATCH] remove spaceship info item since all symbols are customizable (#257) * remove spaceship info item since all symbols are customizable * fix unit tests --- README.md | 9 +++---- gita/info.py | 61 ++++++++++++++++----------------------------- setup.py | 2 +- tests/test_main.py | 7 +++--- tests/test_utils.py | 6 ++--- 5 files changed, 32 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index a1f7df3..79c6009 100644 --- a/README.md +++ b/README.md @@ -334,19 +334,16 @@ branch,commit_msg,commit_time ``` Here `branch` includes both branch name and status. - -Another choice is to enable `spaceship_status`, which mimics -the symbols used in [spaceship-prompt](https://spaceship-prompt.sh/sections/git/#Git-status-git_status). +The status symbols are similar to the ones used in [spaceship-prompt](https://spaceship-prompt.sh/sections/git/#Git-status-git_status). To customize these symbols, add a file in `$XDG_CONFIG_HOME/gita/symbols.csv`. -The default `spaceship_status` settings corresponds to +The default settings corresponds to ```csv dirty,staged,untracked,local_ahead,remote_ahead,diverged,in_sync,no_remote -!,+,?,↑,↓,⇕,,∅ +*,+,?,↑,↓,⇕,,∅ ``` Only the symbols to be overridden need to be defined. - You can search unicode symbols [here](https://www.compart.com/en/unicode/). ### customize git command flags diff --git a/gita/info.py b/gita/info.py index f781cd0..10d8bea 100644 --- a/gita/info.py +++ b/gita/info.py @@ -89,7 +89,6 @@ def get_info_funcs(no_colors=False) -> List[Callable[[str], str]]: all_info_items = { "branch": partial(get_repo_status, no_colors=no_colors), "branch_name": get_repo_branch, - "spaceship_status": get_spaceship_status, "commit_msg": get_commit_msg, "commit_time": get_commit_time, "path": get_path, @@ -196,64 +195,52 @@ def get_commit_time(prop: Dict[str, str]) -> str: return f"({result.stdout.strip()})" -# better solution exists for python3.7+ -# https://stackoverflow.com/questions/11351032/named-tuple-and-default-values-for-optional-keyword-arguments -Symbols = namedtuple( - "Symbols", - "dirty staged untracked local_ahead remote_ahead diverged in_sync no_remote", -) -Symbols.__new__.__defaults__ = ("",) * len(Symbols._fields) -default_symbols = Symbols("*", "+", "?") +default_symbols = { + "dirty": "*", + "staged": "+", + "untracked": "?", + "local_ahead": "↑", + "remote_ahead": "↓", + "diverged": "⇕", + "in_sync": "", + "no_remote": "∅", + "": "", +} @lru_cache() -def get_symbols(baseline: Symbols = default_symbols) -> Dict[str, str]: +def get_symbols() -> Dict[str, str]: """ return status symbols with customization """ - symbols = baseline._asdict() - symbols[""] = "" custom = {} csv_config = Path(common.get_config_fname("symbols.csv")) if csv_config.is_file(): with open(csv_config, "r") as f: reader = csv.DictReader(f) custom = next(reader) - symbols.update(custom) - return symbols + default_symbols.update(custom) + return default_symbols def get_repo_status(prop: Dict[str, str], no_colors=False) -> str: - head = get_head(prop["path"]) - colors = {situ: Color[name].value for situ, name in get_color_encoding().items()} - dirty, staged, untracked, situ = _get_repo_status(prop, skip_situ=no_colors) - symbols = get_symbols(default_symbols) - info = f"{head:<10} [{symbols[dirty]+symbols[staged]+symbols[untracked]}]" + branch = get_head(prop["path"]) + dirty, staged, untracked, situ = _get_repo_status(prop) + symbols = get_symbols() + info = f"{branch:<10} [{symbols[dirty]+symbols[staged]+symbols[untracked]+symbols[situ]}]" if no_colors: - return f"{info:<17}" + return f"{info:<18}" + colors = {situ: Color[name].value for situ, name in get_color_encoding().items()} color = colors[situ] - return f"{color}{info:<17}{Color.end}" - - -spaceship = Symbols("!", "+", "?", "↑", "↓", "⇕", "", "∅") - - -def get_spaceship_status(prop: Dict[str, str]) -> str: - head = get_head(prop["path"]) - dirty, staged, untracked, situ = _get_repo_status(prop) - symbols = get_symbols(spaceship) - info = f"{head:<10} [{symbols[dirty]+symbols[staged]+symbols[untracked]+symbols[situ]}]" - return f"{info:<18}" + return f"{color}{info:<18}{Color.end}" def get_repo_branch(prop: Dict[str, str]) -> str: return get_head(prop["path"]) -def _get_repo_status( - prop: Dict[str, str], skip_situ=False -) -> Tuple[str, str, str, str]: +def _get_repo_status(prop: Dict[str, str]) -> Tuple[str, str, str, str]: """ Return the status of one repo """ @@ -263,9 +250,6 @@ def _get_repo_status( staged = "staged" if run_quiet_diff(flags, ["--cached"], path) else "" untracked = "untracked" if has_untracked(flags, path) else "" - if skip_situ: - return dirty, staged, untracked, "" - diff_returncode = run_quiet_diff(flags, ["@{u}", "@{0}"], path) if diff_returncode == 128: situ = "no_remote" @@ -285,7 +269,6 @@ def _get_repo_status( ALL_INFO_ITEMS = { "branch", "branch_name", - "spaceship_status", "commit_msg", "commit_time", "path", diff --git a/setup.py b/setup.py index d62cb5f..4950b49 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name="gita", packages=["gita"], - version="0.16.5", + version="0.16.6", license="MIT", description="Manage multiple git repos with sanity", long_description=long_description, diff --git a/tests/test_main.py b/tests/test_main.py index 7c82501..a877160 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -130,12 +130,12 @@ def test_ls(self, monkeypatch, capfd): [ ( PATH_FNAME, - "repo1 \x1b[31mmaster [*+?] \x1b[0m msg \nrepo2 \x1b[31mmaster [*+?] \x1b[0m msg \nxxx \x1b[31mmaster [*+?] \x1b[0m msg \n", + "repo1 \x1b[31mmaster [*+?⇕] \x1b[0m msg \nrepo2 \x1b[31mmaster [*+?⇕] \x1b[0m msg \nxxx \x1b[31mmaster [*+?⇕] \x1b[0m msg \n", ), (PATH_FNAME_EMPTY, ""), ( PATH_FNAME_CLASH, - "repo1 \x1b[31mmaster [*+?] \x1b[0m msg \nrepo2 \x1b[31mmaster [*+?] \x1b[0m msg \n", + "repo1 \x1b[31mmaster [*+?⇕] \x1b[0m msg \nrepo2 \x1b[31mmaster [*+?⇕] \x1b[0m msg \n", ), ], ) @@ -535,8 +535,7 @@ def test_ll(self, _, capfd): __main__.f_info(args) out, err = capfd.readouterr() assert ( - "In use: branch,commit_msg,commit_time\nUnused: branch_name,path,spaceship_status\n" - == out + "In use: branch,commit_msg,commit_time\nUnused: branch_name,path\n" == out ) assert err == "" diff --git a/tests/test_utils.py b/tests/test_utils.py index 1e4f125..2936f0e 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -115,17 +115,17 @@ def test_auto_group(repos, paths, expected): ( [{"abc": {"path": "/root/repo/", "type": "", "flags": []}}, False], True, - "abc \x1b[31mrepo [*+?] \x1b[0m msg xx", + "abc \x1b[31mrepo [*+?⇕] \x1b[0m msg xx", ), ( [{"abc": {"path": "/root/repo/", "type": "", "flags": []}}, True], True, - "abc repo [*+?] msg xx", + "abc repo [*+?⇕] msg xx", ), ( [{"repo": {"path": "/root/repo2/", "type": "", "flags": []}}, False], False, - "repo \x1b[32mrepo [?] \x1b[0m msg xx", + "repo \x1b[32mrepo [?] \x1b[0m msg xx", ), ], )