@@ -112,6 +112,13 @@ def get_exact_pkg(self, **pattern):
112112 info = self .get_exact_pkg_info (** pattern )
113113 return self .get_rpm_pkg_by_info (info ) if info else None
114114
115+ def _pattern_check (self , pkg , ** pattern ):
116+ for key in ['md5' , 'name' , 'version' , 'release' , 'arch' ]:
117+ if pattern .get (key ) is not None and getattr (pkg , key ) != pattern [key ]:
118+ self .stdio and getattr (self .stdio , 'verbose' , print )('pkg %s is %s, but %s is required' % (key , getattr (pkg , key ), pattern [key ]))
119+ return None
120+ return pkg
121+
115122 def get_rpm_pkg_by_info (self , pkg_info ):
116123 return None
117124
@@ -428,14 +435,14 @@ def get_repomds(self, update=False):
428435 def get_all_pkg_info (self ):
429436 return [self .db [key ] for key in self .db ]
430437
431- def get_rpm_info_by_md5 (self , md5 ):
438+ def get_rpm_info_by_md5 (self , md5 , ** pattern ):
432439 if md5 in self .db :
433- return self .db [md5 ]
440+ return self ._pattern_check ( self . db [md5 ], ** pattern )
434441 for key in self .db :
435442 info = self .db [key ]
436443 if info .md5 == md5 :
437444 self .stdio and getattr (self .stdio , 'verbose' , print )('%s translate info %s' % (md5 , info .md5 ))
438- return info
445+ return self . _pattern_check ( info , ** pattern )
439446 return None
440447
441448 def get_rpm_pkg_by_info (self , pkg_info ):
@@ -464,7 +471,7 @@ def get_best_pkg_info(self, **pattern):
464471 def get_exact_pkg_info (self , ** pattern ):
465472 if 'md5' in pattern and pattern ['md5' ]:
466473 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is %s' % pattern ['md5' ])
467- return self .get_rpm_info_by_md5 (pattern [ 'md5' ] )
474+ return self .get_rpm_info_by_md5 (** pattern )
468475 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is None' )
469476 if 'name' not in pattern and not pattern ['name' ]:
470477 self .stdio and getattr (self .stdio , 'verbose' , print )('name is None' )
@@ -499,7 +506,10 @@ def get_pkgs_info_with_score(self, **pattern):
499506 matchs = []
500507 if 'md5' in pattern and pattern ['md5' ]:
501508 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is %s' % pattern ['md5' ])
502- return [self .db [pattern ['md5' ]], (0xfffffffff , )] if pattern ['md5' ] in self .db else matchs
509+ info = None
510+ if pattern ['md5' ] in self .db :
511+ info = self ._pattern_check (self .db [pattern ['md5' ]], ** pattern )
512+ return [info , (0xfffffffff , )] if info else matchs
503513 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is None' )
504514 if 'name' not in pattern and not pattern ['name' ]:
505515 self .stdio and getattr (self .stdio , 'verbose' , print )('name is None' )
@@ -689,7 +699,10 @@ def get_best_pkg_info(self, **pattern):
689699 def get_exact_pkg_info (self , ** pattern ):
690700 if 'md5' in pattern and pattern ['md5' ]:
691701 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is %s' % pattern ['md5' ])
692- return self .db [pattern ['md5' ]] if pattern ['md5' ] in self .db else None
702+ info = None
703+ if pattern ['md5' ] in self .db :
704+ info = self ._pattern_check (self .db [pattern ['md5' ]], ** pattern )
705+ return info
693706 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is None' )
694707 if 'name' not in pattern and not pattern ['name' ]:
695708 self .stdio and getattr (self .stdio , 'verbose' , print )('name is None' )
@@ -730,7 +743,10 @@ def get_pkgs_info_with_score(self, **pattern):
730743 matchs = []
731744 if 'md5' in pattern and pattern ['md5' ]:
732745 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is %s' % pattern ['md5' ])
733- return [self .db [pattern ['md5' ]], (0xfffffffff , )] if pattern ['md5' ] in self .db else matchs
746+ info = None
747+ if pattern ['md5' ] in self .db :
748+ info = self ._pattern_check (self .db [pattern ['md5' ]], ** pattern )
749+ return [info , (0xfffffffff , )] if info else matchs
734750 self .stdio and getattr (self .stdio , 'verbose' , print )('md5 is None' )
735751 if 'name' not in pattern and not pattern ['name' ]:
736752 return matchs
0 commit comments