3636# preview) - Update versions in default set of files in the repository.
3737python3 scripts/update_android_ios_dependencies.py --dryrun
3838
39- # Update versions in default set of files in the repository
39+ # Update versions in default set of files in the repository.
4040python3 scripts/update_android_ios_dependencies.py
4141
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+
4246# Update only Android packages
4347python3 scripts/update_android_ios_dependencies.py --skip_ios
4448
7478import tempfile
7579
7680from collections import defaultdict
77- from pkg_resources import packaging
7881from xml .etree import ElementTree
82+ from pkg_resources import packaging
7983
8084
8185def 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,
152156 files .append (abspath )
153157 return files
154158
159+ # Regex to match versions with just digits (ignoring things like -alpha, -beta)
160+ NON_EXPERIMENTAL_VERSION_RE = re .compile ('[0-9.]+$' )
155161
156162########## iOS pods versions update #######################################
157163
@@ -178,18 +184,21 @@ def get_files(dirs_and_files, file_extension, file_name=None,
178184)
179185
180186
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 ):
182189 """Get available pods and their versions from the specs repo
183190
184191 Args:
185192 local_repo_dir (str): Directory mirroring Cocoapods specs repo
186193 pods (iterable(str), optional): List of pods whose versions we need.
187194 Defaults to PODS.
188195 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
190197 updated.
191198 Eg: ['foo', 'bar'] will ignore all pods that have 'foo' or
192199 '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
193202 Returns:
194203 dict: Map of the form {<str>:list(str)}
195204 Containing a mapping of podnames to available versions.
@@ -211,12 +220,16 @@ def get_pod_versions(specs_repo, pods=PODS, ignore_pods=None):
211220 continue
212221 parent_dir = os .path .dirname (podspec_file )
213222 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
214226 all_versions [podname ].append (version )
215227
216228 return all_versions
217229
218230
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 ):
220233 """Get latest versions for specified pods.
221234
222235 Args:
@@ -228,6 +241,8 @@ def get_latest_pod_versions(specs_repo=None, pods=PODS, ignore_pods=None):
228241 updated.
229242 Eg: ['Foo', 'bar'] will ignore all pods that have 'foo' or
230243 '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
231246
232247 Returns:
233248 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):
246261 # Temporary directory should be cleaned up after use.
247262 cleanup_required = True
248263
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 )
250266 if cleanup_required :
251267 shutil .rmtree (specs_repo )
252268
@@ -410,7 +426,7 @@ def replace_pod_line(m):
410426GMAVEN_GROUP_INDEX = "https://dl.google.com/dl/android/maven2/{0}/group-index.xml"
411427
412428
413- def get_latest_maven_versions (ignore_packages = None ):
429+ def get_latest_maven_versions (ignore_packages = None , allow_experimental = False ):
414430 """Gets latest versions of android packages from google Maven repository.
415431
416432 Args:
@@ -420,9 +436,12 @@ def get_latest_maven_versions(ignore_packages=None):
420436 Eg: ['Foo', 'bar'] will ignore all android packages that have 'foo' or
421437 'bar' in their name. For example, 'my.android.foo.package',
422438 'myfoo.android.package'
439+ allow_experimental (bool): Allow experimental versions.
440+ Eg: 1.2.3-alpha, 1.2.3-beta, 1.2.3-rc
423441
424442 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.
426445 """
427446 if ignore_packages is None :
428447 ignore_packages = []
@@ -441,8 +460,13 @@ def get_latest_maven_versions(ignore_packages=None):
441460 if any (ignore_package .lower ().replace ('-' , '_' ) in package_full_name .lower ()
442461 for ignore_package in ignore_packages ):
443462 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
446470 return latest_versions
447471
448472
@@ -638,6 +662,8 @@ def parse_cmdline_args():
638662 help = "Logging level (debug, warning, info)" )
639663 parser .add_argument ('--ignore_directories' , nargs = '+' ,
640664 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))' )
641667 # iOS options
642668 parser .add_argument ('--skip_ios' , action = 'store_true' ,
643669 help = 'Skip iOS pod version update completely.' )
@@ -695,7 +721,7 @@ def main():
695721
696722 if not args .skip_ios :
697723 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 )
699725 pod_files = get_files (args .podfiles , file_extension = '' , file_name = 'Podfile' ,
700726 ignore_directories = set (args .ignore_directories ))
701727 for pod_file in pod_files :
@@ -705,7 +731,7 @@ def main():
705731
706732 if not args .skip_android :
707733 latest_android_versions_map = get_latest_maven_versions (
708- set (args .ignore_android_packages ))
734+ set (args .ignore_android_packages ), args . allow_experimental )
709735 dep_files = get_files (args .depfiles , file_extension = '.gradle' ,
710736 file_name = 'firebase_dependencies.gradle' ,
711737 ignore_directories = set (args .ignore_directories ))
0 commit comments