openubmc-bingo 0.6.0__py3-none-any.whl → 0.6.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of openubmc-bingo might be problematic. Click here for more details.

bmcgo/__init__.py CHANGED
@@ -9,4 +9,4 @@
9
9
  # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
10
10
  # See the Mulan PSL v2 for more details.
11
11
 
12
- __version__ = '0.6.0'
12
+ __version__ = '0.6.2'
bmcgo/cli/cli.py CHANGED
@@ -342,11 +342,20 @@ class Command(object):
342
342
  return True
343
343
  if need_conan_v2 and misc.conan_v1():
344
344
  log.warning("检测到依赖conan2.0但仅安装了conan1.0,尝试重新安装conan2.0")
345
+ log.info("1. 组件仓支持conan2.0的依据:conanfile.py中未申明`required_conan_version`或依赖conan 2.x.x,\
346
+ 如`quired_conan_version = '>=2.13.0'`")
347
+ log.info("2. manifest或ibmc_sdk仓等支持conan2.0的依据:.bmcgo/config或.bingo/config文件记录的conan.version配置版本以2开头,如配置为:")
348
+ log.info(" [conan]")
349
+ log.info(" version = 2.x.x")
350
+ log.info("3. conan_index仓使用参数`--conan2`控制是否构建conan2.0包(conan2.0包配方存储在recipes2目录)")
345
351
  tools.run_command("pip3 install conan==2.13.0 --force-reinstall --break-system-packages")
346
352
  log.warning("检测到依赖conan2.0但仅安装了conan1.0,已安装conan2.0,任务退出,请重新执行")
347
353
  return False
348
354
  if not need_conan_v2 and misc.conan_v2():
349
355
  log.warning("检测到依赖conan1.0但仅安装了conan2.0,尝试重新安装conan1.0")
356
+ log.info("1. 组件仓支持conan1.0的依据:conanfile.py中未申明`required_conan_version`或依赖conan 1.x.x")
357
+ log.info("2. manifest或ibmc_sdk仓支持conan1.0的依据:.bmcgo/config或.bingo/config文件未记录的conan.version配置")
358
+ log.info("3. conan_index仓默认(不指定`--conan2`时)构建conan1.0包(conan1.0包配方存储在recipes目录)")
350
359
  tools.run_command("pip3 install conan==1.62.0 --force-reinstall --break-system-packages")
351
360
  log.warning("检测到依赖conan1.0但仅安装了conan2.0,已安装conan1.0,任务退出,请重新执行")
352
361
  return False
@@ -110,7 +110,7 @@ class CodeGen(object):
110
110
  mdb_interface_tmp_dir = os.path.join(conan_home, "latest_mdb_interface")
111
111
  env = dict(os.environ, CONAN_STORAGE_PATH=mdb_interface_tmp_dir)
112
112
 
113
- channel = f"@{Tools().conan_user}/{misc.StageEnum.STAGE_RC.value}"
113
+ channel = f"@{misc.conan_user()}/{misc.StageEnum.STAGE_RC.value}"
114
114
  package = f"mdb_interface/[>=0.0.1]{channel}"
115
115
 
116
116
  cmd = ["conan", "install", package, f"-if={temp_dir}", "--update", "--build=missing", "-g", "deploy"]
bmcgo/component/deploy.py CHANGED
@@ -93,7 +93,7 @@ class DeployComp():
93
93
  return dependencies
94
94
 
95
95
  def gen_conanfile(self):
96
- dependencies = self.info.package
96
+ dependencies = [self.info.package]
97
97
  if self.info.test:
98
98
  dependencies += self.get_dt_dependencies()
99
99
 
@@ -5,6 +5,7 @@ import urllib3
5
5
  import shutil
6
6
  % endif
7
7
  from conans import ConanFile, CMake
8
+ from conan.tools.files import copy
8
9
  % if pkg.is_maintain:
9
10
  from conans import tools
10
11
  from conans.util.files import mkdir
@@ -1,7 +1,20 @@
1
+ #!/usr/bin/env python
2
+ # coding=utf-8
3
+ # Copyright (c) 2024 Huawei Technologies Co., Ltd.
4
+ # openUBMC is licensed under Mulan PSL v2.
5
+ # You can use this software according to the terms and conditions of the Mulan PSL v2.
6
+ # You may obtain a copy of Mulan PSL v2 at:
7
+ # http://license.coscl.org.cn/MulanPSL2
8
+ # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9
+ # EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10
+ # MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11
+ # See the Mulan PSL v2 for more details.
1
12
  import os
13
+ import concurrent.futures
2
14
  import urllib3
15
+ % if pkg.is_maintain:
3
16
  import time
4
- import concurrent.futures
17
+ % endif
5
18
  % if pkg.is_maintain:
6
19
  import stat
7
20
  import shutil
@@ -48,7 +61,7 @@ class ConanBase(ConanFile):
48
61
  "enable_luajit": [True, False],
49
62
  % endif
50
63
  % for op, ctx in pkg.design_options.items():
51
- "${op}": [${",".join(("\"" + i + "\"") if isinstance(i, str) else str(i) for i in ctx["option"])}],
64
+ "${op}": [${", ".join(("\"" + i + "\"") if isinstance(i, str) else str(i) for i in ctx["option"])}],
52
65
  % endfor
53
66
  }
54
67
  default_options = {
@@ -64,13 +77,6 @@ class ConanBase(ConanFile):
64
77
  % endfor
65
78
  }
66
79
 
67
- % if language == "c":
68
- def _codegen(self):
69
- args = ["-s", "mds/service.json"]
70
- gen = GenComp(args)
71
- gen.run(self._codegen_version)
72
- % endif
73
-
74
80
  def layout(self):
75
81
  cmake_layout(self, build_folder=".build")
76
82
 
@@ -112,7 +118,7 @@ class ConanBase(ConanFile):
112
118
  tag = git.run("tag --points-at HEAD")
113
119
  update_conandata(self, {"sources": {self.version: {"branch": f"refs/tags/{tag}" if tag else commit, "url": url}}})
114
120
  % endif
115
-
121
+
116
122
  % if pkg.is_maintain:
117
123
  def export_sources(self):
118
124
  patches = self.conan_data.get("patches", {}).get(self.version, [])
@@ -125,76 +131,23 @@ class ConanBase(ConanFile):
125
131
  dst = os.path.join(self.export_sources_folder, patch_file)
126
132
  mkdir(os.path.dirname(dst))
127
133
  shutil.copy2(src, dst)
128
- % endif
129
134
 
135
+ % endif
130
136
  def source(self):
131
137
  git = Git(self)
132
138
  sources = self.conan_data["sources"][self.version]
139
+ % if pkg.is_maintain:
133
140
  if sources["url"] and sources["branch"]:
134
141
  git.fetch_commit(url=sources["url"], commit=sources["branch"].split("/")[-1])
135
142
  else:
136
143
  copy(self, "*", src=sources["pwd"], dst=".")
144
+ % else:
145
+ git.fetch_commit(url=sources["url"], commit=sources["branch"].split("/")[-1])
146
+ % endif
137
147
  % if language == "c":
138
148
  self._codegen()
139
149
  % endif
140
150
 
141
- def _pre_generate(self):
142
- tc = CMakeToolchain(self)
143
- tc.preprocessor_definitions["_FORTIFY_SOURCE"] = "2"
144
-
145
- tc.variables["BUILD_MANUFACTURE"] = self.options.manufacture
146
- % if len(pkg.design_options) > 0:
147
- % for op, _ in pkg.design_options.items():
148
- tc.variables["CONAN_DEFS_${op.upper()}"] = self.options.${op}
149
- % endfor
150
- % endif
151
- % if language == "lua":
152
- if self.options.enable_luajit:
153
- tc.variables["CONAN_DEFS_ENABLE_LUAJIT"] = True
154
- % endif
155
- if self.options.test:
156
- tc.variables["ENABLE_TEST"] = True
157
- tc.preprocessor_definitions["ENABLE_TEST"] = True
158
- # 向CMAKE传递版本号信息
159
- version = self.version.split(".")
160
- if len(version) >= 1:
161
- tc.variables["PACKAGE_VERSION_MAJOR"] = version[0]
162
- if len(version) >= 2:
163
- tc.variables["PACKAGE_VERSION_MINOR"] = version[1]
164
- if len(version) >= 3:
165
- tc.variables["PACKAGE_VERSION_REVISION"] = version[2]
166
- # 设置额外编译选项或者重定义CFLAGS CXXFLAGS,也可以设置其他开关
167
- # 示例: os.environ['CFLAGS'] = f"{os.getenv('CFLAGS')} -fPIE"
168
-
169
- if self.settings.arch in ["armv8", "x86_64"]:
170
- tc.variables["CMAKE_INSTALL_LIBDIR"] = "usr/lib64"
171
- else:
172
- tc.variables["CMAKE_INSTALL_LIBDIR"] = "usr/lib"
173
-
174
- if self.options.get_safe("asan", False):
175
- print("Enable asan flags")
176
- asan_flags = "-fsanitize=address -fsanitize-recover=address,all -fno-omit-frame-pointer -fno-stack-protector -O0"
177
- tc.extra_cflags.append(asan_flags)
178
- tc.extra_cxxflags.append(asan_flags)
179
- tc.extra_sharedlinkflag.append("LDFLAGS", "-fsanitize=address")
180
- tc.extra_exelinkflag.append("LDFLAGS", "-fsanitize=address")
181
-
182
- # GCOV 标志设置
183
- if self.options.get_safe("gcov", False):
184
- print("Enable gcov flags")
185
- gcov_flags = "-ftest-coverage -fprofile-arcs -fprofile-update=atomic"
186
- tc.extra_cflags.append(gcov_flags)
187
- tc.extra_cxxflags.append(gcov_flags)
188
- # 配合generate添加宏定义
189
- tc.variables["CMAKE_TOOLCHAIN_FILE"] = "conan_toolchain.cmake"
190
- # rpath配置
191
- tc.variables["CMAKE_SKIP_BUILD_RPATH"] = True
192
- tc.variables["CMAKE_SKIP_RPATH"] = True
193
- tc.variables["CMAKE_SKIP_INSTALL_RPATH"] = True
194
- tc.variables["CMAKE_BUILD_WITH_INSTALL_RPATH"] = False
195
- tc.variables["CMAKE_INSTALL_RPATH_USE_LINK_PATH"] = False
196
- return tc
197
-
198
151
  def generate(self):
199
152
  tc = self._pre_generate()
200
153
  tc.generate()
@@ -213,28 +166,7 @@ class ConanBase(ConanFile):
213
166
  files[a_file] = b_file
214
167
  return files
215
168
 
216
- def _revise_renamed_files(self, changed_files):
217
- for a_file, b_file in changed_files.items():
218
- if a_file != b_file:
219
- if a_file != "/dev/null" and b_file != "/dev/null":
220
- os.rename(a_file, b_file)
221
- cmd = f"git rm -f {a_file}"
222
- self.run(cmd)
223
- elif a_file != "/dev/null":
224
- cmd = f"git rm -f {a_file}"
225
- self.run(cmd)
226
- continue
227
- cmd = f"git add {b_file}"
228
- self.run(cmd)
229
-
230
169
  %endif
231
- def _configure_cmake(self):
232
- if self._cmake is not None:
233
- return self._cmake
234
- self._cmake = CMake(self)
235
- self._cmake.configure()
236
- return self._cmake
237
-
238
170
  def build(self):
239
171
  % if pkg.is_maintain:
240
172
  for patch in self.conan_data.get("patches", {}).get(self.version, []):
@@ -267,15 +199,23 @@ class ConanBase(ConanFile):
267
199
  cmake.install()
268
200
  files_to_copy = [
269
201
  ("permissions.ini", self.source_folder, self.package_folder),
270
- ("model.json", os.path.join(self.source_folder, "mds"), os.path.join(self.package_folder, "include/mds")),
271
- ("service.json", os.path.join(self.source_folder, "mds"), os.path.join(self.package_folder, "include/mds")),
272
- ("*", os.path.join(self.source_folder, "customization"), os.path.join(self.package_folder, "include")),
273
- ("*", os.path.join(self.source_folder, "mds"), os.path.join(self.package_folder, "usr/share/doc/openubmc/${pkg.name}/mds")),
274
- ("*", os.path.join(self.source_folder, "docs"), os.path.join(self.package_folder, "usr/share/doc/openubmc/${pkg.name}/docs")),
275
- ("*", os.path.join(self.source_folder, "build"), os.path.join(self.package_folder, "include")),
202
+ ("model.json", os.path.join(self.source_folder, "mds"),
203
+ os.path.join(self.package_folder, "include/mds")),
204
+ ("service.json", os.path.join(self.source_folder, "mds"),
205
+ os.path.join(self.package_folder, "include/mds")),
206
+ ("*", os.path.join(self.source_folder, "customization"),
207
+ os.path.join(self.package_folder, "include")),
208
+ ("*", os.path.join(self.source_folder, "mds"),
209
+ os.path.join(self.package_folder, "usr/share/doc/openubmc/${pkg.name}/mds")),
210
+ ("*", os.path.join(self.source_folder, "docs"),
211
+ os.path.join(self.package_folder, "usr/share/doc/openubmc/${pkg.name}/docs")),
212
+ ("*", os.path.join(self.source_folder, "build"),
213
+ os.path.join(self.package_folder, "include")),
276
214
  ("permissions.ini", os.path.join(self.source_folder, "dist"), self.package_folder),
277
- ("*.md", self.source_folder, os.path.join(self.package_folder,"usr/share/doc/openubmc/${pkg.name}/docs")),
278
- ("*.MD", self.source_folder, os.path.join(self.package_folder,"usr/share/doc/openubmc/${pkg.name}/docs"))
215
+ ("*.md", self.source_folder, os.path.join(self.package_folder,
216
+ "usr/share/doc/openubmc/${pkg.name}/docs")),
217
+ ("*.MD", self.source_folder, os.path.join(self.package_folder,
218
+ "usr/share/doc/openubmc/${pkg.name}/docs"))
279
219
  ]
280
220
  for pattern, src, dst in files_to_copy:
281
221
  copy(self, pattern, src=src, dst=dst, keep_path=True)
@@ -287,15 +227,18 @@ class ConanBase(ConanFile):
287
227
  os.chdir(self.package_folder)
288
228
  with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
289
229
  for root, _, files in os.walk("."):
290
- for file in files:
291
- if file.endswith(".lua") and not os.path.islink(os.path.join(root, file)):
292
- file_path = os.path.join(root, file)
293
- if self.options.enable_luajit:
294
- executor.submit(self.compile_file, file_path, True)
295
- else:
296
- executor.submit(self.compile_file, file_path, False)
230
+ self.compile_files(root, files, executor)
297
231
  rm(self, "luac.out", self.package_folder)
298
232
 
233
+ def compile_files(self, root, files, executor):
234
+ for file in files:
235
+ if file.endswith(".lua") and not os.path.islink(os.path.join(root, file)):
236
+ file_path = os.path.join(root, file)
237
+ if self.options.enable_luajit:
238
+ executor.submit(self.compile_file, file_path, True)
239
+ else:
240
+ executor.submit(self.compile_file, file_path, False)
241
+
299
242
  def compile_file(self, file_path, enable_luajit):
300
243
  if enable_luajit:
301
244
  self.run(f"luajit -b -g {file_path} {file_path}")
@@ -320,27 +263,13 @@ class ConanBase(ConanFile):
320
263
  dirs = []
321
264
  for root, _, files in os.walk("."):
322
265
  for file in files:
323
- if file.endswith(".so") and file.startswith("lib"):
324
- if root.startswith("./"):
325
- dir = root[2:]
326
- else:
327
- dir = root
328
- if dir not in dirs:
329
- dirs.append(dir)
330
- lib = file[3:-3]
331
- libs.append(lib)
332
- continue
333
- if file.endswith(".a") and file.startswith("lib"):
334
- if root.startswith("./"):
335
- dir = root[2:]
336
- else:
337
- dir = root
338
- if dir not in dirs:
339
- dirs.append(dir)
340
- libs.append(lib)
341
- continue
266
+ dirname, libname = self.find_libraries(root, file)
267
+ if dirname and dirname not in dirs:
268
+ dirs.append(dirname)
269
+ if libname:
270
+ libs.append(libname)
342
271
 
343
- if len(dirs):
272
+ if dirs:
344
273
  self.cpp_info.components["${pkg.name}"].set_property("cmake_target_name", "${pkg.name}::${pkg.name}")
345
274
  self.cpp_info.components["${pkg.name}"].set_property("cmake_target_aliass", ["${pkg.name}::${pkg.name}"])
346
275
  self.cpp_info.components["${pkg.name}"].set_property("pkg_config_name", "${pkg.name}")
@@ -350,3 +279,105 @@ class ConanBase(ConanFile):
350
279
  self.runenv_info.append("LD_LIBRARY_PATH", os.path.join(self.package_folder, dir))
351
280
  self.buildenv_info.append("LD_LIBRARY_PATH", os.path.join(self.package_folder, dir))
352
281
 
282
+ def find_libraries(self, root, file):
283
+ if file.endswith(".so") and file.startswith("lib"):
284
+ if root.startswith("./"):
285
+ dirname = root[2:]
286
+ else:
287
+ dirname = root
288
+ libname = file[3:-3]
289
+ return (dirname, libname)
290
+ if file.endswith(".a") and file.startswith("lib"):
291
+ if root.startswith("./"):
292
+ dirname = root[2:]
293
+ else:
294
+ dirname = root
295
+ return (dirname, file)
296
+ return (None, None)
297
+
298
+ % if pkg.is_maintain:
299
+ def _revise_renamed_files(self, changed_files):
300
+ for a_file, b_file in changed_files.items():
301
+ if a_file != b_file:
302
+ if a_file != "/dev/null" and b_file != "/dev/null":
303
+ os.rename(a_file, b_file)
304
+ cmd = f"git rm -f {a_file}"
305
+ self.run(cmd)
306
+ elif a_file != "/dev/null":
307
+ cmd = f"git rm -f {a_file}"
308
+ self.run(cmd)
309
+ continue
310
+ cmd = f"git add {b_file}"
311
+ self.run(cmd)
312
+
313
+ %endif
314
+ def _configure_cmake(self):
315
+ if self._cmake is not None:
316
+ return self._cmake
317
+ self._cmake = CMake(self)
318
+ self._cmake.configure()
319
+ return self._cmake
320
+
321
+ % if language == "c":
322
+ def _codegen(self):
323
+ args = ["-s", "mds/service.json"]
324
+ gen = GenComp(args)
325
+ gen.run(self._codegen_version)
326
+
327
+ % endif
328
+ def _pre_generate(self):
329
+ tc = CMakeToolchain(self)
330
+ tc.preprocessor_definitions["_FORTIFY_SOURCE"] = "2"
331
+
332
+ tc.variables["BUILD_MANUFACTURE"] = self.options.manufacture
333
+ % if len(pkg.design_options) > 0:
334
+ % for op, _ in pkg.design_options.items():
335
+ tc.variables["CONAN_DEFS_${op.upper()}"] = self.options.${op}
336
+ % endfor
337
+ % endif
338
+ % if language == "lua":
339
+ if self.options.enable_luajit:
340
+ tc.variables["CONAN_DEFS_ENABLE_LUAJIT"] = True
341
+ % endif
342
+ if self.options.test:
343
+ tc.variables["ENABLE_TEST"] = True
344
+ tc.preprocessor_definitions["ENABLE_TEST"] = True
345
+ # 向CMAKE传递版本号信息
346
+ version = self.version.split(".")
347
+ if len(version) >= 1:
348
+ tc.variables["PACKAGE_VERSION_MAJOR"] = version[0]
349
+ if len(version) >= 2:
350
+ tc.variables["PACKAGE_VERSION_MINOR"] = version[1]
351
+ if len(version) >= 3:
352
+ tc.variables["PACKAGE_VERSION_REVISION"] = version[2]
353
+ # 设置额外编译选项或者重定义CFLAGS CXXFLAGS,也可以设置其他开关
354
+ # 示例: os.environ['CFLAGS'] = f"{os.getenv('CFLAGS')} -fPIE"
355
+
356
+ if self.settings.arch in ["armv8", "x86_64"]:
357
+ tc.variables["CMAKE_INSTALL_LIBDIR"] = "usr/lib64"
358
+ else:
359
+ tc.variables["CMAKE_INSTALL_LIBDIR"] = "usr/lib"
360
+
361
+ if self.options.get_safe("asan", False):
362
+ print("Enable asan flags")
363
+ asan_flags = "-fsanitize=address -fsanitize-recover=address,all -fno-omit-frame-pointer -fno-stack-protector -O0"
364
+ tc.extra_cflags.append(asan_flags)
365
+ tc.extra_cxxflags.append(asan_flags)
366
+ tc.extra_sharedlinkflag.append("LDFLAGS", "-fsanitize=address")
367
+ tc.extra_exelinkflag.append("LDFLAGS", "-fsanitize=address")
368
+
369
+ # GCOV 标志设置
370
+ if self.options.get_safe("gcov", False):
371
+ print("Enable gcov flags")
372
+ gcov_flags = "-ftest-coverage -fprofile-arcs -fprofile-update=atomic"
373
+ tc.extra_cflags.append(gcov_flags)
374
+ tc.extra_cxxflags.append(gcov_flags)
375
+ # 配合generate添加宏定义
376
+ tc.variables["CMAKE_TOOLCHAIN_FILE"] = "conan_toolchain.cmake"
377
+ # rpath配置
378
+ tc.variables["CMAKE_SKIP_BUILD_RPATH"] = True
379
+ tc.variables["CMAKE_SKIP_RPATH"] = True
380
+ tc.variables["CMAKE_SKIP_INSTALL_RPATH"] = True
381
+ tc.variables["CMAKE_BUILD_WITH_INSTALL_RPATH"] = False
382
+ tc.variables["CMAKE_INSTALL_RPATH_USE_LINK_PATH"] = False
383
+ return tc
@@ -170,6 +170,9 @@ class BmcgoCommand:
170
170
  self.version = split[1]
171
171
  if misc.conan_v2():
172
172
  self.version = self.version.lower()
173
+ # openubmcsdk采用的不是conandata.yml的方式,需特殊处理
174
+ if self.name == "openubmcsdk":
175
+ return
173
176
  if self.stage != "dev":
174
177
  self.tag_check()
175
178
 
@@ -188,16 +191,21 @@ class BmcgoCommand:
188
191
  dt_stat = os.environ.get("BINGO_DT_RUN", "off")
189
192
  show_log = True if dt_stat == "off" else False
190
193
  pkg = self.name + "/" + self.version + "@" + self.user + "/" + self.channel
191
- append_cmd = f"-r {self.remote}" if self.remote else ""
192
- cmd = "conan create . --name={} --version={} -pr={} {} {} {}".format(
193
- self.name, self.version, self.profile, setting, append_cmd, options
194
- )
195
-
196
- cmd += " --user={} --channel={}".format(self.user, self.channel)
197
- if self.from_source:
198
- cmd += " --build=*"
194
+ # openubmcsdk通过export发布,需特殊处理
195
+ if self.name == "openubmcsdk":
196
+ cmd = "conan export . --name {} --version {} --user {} --channel {}".format(
197
+ self.name, self.version, self.user, self.channel)
199
198
  else:
200
- cmd += f" --build={self.name}/* --build=missing"
199
+ append_cmd = f"-r {self.remote}" if self.remote else ""
200
+ cmd = "conan create . --name={} --version={} -pr={} {} {} {}".format(
201
+ self.name, self.version, self.profile, setting, append_cmd, options
202
+ )
203
+
204
+ cmd += " --user={} --channel={}".format(self.user, self.channel)
205
+ if self.from_source:
206
+ cmd += " --build=*"
207
+ else:
208
+ cmd += f" --build={self.name}/* --build=missing"
201
209
  self.run_command(cmd, show_log=show_log)
202
210
 
203
211
  if not self.upload:
@@ -236,11 +244,20 @@ class BmcgoCommand:
236
244
  cmd += " --build=*"
237
245
  else:
238
246
  cmd += " --build=missing"
247
+ # openubmcsdk通过export发布,需特殊处理
248
+ if self.name == "openubmcsdk":
249
+ cmd = "conan export . {}".format(pkg)
239
250
  self.run_command(cmd, show_log=show_log)
240
251
 
241
252
  if not self.upload:
242
253
  return
243
254
 
255
+ # openubmcsdk组件无conan info信息,需特殊处理
256
+ if self.name == "openubmcsdk":
257
+ cmd = "conan upload {} -r {}".format(pkg, self.remote)
258
+ self.run_command(cmd)
259
+ log.info("===>>>Upload package successfully, pkg: {}".format(pkg))
260
+ return
244
261
  cmd = "conan info {} -pr={} -j".format(pkg, self.profile)
245
262
  info_json = self.run_command(cmd, shell=True, capture_output=True).stdout
246
263
  for line in info_json.split("\n"):
@@ -278,6 +278,7 @@ class TaskClass(Task):
278
278
  self.skip_install_comp = False
279
279
  self.only_manifest_yml = False
280
280
  self.update_path()
281
+ self.component_check = ""
281
282
  # 记录每个组件的GraphNode信息
282
283
  self.package_info = os.path.join(self.config.rootfs_path, "package_info")
283
284
 
@@ -320,6 +321,12 @@ class TaskClass(Task):
320
321
  comp = comp.lower()
321
322
  self.add_new_dependencies(comp, file_handler)
322
323
  return
324
+ # 判断组件是否在openubmcsdk中定义
325
+ if search[:-1] in self.component_check.openubmcsdk_dict.keys():
326
+ if misc.conan_v2():
327
+ comp = comp.lower()
328
+ self.add_new_dependencies(comp, file_handler)
329
+ return
323
330
  raise errors.ConfigException(f"未知组件: {search}, 请检查配置 !!!")
324
331
 
325
332
  def update_path(self):
@@ -430,6 +437,16 @@ class TaskClass(Task):
430
437
  deps = self.package_dependencies_parse(deps)
431
438
  # 由于manifest.yml当中有对于此的新的配置,此处将配置读出,并重新分配
432
439
  skynet_with_enable_luajit = False
440
+ # 获取manifest.yml中"base/sdk"字段值
441
+ openubmcsdk = self.get_manufacture_config("base/sdk", "")
442
+ if openubmcsdk:
443
+ self.add_new_dependencies(openubmcsdk, new_fd)
444
+ self.component_check = ComponentVersionCheck(
445
+ manifest_yml="manifest.yml",
446
+ ibmc_lock=IBMC_LOCK_FILE,
447
+ community_name="openubmc",
448
+ openubmcsdk=openubmcsdk
449
+ )
433
450
  for dep in deps:
434
451
  conan = dep.get(misc.CONAN)
435
452
  if not conan:
@@ -482,6 +499,16 @@ class TaskClass(Task):
482
499
  deps = self.package_dependencies_parse(deps)
483
500
  # 由于manifest.yml当中有对于此的新的配置,此处将配置读出,并重新分配
484
501
  skynet_with_enable_luajit = False
502
+ # 获取manifest.yml中定义"base/sdk"字段值
503
+ openubmcsdk = self.get_manufacture_config("base/sdk", "")
504
+ if openubmcsdk:
505
+ self.add_new_dependencies(openubmcsdk, new_fd)
506
+ self.component_check = ComponentVersionCheck(
507
+ manifest_yml="manifest.yml",
508
+ ibmc_lock=IBMC_LOCK_FILE,
509
+ community_name="openubmc",
510
+ openubmcsdk=openubmcsdk
511
+ )
485
512
  for dep in deps:
486
513
  conan = dep.get(misc.CONAN)
487
514
  if not conan:
@@ -685,8 +712,7 @@ class TaskClass(Task):
685
712
 
686
713
  shutil.copyfile(lockfile, f"{self.conan_install}/conan.lock")
687
714
  # 检查使用到的组件是否都在单板目录 manifest.yml 中配置了
688
- component_check = ComponentVersionCheck("manifest.yml", lockfile, "openubmc")
689
- component_check.run()
715
+ self.component_check.run()
690
716
  self.clean_luac_out()
691
717
 
692
718
  def install_ibmc(self):
@@ -728,8 +754,7 @@ class TaskClass(Task):
728
754
  self.run_command(install_cmd, command_echo=True)
729
755
  shutil.copyfile(IBMC_LOCK_FILE, f"{self.conan_install}/conan.lock")
730
756
  # 检查使用到的组件是否都在单板目录 manifest.yml 中配置了
731
- component_check = ComponentVersionCheck("manifest.yml", IBMC_LOCK_FILE, "openubmc")
732
- component_check.run()
757
+ self.component_check.run()
733
758
  self.clean_luac_out()
734
759
 
735
760
  def deploy(self):
@@ -15,15 +15,16 @@
15
15
  功能: 对比manifest.yml生成的组件清单和自动生成的清单是否一致
16
16
  注意: 这个文件名为work, 但不继承 Task 类 !!!!!!
17
17
  """
18
-
18
+ import os
19
19
  import json
20
-
20
+ from pathlib import Path
21
21
  import yaml
22
-
23
22
  from bmcgo.logger import Logger
24
23
  from bmcgo import misc
24
+ from bmcgo.utils.tools import Tools
25
25
 
26
26
  log = Logger("component_version_check")
27
+ tools = Tools()
27
28
 
28
29
 
29
30
  class ComponentVersionCheck:
@@ -31,18 +32,69 @@ class ComponentVersionCheck:
31
32
  conan 目录的 manifest.yml 文件是由单板目录下的 manifest.yml 自动生成的
32
33
  """
33
34
 
34
- def __init__(self, manifest_yml: str, ibmc_lock: str, community_name: str):
35
+ def __init__(self, manifest_yml: str, ibmc_lock: str, community_name: str, openubmcsdk: str):
35
36
  """读取 manifest.yml(conan目录) 文件与 openubmc.lock 文件
36
37
 
37
38
  Args:
38
39
  manifest_yml (str): manifest.yml文件路径
39
40
  ibmc_lock (str): openubmc.lock文件路径
40
41
  """
41
- with open(manifest_yml, "r") as manifest_fp:
42
+ self.manifest = ""
43
+ self.manifest_yml = manifest_yml
44
+ self.ibmc_lock = ibmc_lock
45
+ self.manifest_dict = {}
46
+ self.ibmc_lock_dict = {}
47
+ self.openubmcsdk_comp = openubmcsdk
48
+ self.openubmcsdk_dict = self.generate_openubmcsdk_dict(self.openubmcsdk_comp)
49
+ self.community_name = community_name
50
+
51
+ @staticmethod
52
+ def get_cache_path(component):
53
+ """根据openubmcsdk的包名获取export文件夹路径
54
+
55
+ Returns:
56
+ str: 返回 openubmcsdk 的export路径
57
+ """
58
+ if misc.conan_v1():
59
+ conan_home = Path(os.environ.get("CONAN_HOME", Path.home() / ".conan/data"))
60
+ openubmcsdk_file = os.path.join(conan_home, component.replace("@", "/"), "export", "requirements.yml")
61
+ else:
62
+ conan_home = f"conan cache path {component}"
63
+ openubmcsdk_file = os.path.join(
64
+ Tools().run_command(conan_home, capture_output=True).stdout(),
65
+ "requirements.yml"
66
+ )
67
+ return openubmcsdk_file
68
+
69
+ def openubmc_folder(self):
70
+ with open(self.manifest_yml, "r") as manifest_fp:
42
71
  self.manifest = yaml.safe_load(manifest_fp)
43
- with open(ibmc_lock, "r") as ibmc_lock_fp:
72
+ with open(self.ibmc_lock, "r") as ibmc_lock_fp:
44
73
  self.ibmc_lock = json.load(ibmc_lock_fp)
45
- self.community_name = community_name
74
+
75
+ def generate_openubmcsdk_dict(self, component) -> dict:
76
+ """根据 requirement.yml(conan目录) 配置生成 组件名: 组件配置 的字典
77
+
78
+ Returns:
79
+ dict: 返回 组件名: 组件配置 的字典
80
+ """
81
+ # component == ""表示manifest.yml未定义"base/sdk"
82
+ if component == "":
83
+ return {}
84
+ openubmcsdk_file = self.get_cache_path(component)
85
+ if not os.path.isfile(openubmcsdk_file):
86
+ tools.download_conan_recipes(component, misc.CONAN_REPO)
87
+ openubmcsdk_file = self.get_cache_path(component)
88
+ with open(openubmcsdk_file, "r") as openubmcsdk_fp:
89
+ self.openubmcsdk = yaml.safe_load(openubmcsdk_fp)
90
+ dependency_list = self.openubmcsdk[misc.CONAN_DEPDENCIES_KEY]
91
+ openubmc_dict = {x[misc.CONAN].split('/')[0]: x[misc.CONAN].split('@')[0] for x in dependency_list}
92
+ return openubmc_dict
93
+
94
+ def get_dict(self):
95
+ self.openubmc_folder()
96
+ self.manifest_dict = self.generate_manifest_dict()
97
+ self.ibmc_lock_dict = self.generate_ibmc_lock_dict()
46
98
 
47
99
  def generate_manifest_dict(self) -> dict:
48
100
  """根据 manifest.yml(conan目录) 配置生成 组件名: 组件配置 的字典
@@ -73,16 +125,18 @@ class ComponentVersionCheck:
73
125
  def run(self):
74
126
  """检查所有组件是否都在 manifest.yml(单板目录下) 中配置了
75
127
  """
76
- manifest_dict = self.generate_manifest_dict()
77
- ibmc_lock_dict = self.generate_ibmc_lock_dict()
78
128
  # 这里使用报错退出, 为防止有多个组件未配置, 报错在方法结束后触发
129
+ self.get_dict()
79
130
  report_error = False
80
- for key, version in ibmc_lock_dict.items():
81
- if key not in manifest_dict.keys():
131
+ for key, version in self.ibmc_lock_dict.items():
132
+ if key not in self.manifest_dict.keys() and key not in self.openubmcsdk_dict.keys():
82
133
  log.error(f"{version} 组件没有在manifest中配置!!!!!!")
83
134
  report_error = True
84
- elif version != manifest_dict[key]:
85
- log.error(f"{version} 组件版本与manifest中配置{manifest_dict[key]}不匹配!!!!!!")
135
+ elif key in self.openubmcsdk_dict.keys() and version != self.openubmcsdk_dict.get(key, ""):
136
+ log.error(f"{version} 组件版本与openubmcsdk中配置{self.openubmcsdk_dict[key]}不匹配!!!!!!")
137
+ report_error = True
138
+ elif key in self.manifest_dict.keys() and version != self.manifest_dict.get(key, ""):
139
+ log.error(f"{version} 组件版本与manifest中配置{self.manifest_dict[key]}不匹配!!!!!!")
86
140
  report_error = True
87
141
 
88
142
  if report_error is True:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openubmc-bingo
3
- Version: 0.6.0
3
+ Version: 0.6.2
4
4
  Summary: Tools provided by openubmc
5
5
  Home-page: https://openubmc.cn
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,4 +1,4 @@
1
- bmcgo/__init__.py,sha256=SPNooFrXCHuRYw9163ndcHPQ7NvHXXr7JuuanmyULB8,561
1
+ bmcgo/__init__.py,sha256=haErf6QOlKncKJVqp4-EqaC8LAT5CkLYmXdbp3VqhHc,561
2
2
  bmcgo/bmcgo.py,sha256=uD4TsfjrFB5aQPIS6WRUVc9ShXX-dSImY9ezkB13g1w,685
3
3
  bmcgo/bmcgo_config.py,sha256=-HZcTsnccE5wUsgGJ59kq8sDdu8feftIbpyoFvyvBhU,11264
4
4
  bmcgo/errors.py,sha256=QW1ndrJcJ2Ws7riOznPKVvZsNlrYk73eZol7w8gJTPU,3076
@@ -7,7 +7,7 @@ bmcgo/logger.py,sha256=rcMqJnyQ5Ag3k04KLEskrG8ZJ508OOU_JH4fMFiGOqQ,6644
7
7
  bmcgo/misc.py,sha256=w0vzsD7uzrsxTly5Y1viLgYTKHhLP4sxa499XwbqHnU,6986
8
8
  bmcgo/worker.py,sha256=OXz5Gam3pmZjgQeoGJrYy73ZrQszCOxk9X19nbeBI_A,15710
9
9
  bmcgo/cli/__init__.py,sha256=BDXz8BcSlCkfo5UYt6j2rm89-HiYA1ZzfpFhy99MH-0,538
10
- bmcgo/cli/cli.py,sha256=mJsbNKuSwUzNrHMHOEGkFRfVLYXFaQLZJYqaB1zyf-U,23939
10
+ bmcgo/cli/cli.py,sha256=KiQlFonVx0G7pZkETLKoWAPIZAOBgZgM1YRfeIUbhog,24938
11
11
  bmcgo/cli/config.conan2.yaml,sha256=jB0u2jSPpEk6D1-I3xQKnDinnLHVoRV9Z0CA583dotg,289
12
12
  bmcgo/cli/config.yaml,sha256=tbnFhz2TTrl2-ALpHHujbXB1ymZpjGC4f0zTfqfUZfM,194
13
13
  bmcgo/codegen/__init__.py,sha256=eplRBfR_obzVWMQtIeX1RRq6DOEezBx_l1EqcZYLRPM,775
@@ -35,7 +35,7 @@ bmcgo/codegen/c/template/server.h.mako,sha256=hZg1U64YKtlUm4wuKRobhjGW8e7rzFu9xg
35
35
  bmcgo/codegen/lua/.lua-format,sha256=h6RLqe84SjDqKO1mqoCW7XVtrAwDMTRM1Rj8nwzPGwQ,188
36
36
  bmcgo/codegen/lua/Makefile,sha256=wliuAhxhChrpsTnWuOlje3gtW2KRqayIhGRYBkvFi-c,3304
37
37
  bmcgo/codegen/lua/__init__.py,sha256=2yU9vzUVQmMJ0qBtNJ-AfKpnOzYZo4wAxlRnpFwgE7M,521
38
- bmcgo/codegen/lua/codegen.py,sha256=wyzG37xkP8-SfBHi4N9UOuO6CGTtD5iJ7jc17VEiBG0,9064
38
+ bmcgo/codegen/lua/codegen.py,sha256=tyIe6JQ6DGDkRuA7i79HZS59ffHuzBHVjuEQ3BVr3oA,9063
39
39
  bmcgo/codegen/lua/proto/Makefile,sha256=rS4nEBwWJEDYAb5XN9S7SfII7RMFb071jh0eh_KJePo,3098
40
40
  bmcgo/codegen/lua/proto/ipmi_types.proto,sha256=BX09mymhhPkWqZE1UCVJACpLBeQh1vQN31oBRVVieFY,377
41
41
  bmcgo/codegen/lua/proto/types.proto,sha256=_X8JCKZCvO6PfWh6tuWcEqKHROrh46rCZab-OCkfirA,1162
@@ -171,7 +171,7 @@ bmcgo/component/__init__.py,sha256=BDXz8BcSlCkfo5UYt6j2rm89-HiYA1ZzfpFhy99MH-0,5
171
171
  bmcgo/component/build.py,sha256=gomdHTfscI4p_m2sev2vR9ws55N7ZyuMPNPGv126u9U,11630
172
172
  bmcgo/component/component_dt_version_parse.py,sha256=-Rt6i2fZrmYNZGoMqB21D_T9fC7fhhtUFIFvdPsMICM,14188
173
173
  bmcgo/component/component_helper.py,sha256=rNwfhagfz6E3BjKERq9oOPLRfeKQlqhLojb6oJLXcEA,7933
174
- bmcgo/component/deploy.py,sha256=FIUMtQkXmbP2XkjzARf1on0wFJST7__k2kIWLEIGGpA,6542
174
+ bmcgo/component/deploy.py,sha256=Iy5CsiolKS1h5jDg13nYkfy6--BtbBZ8FLou2oVuoLQ,6544
175
175
  bmcgo/component/gen.py,sha256=lhPe_VV08CDFSydSLCX7IC5m8obNvYZSSzIp9o84nd0,7248
176
176
  bmcgo/component/package_info.py,sha256=5iOcS9gFnwBQo3uNivVjgeJw_xP3RDnnBA7nxjOc2vs,14472
177
177
  bmcgo/component/test.py,sha256=w4DHIMzgpF9lwJcSsFsS1BSgKEtNRC0FUAhUTRrteZM,45018
@@ -188,15 +188,15 @@ bmcgo/component/analysis/sr_validation.py,sha256=OrgPPjlOoLgRQyD_J6VZXAY0I6gtqGV
188
188
  bmcgo/component/coverage/__init__.py,sha256=ZgUEyI86FTlOdBzcuTzz7UqTtfWcz416Gx4BCqcQlhA,557
189
189
  bmcgo/component/coverage/c_incremental_cov_report.template,sha256=FPhK1DZtmWsjDxa32R1ViH3IGCtNHcx0zFfgRo0s2nI,1576
190
190
  bmcgo/component/coverage/incremental_cov.py,sha256=Uf-UdY4CW9rpP4sbURkCXBWyYMXWaG3R1Pyo3cDNvcQ,16859
191
- bmcgo/component/template/conanbase.py.mako,sha256=MMZezCl5oFucRraOJt1WjmPL2S7wa4Hzfc7yDfTkW7Q,10949
191
+ bmcgo/component/template/conanbase.py.mako,sha256=dNvbToMSYI7jod7maCpR0PBizvVoQHvXxglmN9LNflg,10984
192
192
  bmcgo/component/template/conanfile.deploy.py.mako,sha256=zpxluBjUFmJHfFrnBknxZ3cv3cxcqzJuGh2eN0uMXZA,889
193
- bmcgo/component/template_v2/conanbase.py.mako,sha256=Zx4e4wmVl9TGDrTBVluQzQWh5VXy9yr4b8F0y8MLmVA,14650
193
+ bmcgo/component/template_v2/conanbase.py.mako,sha256=Xp8EqMHZbjzX9bbq_F1Qm3VV73ZxhSxDS6qB2HIeKvY,15591
194
194
  bmcgo/component/template_v2/conanfile.deploy.py.mako,sha256=Xbd-PlfVHOWeRFLfvzINeykiZzzSHsgO_yUUvYrKqTw,512
195
195
  bmcgo/functional/__init__.py,sha256=BDXz8BcSlCkfo5UYt6j2rm89-HiYA1ZzfpFhy99MH-0,538
196
196
  bmcgo/functional/analysis.py,sha256=pXakxSojBH-dULngbmgMHR3bq9tphOaAN4euGKgEYoc,4016
197
197
  bmcgo/functional/bmc_studio_action.py,sha256=Gg96UB8QtnhsaqSdMhXuS9fddzAFPhR6UYCpto9UOYA,3605
198
198
  bmcgo/functional/check.py,sha256=ReGN_8RRM6isX_r7XXEuHzkooh8pasky5_GpAml5d_g,8356
199
- bmcgo/functional/conan_index_build.py,sha256=GFHs4KRUgieYK9gK7-tLSDattRXBjVwEV6I4j95MeTs,11350
199
+ bmcgo/functional/conan_index_build.py,sha256=wQdrXA_ItIN0pO7If-21HyQftJsR76oahX-h4BBgQs4,12249
200
200
  bmcgo/functional/config.py,sha256=ZQ-a9hegI0cV41iTo7t49ryBeUH4wPJ-qkVvWp8toV4,10824
201
201
  bmcgo/functional/csr_build.py,sha256=JTIvbjn08xvdo7aUhKW4giwPayojyIeQolT14SuwJRo,41146
202
202
  bmcgo/functional/deploy.py,sha256=2NsxCpoZjL4jTyRpbIp20-EKKbQkQe-Hsm20uxHK2Xc,10677
@@ -224,7 +224,7 @@ bmcgo/tasks/__init__.py,sha256=VapgzhPMmB7dzPIRohoVm1jjfVn_v97cYNCRmkxScaU,539
224
224
  bmcgo/tasks/download_buildtools_hm.py,sha256=f4UxStARc8Z8DnT_5O6ONajQ7P0sKyJ8brixr43fHVQ,5988
225
225
  bmcgo/tasks/misc.py,sha256=GK_bSDLGZW0FxywB2ICG1iIEz2y2QoCb1YQQk8SYOIA,711
226
226
  bmcgo/tasks/task.py,sha256=ayh9mxKKLtk2XKzjqXOl6Pe8fcg7S1nTks153hKT9Rw,18321
227
- bmcgo/tasks/task_build_conan.py,sha256=pm8PIrlVyLvfXNaft5z8J3gcDmCDSclkGf7Wgdod4Q8,49263
227
+ bmcgo/tasks/task_build_conan.py,sha256=GZFHpjRdWvzdwS546q6waOLhzZn862kPTfxl5EdwFhw,50248
228
228
  bmcgo/tasks/task_build_rootfs_img.py,sha256=JKEvldJnLWu2IdVSntuVowocQwdVtBQUpxzhplYauPI,29209
229
229
  bmcgo/tasks/task_build_wbd_up.py,sha256=X9-0Qqad-s3mGfJBMeBQvfZ99KlWcgaMluDr_zv6Z-o,3122
230
230
  bmcgo/tasks/task_buildgppbin.py,sha256=epBxxrYFPgoTzpBgPzSRXcUs-ia_BJWsLGflylEJS7I,6614
@@ -244,7 +244,7 @@ bmcgo/utils/buffer.py,sha256=t1SkWntWksboNFMPsltslwRdXZi3FAe8eV0JAAE7Vto,4004
244
244
  bmcgo/utils/build_conans.py,sha256=1kugt48GRf2P-IilkxFSBTl3i8_Xk5EB4cN2LeuZZJY,9330
245
245
  bmcgo/utils/combine_json_schemas.py,sha256=08JrAlLeo_JgUqzYcZNgSwJZPLfjbWVJ4esPPt9bPMY,7967
246
246
  bmcgo/utils/component_post.py,sha256=QS1uBW8abE_Ok9G_5IzKLG6kwA7DAx1Yoqo_wvgNeAc,2354
247
- bmcgo/utils/component_version_check.py,sha256=93K_YqrWfG5YnAU9UP84Sq0NmUBaKMO2ZoVadgHKFcs,3723
247
+ bmcgo/utils/component_version_check.py,sha256=BKuQG49cGBTBt4oIODMzjjeKH0TIV2-4lk2jmYaLTjk,6264
248
248
  bmcgo/utils/config.py,sha256=xCljGFk7m8IVsCSchJDAzollZEZyXoMDLIgqRMepL-I,49952
249
249
  bmcgo/utils/fetch_component_code.py,sha256=gUjZX1m6tzUaleKrA3V42gbOFnNtepZaxItATc6nQa4,11159
250
250
  bmcgo/utils/install_manager.py,sha256=XMZUuIHm7_DWRdLV4dAevsyamQ6rt8lb_7OqGWzNBC8,4927
@@ -264,8 +264,8 @@ bmcgo/utils/installations/install_plans/qemu.yml,sha256=lT7aKag60QUH6hTGFKa3hGRq
264
264
  bmcgo/utils/installations/install_plans/studio.yml,sha256=APR3GM-3Q11LFfe8vh7t3LztDn4LLEpNHRUNjkaVekA,143
265
265
  bmcgo/utils/installations/installers/apt_installer.py,sha256=nPaCb4cobSi9InN_aHsEPtQ0k4FgsCUWE5_VgBPvcRE,3769
266
266
  bmcgo/utils/installations/installers/pip_installer.py,sha256=dDdios1EQ7fzt90r02pZeoM3jCmjslLzkSvzd2hgRVM,3241
267
- openubmc_bingo-0.6.0.dist-info/METADATA,sha256=ip9cIeNQuvo7mIj7-TCXL1efBEdRx1Ph5oQrk_UVe6A,1009
268
- openubmc_bingo-0.6.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
269
- openubmc_bingo-0.6.0.dist-info/entry_points.txt,sha256=UUoUP-vAWTgg9vEYbRwYqOBHgpRtkngdzMPb-ocz90g,42
270
- openubmc_bingo-0.6.0.dist-info/top_level.txt,sha256=9AcvCAt1nZcOgMsGt6T07mg2Bgtdet-3mHTwg91axgI,6
271
- openubmc_bingo-0.6.0.dist-info/RECORD,,
267
+ openubmc_bingo-0.6.2.dist-info/METADATA,sha256=HYgd-dHJ8zX3FYtT7IGwceCGCVAAVu67Rcj_Hp2i4OM,1009
268
+ openubmc_bingo-0.6.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
269
+ openubmc_bingo-0.6.2.dist-info/entry_points.txt,sha256=UUoUP-vAWTgg9vEYbRwYqOBHgpRtkngdzMPb-ocz90g,42
270
+ openubmc_bingo-0.6.2.dist-info/top_level.txt,sha256=9AcvCAt1nZcOgMsGt6T07mg2Bgtdet-3mHTwg91axgI,6
271
+ openubmc_bingo-0.6.2.dist-info/RECORD,,