53 lines
1.7 KiB
Python
Executable File
53 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
try:
|
|
import yaml
|
|
except ImportError:
|
|
subprocess.check_call(['pip3', 'install', 'pyyaml'])
|
|
import yaml
|
|
|
|
# 定义一个用于递归查找文件的函数
|
|
def find_files(filename, search_path="."):
|
|
result = []
|
|
for root, dir, files in os.walk(search_path):
|
|
if filename in files:
|
|
result.append(os.path.join(root, filename))
|
|
return result
|
|
|
|
# 定义一个用于解析pubspec.lock文件的函数
|
|
def parse_pubspec_lock(filename):
|
|
with open(filename, "r") as f:
|
|
data = yaml.safe_load(f)
|
|
dependencies = []
|
|
for package, info in data["packages"].items():
|
|
if "url" in info["description"] and "castbox" in info["description"]["url"]:
|
|
dependencies.append(package)
|
|
return dependencies
|
|
|
|
# 查找所有pubspec.lock文件并解析依赖
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Process some integers.")
|
|
parser.add_argument("--flutter_sdk", type=str, help="android or ios")
|
|
|
|
args = parser.parse_args()
|
|
flutter_sdk = args.flutter_sdk
|
|
|
|
if flutter_sdk:
|
|
print(f"flutter sdk: {flutter_sdk}")
|
|
os.environ["PATH"] = f"{flutter_sdk}:{os.environ['PATH']}"
|
|
|
|
current_dir = os.getcwd()
|
|
dependencies = []
|
|
for file in find_files("pubspec.lock", current_dir):
|
|
deps = parse_pubspec_lock(file)
|
|
if deps:
|
|
rel_path = os.path.relpath(os.path.dirname(file), start=current_dir)
|
|
flutterCmd = "flutter pub upgrade " + " ".join(deps)
|
|
print('[{}] {}'.format(rel_path, flutterCmd))
|
|
cmd = 'cd {} && {} && cd {}'.format(rel_path, flutterCmd, current_dir)
|
|
os.system(cmd)
|
|
os.chdir(current_dir)
|