75 lines
2.5 KiB
Python
Executable File
75 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
# Script that updates the arrow dependencies in iox
|
|
#
|
|
# installation:
|
|
# pip install tomlkit requests
|
|
#
|
|
# Update all arrow crates deps to a specific version:
|
|
#
|
|
# python update_arrow_deps.py 13
|
|
#
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
# use tomlkit as it preserves comments and other formatting
|
|
import tomlkit
|
|
|
|
def update_version_cargo_toml(cargo_toml, new_version):
|
|
print('updating if needed {}'.format(cargo_toml.absolute()))
|
|
with open(cargo_toml) as f:
|
|
data = f.read()
|
|
|
|
doc = tomlkit.parse(data)
|
|
|
|
for section in ("dependencies", "dev-dependencies"):
|
|
for (dep_name, constraint) in doc.get(section, {}).items():
|
|
if dep_name in ("arrow", "parquet", "arrow-flight"):
|
|
if type(constraint) == tomlkit.items.String:
|
|
# handle constraint that is (only) a string like '12',
|
|
doc[section][dep_name] = new_version
|
|
elif type(constraint) == dict:
|
|
# handle constraint that is itself a struct like
|
|
# {'version': '12', 'features': ['prettyprint']}
|
|
doc[section][dep_name]["version"] = new_version
|
|
else:
|
|
print("Unknown type for {} {}: {}", dep_name, constraint, type(constraint))
|
|
|
|
with open(cargo_toml, 'w') as f:
|
|
f.write(tomlkit.dumps(doc))
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Update arrow dep versions.')
|
|
parser.add_argument('new_version', type=str, help='new arrow version')
|
|
|
|
args = parser.parse_args()
|
|
|
|
repo_root = Path(__file__).parent.parent.absolute()
|
|
|
|
for cargo_toml in repo_root.rglob('Cargo.toml'):
|
|
update_version_cargo_toml(cargo_toml, args.new_version)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|