1
1
import typer
2
2
3
- from .utils import Repo , Test
3
+ from .utils import Package , Repo , Test
4
4
5
5
repo = typer .Typer ()
6
6
7
7
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
+
8
45
@repo .command ()
9
46
def status (
10
47
repo_name : str = typer .Argument (None ),
11
48
all_repos : bool = typer .Option (
12
49
False , "--all-repos" , "-a" , help = "Show status of all repos"
13
50
),
14
51
):
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
+ )
31
82
32
83
33
84
@repo .command ()
@@ -40,24 +91,45 @@ def clone(
40
91
False , "--install" , "-i" , help = "Install after cloning"
41
92
),
42
93
):
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 )
52
96
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
+ )
61
133
62
134
63
135
@repo .command ()
@@ -67,20 +139,31 @@ def install(
67
139
False , "--all-repos" , "-a" , help = "Install all repositories"
68
140
),
69
141
):
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
+ )
84
167
85
168
86
169
@repo .command ()
@@ -90,28 +173,22 @@ def sync(
90
173
False , "--all-repos" , "-a" , help = "Sync all repositories"
91
174
),
92
175
):
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
+ )
107
184
108
185
109
186
@repo .command ()
110
187
def test (
111
188
repo_name : str = typer .Argument (None ),
112
189
modules : list [str ] = typer .Argument (None ),
113
190
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"
115
192
),
116
193
keep_db : bool = typer .Option (
117
194
False , "--keepdb" , help = "Keep the database after tests"
@@ -123,31 +200,25 @@ def test(
123
200
False ,
124
201
"--setenv" ,
125
202
"-s" ,
126
- help = "Set DJANGO_SETTINGS_MODULE" " environment variable" ,
203
+ help = "Set DJANGO_SETTINGS_MODULE environment variable" ,
127
204
),
128
205
):
129
- """Run tests for the specified Git repository."""
130
- repo = Test ()
206
+ test_runner = Test ()
131
207
if modules :
132
- repo .set_modules (modules )
208
+ test_runner .set_modules (modules )
133
209
if keep_db :
134
- repo .set_keep_db (keep_db )
210
+ test_runner .set_keep_db (keep_db )
135
211
if keyword :
136
- repo .set_keyword (keyword )
212
+ test_runner .set_keyword (keyword )
137
213
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