11import typer
2+ import os
23
34from .utils import Package , Repo , Test
45
@@ -42,48 +43,42 @@ def main(
4243 raise typer .Exit ()
4344
4445
45- @repo .command ()
46- def status (
47- repo_name : str = typer .Argument (None ),
48- all_repos : bool = typer .Option (
49- False , "--all-repos" , "-a" , help = "Show status of all repos"
50- ),
51- reset : bool = typer .Option (
52- False , "--reset" , "-r" , help = "Reset the status of the repository"
53- ),
54- ):
55- repo = Repo ()
56- if reset :
57- repo .set_reset (reset )
58- repo_command (
59- all_repos ,
60- repo_name ,
61- all_msg = "Showing status for all repositories..." ,
62- missing_msg = "Please specify a repository name or use --all-repos to show all repositories." ,
63- single_func = lambda name : repo .get_repo_status (name ),
64- all_func = lambda name : repo .get_repo_status (name ),
65- )
66-
67-
6846@repo .command ()
6947def branch (
7048 repo_name : str = typer .Argument (None ),
7149 branch_name : str = typer .Argument (None ),
50+ list_branches : bool = typer .Option (
51+ False , "--list-branches" , "-l" , help = "List branches of the repository"
52+ ),
7253 all_repos : bool = typer .Option (
7354 False , "--all-repos" , "-a" , help = "Show branches of all repositories"
7455 ),
7556):
57+ """
58+ Checkout or create a branch in a repository.
59+ If branch_name is provided, switch to that branch or create it if it doesn't exist.
60+ If --all-repos is used, show branches for all repositories.
61+ """
7662 repo = Repo ()
7763 if branch_name :
7864 repo .set_branch (branch_name )
7965
66+ # else:
67+ # typer.echo(
68+ # typer.style(
69+ # "Create or set branch cannot be used with --all-repos.",
70+ # fg=typer.colors.RED,
71+ # )
72+ # )
73+ # return
74+
8075 repo_command (
8176 all_repos ,
8277 repo_name ,
8378 all_msg = "Showing branches for all repositories..." ,
8479 missing_msg = "Please specify a repository name or use --all-repos to show branches of all repositories." ,
85- single_func = lambda name : repo .get_repo_branches ( name ),
86- all_func = lambda name : repo .get_repo_branches ( name ),
80+ single_func = lambda repo_name : repo .get_repo_branch ( repo_name ),
81+ all_func = lambda repo_name : repo .get_repo_branch ( repo_name ),
8782 )
8883
8984
@@ -97,6 +92,12 @@ def clone(
9792 False , "--install" , "-i" , help = "Install after cloning"
9893 ),
9994):
95+ """
96+ Clone a repository.
97+ If --all-repos is used, clone all repositories.
98+ If --install is used, install the package after cloning.
99+ """
100+
100101 def clone_repo (name ):
101102 Repo ().clone_repo (name )
102103 if install :
@@ -120,17 +121,23 @@ def commit(
120121 ),
121122 message : str = typer .Argument (None , help = "Commit message" ),
122123):
124+ """
125+ Commit changes in a repository with message provided or prompt for message.
126+ """
127+
128+ if all_repos :
129+ typer .echo (
130+ typer .style ("Commit cannot be used with --all-repos." , fg = typer .colors .RED )
131+ )
132+
123133 def do_commit (name ):
124- if not message :
125- typer .echo (typer .style ("Commit message is required." , fg = typer .colors .RED ))
126- raise typer .Exit (1 )
127134 Repo ().commit_repo (name , message )
128135
129136 repo_command (
130137 all_repos ,
131138 repo_name ,
132139 all_msg = "Committing all repositories..." ,
133- missing_msg = "Please specify a repository name or use --all-repos to commit all repositories ." ,
140+ missing_msg = "Please specify a repository name." ,
134141 single_func = do_commit ,
135142 all_func = do_commit ,
136143 )
@@ -146,6 +153,12 @@ def delete(
146153 False , "--uninstall" , "-u" , help = "Uninstall after deleting"
147154 ),
148155):
156+ """
157+ Delete the specified repository.
158+ If --all-repos is used, delete all repositories.
159+ If --uninstall is used, uninstall the package before deleting.
160+ """
161+
149162 def do_delete (name ):
150163 if uninstall :
151164 Package ().uninstall_package (name )
@@ -169,13 +182,17 @@ def install(
169182 False , "--all-repos" , "-a" , help = "Install all repositories"
170183 ),
171184):
185+ """
186+ Install Python package found in the specified repository.
187+ If --all-repos is used, install packages for all repositories.
188+ """
172189 repo_command (
173190 all_repos ,
174191 repo_name ,
175192 all_msg = "Installing all repositories..." ,
176193 missing_msg = "Please specify a repository name or use --all-repos to install all repositories." ,
177- single_func = lambda name : Package ().install_package (name ),
178- all_func = lambda name : Package ().install_package (name ),
194+ single_func = lambda repo_name : Package ().install_package (repo_name ),
195+ all_func = lambda repo_name : Package ().install_package (repo_name ),
179196 )
180197
181198
@@ -186,13 +203,17 @@ def log(
186203 False , "--all-repos" , "-a" , help = "Show logs of all repositories"
187204 ),
188205):
206+ """
207+ Show logs for the specified repository.
208+ If --all-repos is used, show logs for all repositories.
209+ """
189210 repo_command (
190211 all_repos ,
191212 repo_name ,
192213 all_msg = "Showing logs for all repositories..." ,
193214 missing_msg = "Please specify a repository name or use --all-repos to show logs of all repositories." ,
194- single_func = lambda name : Repo ().get_repo_log (repo_name ),
195- all_func = lambda name : Repo ().get_repo_log (repo_name ),
215+ single_func = lambda repo_name : Repo ().get_repo_log (repo_name ),
216+ all_func = lambda repo_name : Repo ().get_repo_log (repo_name ),
196217 )
197218
198219
@@ -203,13 +224,17 @@ def open(
203224 False , "--all-repos" , "-a" , help = "Open all repositories"
204225 ),
205226):
227+ """
228+ Open the specified repository in the default web browser.
229+ If --all-repos is used, open all repositories.
230+ """
206231 repo_command (
207232 all_repos ,
208233 repo_name ,
209234 all_msg = "Opening all repositories..." ,
210235 missing_msg = "Please specify a repository name or use --all-repos to open all repositories." ,
211- single_func = lambda name : Repo ().open_repo (repo_name ),
212- all_func = lambda name : Repo ().open_repo (repo_name ),
236+ single_func = lambda repo_name : Repo ().open_repo (repo_name ),
237+ all_func = lambda repo_name : Repo ().open_repo (repo_name ),
213238 )
214239
215240
@@ -221,16 +246,45 @@ def origin(
221246 False , "--all-repos" , "-a" , help = "Show origin of all repositories"
222247 ),
223248):
249+ """
250+ Show or set the origin of a repository.
251+ """
224252 repo = Repo ()
253+ if repo_user and all_repos :
254+ typer .echo (
255+ typer .style (
256+ "Set origin cannot be used with --all-repos." ,
257+ fg = typer .colors .RED ,
258+ )
259+ )
260+ return
225261 if repo_user :
226262 repo .set_user (repo_user )
263+
227264 repo_command (
228265 all_repos ,
229266 repo_name ,
230267 all_msg = "Showing origin for all repositories..." ,
231268 missing_msg = "Please specify a repository name or use --all-repos to show origins of all repositories." ,
232269 single_func = lambda name : repo .get_repo_origin (name ),
233- all_func = lambda name : repo .get_repo_origin (name ),
270+ all_func = lambda repo_name : repo .get_repo_origin (repo_name ),
271+ )
272+
273+
274+ @repo .command ()
275+ def patch (
276+ repo_name : str = typer .Argument (None ),
277+ ):
278+ """
279+ Create an evergreen patch for the specified repository.
280+ """
281+ repo_command (
282+ False ,
283+ repo_name ,
284+ all_msg = "Running evergreen..." ,
285+ missing_msg = "Please specify a repository name." ,
286+ single_func = lambda repo_name : Test ().patch_repo (repo_name ),
287+ all_func = lambda repo_name : Test ().patch_repo (repo_name ),
234288 )
235289
236290
@@ -241,67 +295,124 @@ def pr(
241295 False , "--all-repos" , "-a" , help = "Create pull requests for all repositories"
242296 ),
243297):
298+ """
299+ Create a pull request for the specified repository.
300+ """
244301 repo_command (
245302 all_repos ,
246303 repo_name ,
247304 all_msg = "Creating pull requests for all repositories..." ,
248305 missing_msg = "Please specify a repository name or use --all-repos to create pull requests for all repositories." ,
249- single_func = lambda name : Repo ().create_pr (repo_name ),
250- all_func = lambda name : Repo ().create_pr (repo_name ),
306+ single_func = lambda repo_name : Repo ().create_pr (repo_name ),
307+ all_func = lambda repo_name : Repo ().create_pr (repo_name ),
251308 )
252309
253310
254311@repo .command ()
255- def sync (
312+ def reset (
256313 repo_name : str = typer .Argument (None ),
257314 all_repos : bool = typer .Option (
258- False , "--all-repos" , "-a" , help = "Sync all repositories"
315+ False , "--all-repos" , "-a" , help = "Reset all repositories"
259316 ),
260317):
318+ """
319+ Reset a repository to its initial state.
320+ If --all-repos is used, reset all repositories.
321+ """
322+
323+ def reset_repo (name ):
324+ Repo ().reset_repo (name )
325+
261326 repo_command (
262327 all_repos ,
263328 repo_name ,
264- all_msg = "Syncing all repositories..." ,
265- missing_msg = "Please specify a repository name or use --all-repos to sync all repositories." ,
266- single_func = lambda name : Repo (). sync_repo ( name ) ,
267- all_func = lambda name : Repo (). sync_repo ( name ) ,
329+ all_msg = "Resetting all repositories..." ,
330+ missing_msg = "Please specify a repository name or use --all-repos to reset all repositories." ,
331+ single_func = reset_repo ,
332+ all_func = reset_repo ,
268333 )
269334
270335
271336@repo .command ()
272- def patch (
337+ def status (
273338 repo_name : str = typer .Argument (None ),
339+ all_repos : bool = typer .Option (
340+ False , "--all-repos" , "-a" , help = "Show status of all repos"
341+ ),
274342):
343+ """
344+ Show the status of a repository.
345+ If --all-repos is used, show the status for all repositories.
346+ """
347+ repo = Repo ()
275348 repo_command (
276- False ,
349+ all_repos ,
277350 repo_name ,
278- all_msg = "Running evergreen ..." ,
279- missing_msg = "Please specify a repository name." ,
280- single_func = lambda name : Test (). patch_repo ( name ),
281- all_func = lambda name : Test (). patch_repo ( name ),
351+ all_msg = "Showing status for all repositories ..." ,
352+ missing_msg = "Please specify a repository name or use --all-repos to show all repositories ." ,
353+ single_func = lambda repo_name : repo . get_repo_status ( repo_name ),
354+ all_func = lambda repo_name : repo . get_repo_status ( repo_name ),
282355 )
283356
284357
285358@repo .command ()
286- def test (
359+ def sync (
287360 repo_name : str = typer .Argument (None ),
288- modules : list [str ] = typer .Argument (None ),
289361 all_repos : bool = typer .Option (
290- False , "--all-repos" , "-a" , help = "Run tests for all repositories"
362+ False , "--all-repos" , "-a" , help = "Sync all repositories"
291363 ),
364+ ):
365+ """
366+ Sync a repository with its remote counterpart.
367+ If --all-repos is used, sync all repositories.
368+ """
369+ repo = Repo ()
370+ if not repo .map :
371+ typer .echo (
372+ typer .style (
373+ f"No repositories found in { os .path .join (os .getcwd (), repo .pyproject_file )} ." ,
374+ fg = typer .colors .RED ,
375+ )
376+ )
377+ raise typer .Exit ()
378+
379+ repo_command (
380+ all_repos ,
381+ repo_name ,
382+ all_msg = "Syncing all repositories..." ,
383+ missing_msg = "Please specify a repository name or use --all-repos to sync all repositories." ,
384+ single_func = lambda repo_name : repo .sync_repo (repo_name ),
385+ all_func = lambda repo_name : repo .sync_repo (repo_name ),
386+ )
387+
388+
389+ @repo .command ()
390+ def test (
391+ repo_name : str = typer .Argument (None ),
392+ modules : list [str ] = typer .Argument (None ),
292393 keep_db : bool = typer .Option (
293394 False , "--keepdb" , help = "Keep the database after tests"
294395 ),
295396 keyword : str = typer .Option (
296397 None , "--keyword" , "-k" , help = "Run tests with the specified keyword"
297398 ),
399+ list_tests : bool = typer .Option (
400+ False , "--list-tests" , "-l" , help = "List tests instead of running them"
401+ ),
298402 setenv : bool = typer .Option (
299403 False ,
300404 "--setenv" ,
301405 "-s" ,
302406 help = "Set DJANGO_SETTINGS_MODULE environment variable" ,
303407 ),
304408):
409+ """
410+ Run tests for a repository.
411+ If --modules is provided, run tests for the specified modules.
412+ If --keepdb is used, keep the database after tests.
413+ If --keyword is provided, run tests with the specified keyword.
414+ If --setenv is used, set the DJANGO_SETTINGS_MODULE environment variable.
415+ """
305416 test_runner = Test ()
306417 if modules :
307418 test_runner .set_modules (modules )
@@ -311,13 +422,15 @@ def test(
311422 test_runner .set_keyword (keyword )
312423 if setenv :
313424 test_runner .set_env (setenv )
425+ if list_tests :
426+ test_runner .set_list_tests (list_tests )
314427
315428 repo_command (
316- all_repos ,
429+ False ,
317430 repo_name ,
318- all_msg = "Running tests for all repositories..." ,
319- missing_msg = "Please specify a repository name or use --all-repos to run tests for all repositories ." ,
320- single_func = lambda name : test_runner .run_tests (name ),
321- all_func = lambda name : test_runner .run_tests ( name ) ,
322- repo_list = test_runner . map , # Use Test().map instead of Repo().map
431+ all_msg = None ,
432+ missing_msg = "Please specify a repository name." ,
433+ single_func = lambda repo_name : test_runner .run_tests (repo_name ),
434+ repo_list = test_runner .map ,
435+ all_func = None ,
323436 )
0 commit comments