12
12
from .main import main
13
13
14
14
15
- def print_repositories (opts , data , page_info = None , show_list_info = True ):
15
+ def print_repositories (opts , data , page_info = None , show_list_info = True , show_all = False ):
16
16
"""Print repositories as a table or output in another format."""
17
17
headers = [
18
18
"Name" ,
@@ -51,7 +51,10 @@ def print_repositories(opts, data, page_info=None, show_list_info=True):
51
51
num_results = len (data )
52
52
list_suffix = "repositor%s visible" % ("ies" if num_results != 1 else "y" )
53
53
utils .pretty_print_list_info (
54
- num_results = num_results , page_info = page_info , suffix = list_suffix
54
+ num_results = num_results ,
55
+ page_info = page_info ,
56
+ suffix = list_suffix ,
57
+ show_all = show_all ,
55
58
)
56
59
57
60
@@ -83,7 +86,7 @@ def repositories(ctx, opts): # pylink: disable=unused-argument
83
86
required = False ,
84
87
)
85
88
@click .pass_context
86
- def get (ctx , opts , owner_repo , page , page_size ):
89
+ def get (ctx , opts , owner_repo , page , page_size , show_all ):
87
90
"""
88
91
List repositories for a namespace (owner).
89
92
@@ -95,12 +98,23 @@ def get(ctx, opts, owner_repo, page, page_size):
95
98
96
99
If OWNER isn't specified it'll default to the currently authenticated user
97
100
(if any). If you're unauthenticated, no results will be returned.
101
+
102
+ Options:
103
+ -p, --page INTEGER The page of results to show.
104
+ -l, --page-size INTEGER The number of results to return per page.
105
+ --show-all Show all results by automatically paginating through all pages.
98
106
"""
107
+ if show_all :
108
+ if page is not None or page_size is not None :
109
+ raise click .UsageError (
110
+ "--show-all cannot be used with --page or --page-size"
111
+ )
112
+ elif page is None and page_size is None :
113
+ show_all = True
114
+
99
115
# Use stderr for messages if the output is something else (e.g. # JSON)
100
116
use_stderr = opts .output != "pretty"
101
117
102
- click .echo ("Getting list of repositories ... " , nl = False , err = use_stderr )
103
-
104
118
if isinstance (owner_repo , list ):
105
119
if len (owner_repo ) == 1 :
106
120
owner = owner_repo [0 ]
@@ -109,26 +123,49 @@ def get(ctx, opts, owner_repo, page, page_size):
109
123
owner , repo = owner_repo
110
124
if isinstance (owner_repo , str ):
111
125
repo = None
112
-
113
126
if owner_repo :
114
127
owner = owner_repo
115
128
else :
116
129
owner = None
117
130
131
+ if show_all :
132
+ if owner :
133
+ click .echo (
134
+ f"Retrieving all repositories for { owner } . This may take a while..." ,
135
+ err = use_stderr ,
136
+ )
137
+ else :
138
+ click .echo (
139
+ "Retrieving all repositories. This may take a while..." , err = use_stderr
140
+ )
141
+ else :
142
+ click .echo ("Getting list of repositories ... " , nl = False , err = use_stderr )
143
+
118
144
context_msg = "Failed to get list of repositories!"
119
145
with handle_api_exceptions (ctx , opts = opts , context_msg = context_msg ):
120
146
with maybe_spinner (opts ):
121
- repos_ , page_info = api .list_repos (
122
- owner = owner , repo = repo , page = page , page_size = page_size
123
- )
147
+ if show_all :
148
+ repos_ , page_info = utils .get_all_pages (
149
+ api .list_repos ,
150
+ owner = owner ,
151
+ repo = repo ,
152
+ )
153
+ else :
154
+ repos_ , page_info = api .list_repos (
155
+ owner = owner , repo = repo , page = page , page_size = page_size
156
+ )
124
157
125
158
click .secho ("OK" , fg = "green" , err = use_stderr )
126
159
127
160
if utils .maybe_print_as_json (opts , repos_ , page_info ):
128
161
return
129
162
130
163
print_repositories (
131
- opts = opts , data = repos_ , show_list_info = False , page_info = page_info
164
+ opts = opts ,
165
+ data = repos_ ,
166
+ show_list_info = False ,
167
+ page_info = page_info ,
168
+ show_all = show_all ,
132
169
)
133
170
134
171
0 commit comments