diff --git a/main.py b/main.py index dd742ef595bf4ee27fbf49d62dd5d07dbb0f5c00..cdd8f9f90552946bfd44519070ea8839874156ca 100644 --- a/main.py +++ b/main.py @@ -32,6 +32,7 @@ from src.main.algclassify import AlgClassify from src.log.logger import logger, LOGGER from src.report.report_generator import ReportGenerator from src.rpmquery.querylayeriniso import QueryLayerInIso +from src.rpmquery.querylayerinlocal import QueryLayerInLocal class kyClassifier(object): @@ -101,7 +102,8 @@ if __name__ == '__main__': ' -repo\n', ' -local\n', ' -console_log\n', - ' -q_rpminiso RPM_FILE_PATH ISO_FILE_PATH'] + ' -q_rpminiso RPM_FILE_PATH ISO_FILE_PATH\n', + ' -q_rpminlocal RPM_FILE_PATH'] str_usage = 'kyclassifier ' + ' '.join(options) parser = argparse.ArgumentParser(usage=str_usage) @@ -110,6 +112,7 @@ if __name__ == '__main__': parser.add_argument('-local', action = 'store_true', help='Whether to analyze local installed packages.') parser.add_argument('-console_log', action = 'store_true', default = True, help='Output log to console.') parser.add_argument('-q_rpminiso', type=str, nargs=2, help='Query input rpm layer in iso.') + parser.add_argument('-q_rpminlocal', type=str, nargs=1, help='Query input rpm layer in local.') args = parser.parse_args() if len(sys.argv) == 1: @@ -122,8 +125,6 @@ if __name__ == '__main__': #进程检查函数 find_processes_with_cmdline_keyword('kyclassifier') - find_processes_with_cmdline_keyword('kyclassifier') - logger.info("Start run kyclassifier...") if args.iso: if not IsoCheck.check(args.iso): @@ -143,5 +144,11 @@ if __name__ == '__main__': logger.info("Check error,skipped query rpm layer in iso.") else: logger.info("Rpm layer in iso is {}".format(layer)) + if args.q_rpminlocal: + layer = QueryLayerInLocal.run(args.q_rpminlocal) + if layer < 0: + logger.info("Check error,skipped query rpm layer in local.") + else: + logger.info("Rpm layer in local is {}".format(layer)) logger.info("Kyclassifier end!") diff --git a/src/rpmquery/querylayerinrepo.py b/src/rpmquery/querylayerinrepo.py new file mode 100644 index 0000000000000000000000000000000000000000..9c907c3aa3ae196162db764ca11005bbab24065a --- /dev/null +++ b/src/rpmquery/querylayerinrepo.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +""" +# ********************************************************************************** +# Copyright (c) KylinSoft Co., Ltd. 2024.All rights reserved. +# [kyclassifier] licensed under the Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR +# PURPOSE. +# See the Mulan PSL v2 for more details. +# ********************************************************************************** +""" + +from .rpmquery import RpmQuery + + +class QueryLayerInRepo(RpmQuery): + + def __init__(self,rpm): + pass + + def run(self): + """入口函数 + """ + pass + + def get_rpm_layer(self): + """查询rpm层级 + """ + pass + + def _get_rpmdeps(self): + """获取rpm包在repo中的南向依赖包 + """ + pass + + def _get_repopkgs_layer(self): + """获取repopkgs的分层结果 + """ + pass + + def check(self): + """检查输入rpm以及配置的repo + """ + pass + + @property + def rpm(self): + pass \ No newline at end of file diff --git a/src/utils/isocheck.py b/src/utils/isocheck.py index ceeb9fd78e82846af9117a3c5a77736e71762976..6d3672e1faca3025dfd35882edad65586229ad04 100644 --- a/src/utils/isocheck.py +++ b/src/utils/isocheck.py @@ -40,17 +40,16 @@ class IsoCheck(object): ISO文件必须包含repodata目录 """ + if not os.path.isfile(self.path): + return False iso = pycdlib.PyCdlib() try: check_result = False iso.open(self.path) - entry = iso.get_entry(iso_path='/repodata') if entry.is_dir(): check_result = True - iso.close() - return check_result except (ISOCheckError, pycdlib.pycdlibexception.PyCdlibException, struct.error) as e: print("Error checking ISO: {}".format(str(e)))