11import typer
22
3- from .utils import Repo , Test
3+ from .utils import Package , Repo , Test
44
55repo = typer .Typer ()
66
77
8+ def repo_command (
9+ all_repos : bool ,
10+ repo_name : str ,
11+ all_msg : str ,
12+ missing_msg : str ,
13+ single_func ,
14+ all_func ,
15+ fg = typer .colors .CYAN ,
16+ repo_list = None ,
17+ ):
18+ if all_repos :
19+ if all_msg :
20+ typer .echo (typer .style (all_msg , fg = fg ))
21+ for name in repo_list if repo_list is not None else Repo ().map :
22+ all_func (name )
23+ elif repo_name :
24+ single_func (repo_name )
25+ else :
26+ typer .echo (typer .style (missing_msg , fg = typer .colors .YELLOW ))
27+
28+
29+ @repo .callback (invoke_without_command = True )
30+ def main (
31+ ctx : typer .Context ,
32+ list_repos : bool = typer .Option (
33+ False , "--list-repos" , "-l" , help = "List available repositories."
34+ ),
35+ ):
36+ if list_repos :
37+ Repo ().list_repos ()
38+ raise typer .Exit () # End, no further action
39+
40+ if ctx .invoked_subcommand is None :
41+ typer .echo (ctx .get_help ())
42+ raise typer .Exit ()
43+
44+
845@repo .command ()
946def status (
1047 repo_name : str = typer .Argument (None ),
1148 all_repos : bool = typer .Option (
1249 False , "--all-repos" , "-a" , help = "Show status of all repos"
1350 ),
1451):
15- """Show the status of the specified Git repository."""
16- if all_repos :
17- typer .echo (
18- typer .style ("Showing status for all repositories..." , fg = typer .colors .CYAN )
19- )
20- for repo_name in Repo ().map :
21- Repo ().get_repo_status (repo_name )
22- elif repo_name :
23- Repo ().get_repo_status (repo_name )
24- else :
25- typer .echo (
26- typer .style (
27- "Please specify a repository name or use --all-repos to show all repositories." ,
28- fg = typer .colors .YELLOW ,
29- )
30- )
52+ repo_command (
53+ all_repos ,
54+ repo_name ,
55+ all_msg = "Showing status for all repositories..." ,
56+ missing_msg = "Please specify a repository name or use --all-repos to show all repositories." ,
57+ single_func = lambda name : Repo ().get_repo_status (name ),
58+ all_func = lambda name : Repo ().get_repo_status (name ),
59+ )
60+
61+
62+ @repo .command ()
63+ def branch (
64+ repo_name : str = typer .Argument (None ),
65+ branch_name : str = typer .Argument (None ),
66+ all_repos : bool = typer .Option (
67+ False , "--all-repos" , "-a" , help = "Show branches of all repositories"
68+ ),
69+ ):
70+ repo = Repo ()
71+ if branch_name :
72+ repo .set_branch (branch_name )
73+
74+ repo_command (
75+ all_repos ,
76+ repo_name ,
77+ all_msg = "Showing branches for all repositories..." ,
78+ missing_msg = "Please specify a repository name or use --all-repos to show branches of all repositories." ,
79+ single_func = lambda name : repo .get_repo_branches (name ),
80+ all_func = lambda name : repo .get_repo_branches (name ),
81+ )
3182
3283
3384@repo .command ()
@@ -40,24 +91,45 @@ def clone(
4091 False , "--install" , "-i" , help = "Install after cloning"
4192 ),
4293):
43- """Clone the specified Git repository."""
44- if all_repos :
45- typer .echo (typer .style ("Cloning all repositories..." , fg = typer .colors .CYAN ))
46- for repo_name in Repo ().map :
47- Repo ().clone_repo (repo_name )
48- if install :
49- Repo ().install_package (repo_name )
50- elif repo_name :
51- Repo ().clone_repo (repo_name )
94+ def clone_repo (name ):
95+ Repo ().clone_repo (name )
5296 if install :
53- Repo ().install_package (repo_name )
54- else :
55- typer .echo (
56- typer .style (
57- "Please specify a repository name or use --all-repos to clone all repositories." ,
58- fg = typer .colors .YELLOW ,
59- )
60- )
97+ Package ().install_package (name )
98+
99+ repo_command (
100+ all_repos ,
101+ repo_name ,
102+ all_msg = "Cloning all repositories..." ,
103+ missing_msg = "Please specify a repository name or use --all-repos to clone all repositories." ,
104+ single_func = clone_repo ,
105+ all_func = clone_repo ,
106+ )
107+
108+
109+ @repo .command ()
110+ def delete (
111+ repo_name : str = typer .Argument (None ),
112+ all_repos : bool = typer .Option (
113+ False , "--all-repos" , "-a" , help = "Delete all repositories"
114+ ),
115+ uninstall : bool = typer .Option (
116+ False , "--uninstall" , "-u" , help = "Uninstall after deleting"
117+ ),
118+ ):
119+ def do_delete (name ):
120+ if uninstall :
121+ Package ().uninstall_package (name )
122+ Repo ().delete_repo (name )
123+
124+ repo_command (
125+ all_repos ,
126+ repo_name ,
127+ all_msg = "Deleting all repositories..." ,
128+ missing_msg = "Please specify a repository name or use --all-repos to delete all repositories." ,
129+ single_func = do_delete ,
130+ all_func = do_delete ,
131+ fg = typer .colors .RED , # Red for delete
132+ )
61133
62134
63135@repo .command ()
@@ -67,20 +139,31 @@ def install(
67139 False , "--all-repos" , "-a" , help = "Install all repositories"
68140 ),
69141):
70- """Install the specified Git repository."""
71- if all_repos :
72- typer .echo (typer .style ("Installing all repositories..." , fg = typer .colors .CYAN ))
73- for repo_name in Repo ().map :
74- Repo ().install_package (repo_name )
75- elif repo_name :
76- Repo ().install_package (repo_name )
77- else :
78- typer .echo (
79- typer .style (
80- "Please specify a repository name or use --all-repos to install all repositories." ,
81- fg = typer .colors .YELLOW ,
82- )
83- )
142+ repo_command (
143+ all_repos ,
144+ repo_name ,
145+ all_msg = "Installing all repositories..." ,
146+ missing_msg = "Please specify a repository name or use --all-repos to install all repositories." ,
147+ single_func = lambda name : Package ().install_package (name ),
148+ all_func = lambda name : Package ().install_package (name ),
149+ )
150+
151+
152+ @repo .command ()
153+ def origin (
154+ repo_name : str = typer .Argument (None ),
155+ all_repos : bool = typer .Option (
156+ False , "--all-repos" , "-a" , help = "Show origin of all repositories"
157+ ),
158+ ):
159+ repo_command (
160+ all_repos ,
161+ repo_name ,
162+ all_msg = "Showing origin for all repositories..." ,
163+ missing_msg = "Please specify a repository name or use --all-repos to show origins of all repositories." ,
164+ single_func = lambda name : Repo ().get_repo_origin (name ),
165+ all_func = lambda name : Repo ().get_repo_origin (name ),
166+ )
84167
85168
86169@repo .command ()
@@ -90,28 +173,22 @@ def sync(
90173 False , "--all-repos" , "-a" , help = "Sync all repositories"
91174 ),
92175):
93- """Sync the specified Git repository."""
94- if all_repos :
95- typer .echo (typer .style ("Syncing all repositories..." , fg = typer .colors .CYAN ))
96- for repo_name in Repo ().map :
97- Repo ().sync_repo (repo_name )
98- elif repo_name :
99- Repo ().sync_repo (repo_name )
100- else :
101- typer .echo (
102- typer .style (
103- "Please specify a repository name or use --all-repos to sync all repositories." ,
104- fg = typer .colors .YELLOW ,
105- )
106- )
176+ repo_command (
177+ all_repos ,
178+ repo_name ,
179+ all_msg = "Syncing all repositories..." ,
180+ missing_msg = "Please specify a repository name or use --all-repos to sync all repositories." ,
181+ single_func = lambda name : Repo ().sync_repo (name ),
182+ all_func = lambda name : Repo ().sync_repo (name ),
183+ )
107184
108185
109186@repo .command ()
110187def test (
111188 repo_name : str = typer .Argument (None ),
112189 modules : list [str ] = typer .Argument (None ),
113190 all_repos : bool = typer .Option (
114- False , "--all-repos" , "-a" , help = "Sync all repositories"
191+ False , "--all-repos" , "-a" , help = "Run tests for all repositories"
115192 ),
116193 keep_db : bool = typer .Option (
117194 False , "--keepdb" , help = "Keep the database after tests"
@@ -123,31 +200,25 @@ def test(
123200 False ,
124201 "--setenv" ,
125202 "-s" ,
126- help = "Set DJANGO_SETTINGS_MODULE" " environment variable" ,
203+ help = "Set DJANGO_SETTINGS_MODULE environment variable" ,
127204 ),
128205):
129- """Run tests for the specified Git repository."""
130- repo = Test ()
206+ test_runner = Test ()
131207 if modules :
132- repo .set_modules (modules )
208+ test_runner .set_modules (modules )
133209 if keep_db :
134- repo .set_keep_db (keep_db )
210+ test_runner .set_keep_db (keep_db )
135211 if keyword :
136- repo .set_keyword (keyword )
212+ test_runner .set_keyword (keyword )
137213 if setenv :
138- repo .set_env (setenv )
139- if all_repos :
140- typer .echo (
141- typer .style ("Running tests for all repositories..." , fg = typer .colors .CYAN )
142- )
143- for repo_name in repo .map :
144- repo .run_tests (repo_name )
145- elif repo_name :
146- repo .run_tests (repo_name )
147- else :
148- typer .echo (
149- typer .style (
150- "Please specify a repository name or use --all-repos to run tests for all repositories." ,
151- fg = typer .colors .YELLOW ,
152- )
153- )
214+ test_runner .set_env (setenv )
215+
216+ repo_command (
217+ all_repos ,
218+ repo_name ,
219+ all_msg = "Running tests for all repositories..." ,
220+ missing_msg = "Please specify a repository name or use --all-repos to run tests for all repositories." ,
221+ single_func = lambda name : test_runner .run_tests (name ),
222+ all_func = lambda name : test_runner .run_tests (name ),
223+ repo_list = test_runner .map , # Use Test().map instead of Repo().map
224+ )
0 commit comments