A README.md => README.md +20 -0
@@ 0,0 1,20 @@
+# myrepos-utils
+
+## Usage
+
+Let's say you have the following repositories configured in `~/.mrconfig`:
+
+```
+[src/github/owner1/projA]
+...
+
+[src/github/owner2/projB]
+...
+```
+
+This will let you quickly switch to `~/src/github/owner1/projA`:
+```
+cd (mr-utils find github projA)
+```
+
+If there are multiple matches, they will be printed out.
M myrepos_utils/cli.py => myrepos_utils/cli.py +6 -4
@@ 23,9 23,11 @@ def cli():
pass
-@cli.command(help="cd to a directory tracked by myrepos")
-@click.argument("paths", nargs=-1)
-def cd(paths: list[str]):
+@cli.command(help="find repo directories tracked by myrepos")
+@click.argument("query", nargs=-1)
+def find(query: list[str]):
import os
- os.chdir(utils.find_dir(paths))
+ matches = utils.find_repo(query)
+ for repo in matches:
+ click.echo(repo)
M myrepos_utils/utils.py => myrepos_utils/utils.py +19 -2
@@ 12,5 12,22 @@
# For more information on free software, see
# <https://www.gnu.org/philosophy/free-sw.en.html>.
-def find_dir(paths: list[str], config = None):
- raise NotImplementedError
+import configparser
+import os
+
+CONFIG = configparser.ConfigParser()
+CONFIG.read(os.path.expanduser("~/.mrconfig"))
+
+
+def get_repos(config: configparser.ConfigParser = CONFIG) -> list[str]:
+ return list(config.keys())
+
+
+def find_repo(
+ query: list[str], config: configparser.ConfigParser = CONFIG
+) -> list[str]:
+ import re
+
+ repos = get_repos(config)
+ r = f".*{'.*'.join(query)}.*"
+ return [os.path.expanduser(f"~/{repo}") for repo in repos if re.match(r, repo)]