summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-07-16 05:43:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-07-16 05:43:04 +0000
commit5e9d53ef29710380368b60c82e146c5d82235e12 (patch)
treeefc287af4d977d585b4717455c68e31c6d57439f
parentReleasing debian version 0.16.4-1. (diff)
downloadgita-5e9d53ef29710380368b60c82e146c5d82235e12.tar.xz
gita-5e9d53ef29710380368b60c82e146c5d82235e12.zip
Merging upstream version 0.16.5.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--Makefile2
-rw-r--r--gita/__main__.py32
-rw-r--r--gita/info.py5
-rw-r--r--setup.py2
-rw-r--r--tests/test_main.py7
-rw-r--r--tests/test_utils.py6
6 files changed, 43 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index c2db6b9..1c0698f 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
install:
pip3 install -e .
test:
- pytest tests --cov=./gita $(TEST_ARGS) -n=auto
+ pytest tests --cov=./gita $(TEST_ARGS) -n=auto -vv
dist:
python3 setup.py sdist
twine:
diff --git a/gita/__main__.py b/gita/__main__.py
index 4cc0e1e..3d091c6 100644
--- a/gita/__main__.py
+++ b/gita/__main__.py
@@ -149,10 +149,20 @@ def f_info(args: argparse.Namespace):
def f_clone(args: argparse.Namespace):
+
+ if args.dry_run:
+ if args.from_file:
+ for url, repo_name, abs_path in utils.parse_clone_config(args.clonee):
+ print(f"git clone {url} {abs_path}")
+ else:
+ print(f"git clone {args.clonee}")
+ return
+
if args.directory:
path = args.directory
else:
path = Path.cwd()
+
if not args.from_file:
subprocess.run(["git", "clone", args.clonee], cwd=path)
return
@@ -169,9 +179,15 @@ def f_clone(args: argparse.Namespace):
)
-def f_freeze(_):
- # TODO: filter context
+def f_freeze(args):
repos = utils.get_repos()
+ ctx = utils.get_context()
+ if args.group is None and ctx:
+ args.group = ctx.stem
+ group_repos = None
+ if args.group: # only display repos in this group
+ group_repos = utils.get_groups()[args.group]["repos"]
+ repos = {k: repos[k] for k in group_repos if k in repos}
seen = {""}
for name, prop in repos.items():
path = prop["path"]
@@ -460,6 +476,12 @@ def main(argv=None):
description="print all repo information",
help="print all repo information",
)
+ p_freeze.add_argument(
+ "-g",
+ "--group",
+ choices=utils.get_groups(),
+ help="freeze repos in the specified group",
+ )
p_freeze.set_defaults(func=f_freeze)
p_clone = subparsers.add_parser(
@@ -487,6 +509,12 @@ def main(argv=None):
action="store_true",
help="clone repo(s) in their original paths",
)
+ p_clone.add_argument(
+ "-n",
+ "--dry-run",
+ action="store_true",
+ help="If set, show command without execution",
+ )
p_clone.set_defaults(func=f_clone)
p_rename = subparsers.add_parser(
diff --git a/gita/info.py b/gita/info.py
index 3af3178..bfb463b 100644
--- a/gita/info.py
+++ b/gita/info.py
@@ -198,9 +198,10 @@ def get_commit_time(prop: Dict[str, str]) -> str:
def get_repo_status(prop: Dict[str, str], no_colors=False) -> str:
head = get_head(prop["path"])
dirty, staged, untracked, color = _get_repo_status(prop, no_colors)
+ info = f"{head:<10} [{dirty+staged+untracked}]"
if color:
- return f"{color}{head+' ['+dirty+staged+untracked+']':<13}{Color.end}"
- return f"{head+' ['+dirty+staged+untracked+']':<13}"
+ return f"{color}{info:<17}{Color.end}"
+ return f"{info:<17}"
def get_repo_branch(prop: Dict[str, str]) -> str:
diff --git a/setup.py b/setup.py
index 38653b3..d62cb5f 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ with open("README.md", encoding="utf-8") as f:
setup(
name="gita",
packages=["gita"],
- version="0.16.4",
+ version="0.16.5",
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 441c14a..6d05867 100644
--- a/tests/test_main.py
+++ b/tests/test_main.py
@@ -130,12 +130,12 @@ class TestLsLl:
[
(
PATH_FNAME,
- "repo1 cmaster [dsu] \x1b[0m msg \nrepo2 cmaster [dsu] \x1b[0m msg \nxxx cmaster [dsu] \x1b[0m msg \n",
+ "repo1 cmaster [dsu] \x1b[0m msg \nrepo2 cmaster [dsu] \x1b[0m msg \nxxx cmaster [dsu] \x1b[0m msg \n",
),
(PATH_FNAME_EMPTY, ""),
(
PATH_FNAME_CLASH,
- "repo1 cmaster [dsu] \x1b[0m msg \nrepo2 cmaster [dsu] \x1b[0m msg \n",
+ "repo1 cmaster [dsu] \x1b[0m msg \nrepo2 cmaster [dsu] \x1b[0m msg \n",
),
],
)
@@ -186,6 +186,7 @@ def test_clone_with_url(mock_run):
args.preserve_path = None
args.directory = "/home/xxx"
args.from_file = False
+ args.dry_run = False
__main__.f_clone(args)
cmds = ["git", "clone", args.clonee]
mock_run.assert_called_once_with(cmds, cwd=args.directory)
@@ -204,6 +205,7 @@ def test_clone_with_config_file(*_):
args.preserve_path = False
args.directory = None
args.from_file = True
+ args.dry_run = False
__main__.f_clone(args)
mock_run = utils.run_async.mock
assert mock_run.call_count == 1
@@ -224,6 +226,7 @@ def test_clone_with_preserve_path(*_):
args.directory = None
args.from_file = True
args.preserve_path = True
+ args.dry_run = False
__main__.f_clone(args)
mock_run = utils.run_async.mock
assert mock_run.call_count == 1
diff --git a/tests/test_utils.py b/tests/test_utils.py
index acf9853..1e4f125 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",
),
],
)