1
1
import typer
2
+ import os
2
3
3
4
from .utils import Package , Repo , Test
4
5
@@ -42,48 +43,42 @@ def main(
42
43
raise typer .Exit ()
43
44
44
45
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
-
68
46
@repo .command ()
69
47
def branch (
70
48
repo_name : str = typer .Argument (None ),
71
49
branch_name : str = typer .Argument (None ),
50
+ list_branches : bool = typer .Option (
51
+ False , "--list-branches" , "-l" , help = "List branches of the repository"
52
+ ),
72
53
all_repos : bool = typer .Option (
73
54
False , "--all-repos" , "-a" , help = "Show branches of all repositories"
74
55
),
75
56
):
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
+ """
76
62
repo = Repo ()
77
63
if branch_name :
78
64
repo .set_branch (branch_name )
79
65
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
+
80
75
repo_command (
81
76
all_repos ,
82
77
repo_name ,
83
78
all_msg = "Showing branches for all repositories..." ,
84
79
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 ),
87
82
)
88
83
89
84
@@ -97,6 +92,12 @@ def clone(
97
92
False , "--install" , "-i" , help = "Install after cloning"
98
93
),
99
94
):
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
+
100
101
def clone_repo (name ):
101
102
Repo ().clone_repo (name )
102
103
if install :
@@ -120,17 +121,23 @@ def commit(
120
121
),
121
122
message : str = typer .Argument (None , help = "Commit message" ),
122
123
):
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
+
123
133
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 )
127
134
Repo ().commit_repo (name , message )
128
135
129
136
repo_command (
130
137
all_repos ,
131
138
repo_name ,
132
139
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." ,
134
141
single_func = do_commit ,
135
142
all_func = do_commit ,
136
143
)
@@ -146,6 +153,12 @@ def delete(
146
153
False , "--uninstall" , "-u" , help = "Uninstall after deleting"
147
154
),
148
155
):
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
+
149
162
def do_delete (name ):
150
163
if uninstall :
151
164
Package ().uninstall_package (name )
@@ -169,13 +182,17 @@ def install(
169
182
False , "--all-repos" , "-a" , help = "Install all repositories"
170
183
),
171
184
):
185
+ """
186
+ Install Python package found in the specified repository.
187
+ If --all-repos is used, install packages for all repositories.
188
+ """
172
189
repo_command (
173
190
all_repos ,
174
191
repo_name ,
175
192
all_msg = "Installing all repositories..." ,
176
193
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 ),
179
196
)
180
197
181
198
@@ -186,13 +203,17 @@ def log(
186
203
False , "--all-repos" , "-a" , help = "Show logs of all repositories"
187
204
),
188
205
):
206
+ """
207
+ Show logs for the specified repository.
208
+ If --all-repos is used, show logs for all repositories.
209
+ """
189
210
repo_command (
190
211
all_repos ,
191
212
repo_name ,
192
213
all_msg = "Showing logs for all repositories..." ,
193
214
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 ),
196
217
)
197
218
198
219
@@ -203,13 +224,17 @@ def open(
203
224
False , "--all-repos" , "-a" , help = "Open all repositories"
204
225
),
205
226
):
227
+ """
228
+ Open the specified repository in the default web browser.
229
+ If --all-repos is used, open all repositories.
230
+ """
206
231
repo_command (
207
232
all_repos ,
208
233
repo_name ,
209
234
all_msg = "Opening all repositories..." ,
210
235
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 ),
213
238
)
214
239
215
240
@@ -221,16 +246,45 @@ def origin(
221
246
False , "--all-repos" , "-a" , help = "Show origin of all repositories"
222
247
),
223
248
):
249
+ """
250
+ Show or set the origin of a repository.
251
+ """
224
252
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
225
261
if repo_user :
226
262
repo .set_user (repo_user )
263
+
227
264
repo_command (
228
265
all_repos ,
229
266
repo_name ,
230
267
all_msg = "Showing origin for all repositories..." ,
231
268
missing_msg = "Please specify a repository name or use --all-repos to show origins of all repositories." ,
232
269
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 ),
234
288
)
235
289
236
290
@@ -241,67 +295,124 @@ def pr(
241
295
False , "--all-repos" , "-a" , help = "Create pull requests for all repositories"
242
296
),
243
297
):
298
+ """
299
+ Create a pull request for the specified repository.
300
+ """
244
301
repo_command (
245
302
all_repos ,
246
303
repo_name ,
247
304
all_msg = "Creating pull requests for all repositories..." ,
248
305
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 ),
251
308
)
252
309
253
310
254
311
@repo .command ()
255
- def sync (
312
+ def reset (
256
313
repo_name : str = typer .Argument (None ),
257
314
all_repos : bool = typer .Option (
258
- False , "--all-repos" , "-a" , help = "Sync all repositories"
315
+ False , "--all-repos" , "-a" , help = "Reset all repositories"
259
316
),
260
317
):
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
+
261
326
repo_command (
262
327
all_repos ,
263
328
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 ,
268
333
)
269
334
270
335
271
336
@repo .command ()
272
- def patch (
337
+ def status (
273
338
repo_name : str = typer .Argument (None ),
339
+ all_repos : bool = typer .Option (
340
+ False , "--all-repos" , "-a" , help = "Show status of all repos"
341
+ ),
274
342
):
343
+ """
344
+ Show the status of a repository.
345
+ If --all-repos is used, show the status for all repositories.
346
+ """
347
+ repo = Repo ()
275
348
repo_command (
276
- False ,
349
+ all_repos ,
277
350
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 ),
282
355
)
283
356
284
357
285
358
@repo .command ()
286
- def test (
359
+ def sync (
287
360
repo_name : str = typer .Argument (None ),
288
- modules : list [str ] = typer .Argument (None ),
289
361
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"
291
363
),
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 ),
292
393
keep_db : bool = typer .Option (
293
394
False , "--keepdb" , help = "Keep the database after tests"
294
395
),
295
396
keyword : str = typer .Option (
296
397
None , "--keyword" , "-k" , help = "Run tests with the specified keyword"
297
398
),
399
+ list_tests : bool = typer .Option (
400
+ False , "--list-tests" , "-l" , help = "List tests instead of running them"
401
+ ),
298
402
setenv : bool = typer .Option (
299
403
False ,
300
404
"--setenv" ,
301
405
"-s" ,
302
406
help = "Set DJANGO_SETTINGS_MODULE environment variable" ,
303
407
),
304
408
):
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
+ """
305
416
test_runner = Test ()
306
417
if modules :
307
418
test_runner .set_modules (modules )
@@ -311,13 +422,15 @@ def test(
311
422
test_runner .set_keyword (keyword )
312
423
if setenv :
313
424
test_runner .set_env (setenv )
425
+ if list_tests :
426
+ test_runner .set_list_tests (list_tests )
314
427
315
428
repo_command (
316
- all_repos ,
429
+ False ,
317
430
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 ,
323
436
)
0 commit comments