36
36
# preview) - Update versions in default set of files in the repository.
37
37
python3 scripts/update_android_ios_dependencies.py --dryrun
38
38
39
- # Update versions in default set of files in the repository
39
+ # Update versions in default set of files in the repository.
40
40
python3 scripts/update_android_ios_dependencies.py
41
41
42
+ # Update versions in default set of files in the repository. (allow updating to
43
+ # experimental versions)
44
+ python3 scripts/update_android_ios_dependencies.py --allow_experimental
45
+
42
46
# Update only Android packages
43
47
python3 scripts/update_android_ios_dependencies.py --skip_ios
44
48
74
78
import tempfile
75
79
76
80
from collections import defaultdict
77
- from pkg_resources import packaging
78
81
from xml .etree import ElementTree
82
+ from pkg_resources import packaging
79
83
80
84
81
85
def get_files_from_directory (dirpath , file_extension , file_name = None ,
@@ -152,6 +156,8 @@ def get_files(dirs_and_files, file_extension, file_name=None,
152
156
files .append (abspath )
153
157
return files
154
158
159
+ # Regex to match versions with just digits (ignoring things like -alpha, -beta)
160
+ NON_EXPERIMENTAL_VERSION_RE = re .compile ('[0-9.]+$' )
155
161
156
162
########## iOS pods versions update #######################################
157
163
@@ -178,18 +184,21 @@ def get_files(dirs_and_files, file_extension, file_name=None,
178
184
)
179
185
180
186
181
- def get_pod_versions (specs_repo , pods = PODS , ignore_pods = None ):
187
+ def get_pod_versions (specs_repo , pods = PODS , ignore_pods = None ,
188
+ allow_experimental = False ):
182
189
"""Get available pods and their versions from the specs repo
183
190
184
191
Args:
185
192
local_repo_dir (str): Directory mirroring Cocoapods specs repo
186
193
pods (iterable(str), optional): List of pods whose versions we need.
187
194
Defaults to PODS.
188
195
ignore_pods (list[str], optional): Case insensitive list of substrings
189
- If any of these substrings are present in the pod name, it will not be
196
+ If any of these substrings are present in the pod name, it will not be
190
197
updated.
191
198
Eg: ['foo', 'bar'] will ignore all pods that have 'foo' or
192
199
'bar' in their name. For example, 'test_foo', 'test_foo_baz'
200
+ allow_experimental (bool): Allow experimental versions.
201
+ Eg: 1.2.3-alpha, 1.2.3-beta, 1.2.3-rc
193
202
Returns:
194
203
dict: Map of the form {<str>:list(str)}
195
204
Containing a mapping of podnames to available versions.
@@ -211,12 +220,16 @@ def get_pod_versions(specs_repo, pods=PODS, ignore_pods=None):
211
220
continue
212
221
parent_dir = os .path .dirname (podspec_file )
213
222
version = os .path .basename (parent_dir )
223
+ if not allow_experimental and '-cppsdk' not in version :
224
+ if not re .match (NON_EXPERIMENTAL_VERSION_RE , version ):
225
+ continue
214
226
all_versions [podname ].append (version )
215
227
216
228
return all_versions
217
229
218
230
219
- def get_latest_pod_versions (specs_repo = None , pods = PODS , ignore_pods = None ):
231
+ def get_latest_pod_versions (specs_repo = None , pods = PODS , ignore_pods = None ,
232
+ allow_experimental = None ):
220
233
"""Get latest versions for specified pods.
221
234
222
235
Args:
@@ -228,6 +241,8 @@ def get_latest_pod_versions(specs_repo=None, pods=PODS, ignore_pods=None):
228
241
updated.
229
242
Eg: ['Foo', 'bar'] will ignore all pods that have 'foo' or
230
243
'bar' in their name. For example, 'test_foo', 'test_foo_baz'
244
+ allow_experimental (bool): Allow experimental versions.
245
+ Eg: 1.2.3-alpha, 1.2.3-beta, 1.2.3-rc
231
246
232
247
Returns:
233
248
dict: Map of the form {<str>:<str>} containing a mapping of podnames to
@@ -246,7 +261,8 @@ def get_latest_pod_versions(specs_repo=None, pods=PODS, ignore_pods=None):
246
261
# Temporary directory should be cleaned up after use.
247
262
cleanup_required = True
248
263
249
- all_versions = get_pod_versions (specs_repo , pods , ignore_pods )
264
+ all_versions = get_pod_versions (specs_repo , pods , ignore_pods ,
265
+ allow_experimental )
250
266
if cleanup_required :
251
267
shutil .rmtree (specs_repo )
252
268
@@ -410,7 +426,7 @@ def replace_pod_line(m):
410
426
GMAVEN_GROUP_INDEX = "https://dl.google.com/dl/android/maven2/{0}/group-index.xml"
411
427
412
428
413
- def get_latest_maven_versions (ignore_packages = None ):
429
+ def get_latest_maven_versions (ignore_packages = None , allow_experimental = False ):
414
430
"""Gets latest versions of android packages from google Maven repository.
415
431
416
432
Args:
@@ -420,9 +436,12 @@ def get_latest_maven_versions(ignore_packages=None):
420
436
Eg: ['Foo', 'bar'] will ignore all android packages that have 'foo' or
421
437
'bar' in their name. For example, 'my.android.foo.package',
422
438
'myfoo.android.package'
439
+ allow_experimental (bool): Allow experimental versions.
440
+ Eg: 1.2.3-alpha, 1.2.3-beta, 1.2.3-rc
423
441
424
442
Returns:
425
- [type]: [description]
443
+ dict: Dictionary of the form {<str>: list(str)} containing full name of
444
+ android package as the key and its list of versions as value.
426
445
"""
427
446
if ignore_packages is None :
428
447
ignore_packages = []
@@ -441,8 +460,13 @@ def get_latest_maven_versions(ignore_packages=None):
441
460
if any (ignore_package .lower ().replace ('-' , '_' ) in package_full_name .lower ()
442
461
for ignore_package in ignore_packages ):
443
462
continue
444
- package_version = group_child .attrib ['versions' ].split (',' )[- 1 ]
445
- latest_versions [package_full_name ] = package_version
463
+ versions = group_child .attrib ['versions' ].split (',' )
464
+ if not allow_experimental :
465
+ versions = [version for version in versions
466
+ if re .match (NON_EXPERIMENTAL_VERSION_RE , version ) or '-cppsdk' in version ]
467
+ if versions :
468
+ latest_valid_version = versions [- 1 ]
469
+ latest_versions [package_full_name ] = latest_valid_version
446
470
return latest_versions
447
471
448
472
@@ -638,6 +662,8 @@ def parse_cmdline_args():
638
662
help = "Logging level (debug, warning, info)" )
639
663
parser .add_argument ('--ignore_directories' , nargs = '+' ,
640
664
help = 'Ignore updating any files in these directories (names).' )
665
+ parser .add_argument ('--allow_experimental' , action = 'store_true' ,
666
+ help = 'Allow updating to experimental versions (eg:1.2.3-alpha))' )
641
667
# iOS options
642
668
parser .add_argument ('--skip_ios' , action = 'store_true' ,
643
669
help = 'Skip iOS pod version update completely.' )
@@ -695,7 +721,7 @@ def main():
695
721
696
722
if not args .skip_ios :
697
723
latest_pod_versions_map = get_latest_pod_versions (args .specs_repo , PODS ,
698
- set (args .ignore_ios_pods ))
724
+ set (args .ignore_ios_pods ), args . allow_experimental )
699
725
pod_files = get_files (args .podfiles , file_extension = '' , file_name = 'Podfile' ,
700
726
ignore_directories = set (args .ignore_directories ))
701
727
for pod_file in pod_files :
@@ -705,7 +731,7 @@ def main():
705
731
706
732
if not args .skip_android :
707
733
latest_android_versions_map = get_latest_maven_versions (
708
- set (args .ignore_android_packages ))
734
+ set (args .ignore_android_packages ), args . allow_experimental )
709
735
dep_files = get_files (args .depfiles , file_extension = '.gradle' ,
710
736
file_name = 'firebase_dependencies.gradle' ,
711
737
ignore_directories = set (args .ignore_directories ))
0 commit comments