Update package from text file to latest version.
113def update_packages(filename: str) -> list[PackageInfo]:
114 """!
115 @brief Update package from text file to latest version
116 @param filename : file name
117 @return list with updated packages
118 """
119 with open(filename, mode="r", encoding="utf-8") as file:
120 lines = file.readlines()
121
122 i_update_cnt = 0
123 l_package_info = []
124 updated_lines = []
125 for line in lines:
126 if re.match(r"^\s*#", line):
127 updated_lines.append(line)
128 elif re.match(r"^\s*([\w\-]+)==([\w\.\-]+)\s*(#.*)?$", line):
129 package, version, comment = re.findall(r"^\s*([\w\-]+)==([\w\.\-]+)\s*(#.*)?$", line)[0]
130 if comment != "":
131 comment = f" {comment}"
132 package_info = get_package_info(package)
133 if (package_info is not None) and (package not in L_IGNORE_PACKAGES):
134 if package_info.version and (package_info.version != version):
135 updated_lines.append(f"{package}=={package_info.version}{comment}\n")
136 i_update_cnt += 1
137 log.info("Updated: %s %s", package, package_info.version)
138 else:
139 updated_lines.append(line)
140 log.debug(line)
141 l_package_info.append(package_info)
142 else:
143 updated_lines.append(line)
144 log.debug(line)
145 else:
146 updated_lines.append(line)
147 if line.strip():
148 package_info = get_package_info(line)
149 if package_info is not None:
150 l_package_info.append(package_info)
151 log.debug(line)
152
153 with open(filename, mode="w", encoding="utf-8") as file:
154 file.writelines(updated_lines)
155 log.info("%s packages updates in %s\n", i_update_cnt, filename)
156 return l_package_info
157
158