Skip to content

Commit 14fe2aa

Browse files
committed
flag to allow experimental versions (default=off)
1 parent d380b0c commit 14fe2aa

File tree

1 file changed

+38
-12
lines changed

1 file changed

+38
-12
lines changed

scripts/update_android_ios_dependencies.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,13 @@
3636
# preview) - Update versions in default set of files in the repository.
3737
python3 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.
4040
python3 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
4347
python3 scripts/update_android_ios_dependencies.py --skip_ios
4448
@@ -74,8 +78,8 @@
7478
import tempfile
7579

7680
from collections import defaultdict
77-
from pkg_resources import packaging
7881
from xml.etree import ElementTree
82+
from pkg_resources import packaging
7983

8084

8185
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,
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):
410426
GMAVEN_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

Comments
 (0)