'''
@rtype: Atom
'''
- if not len(mydep):
- return mydep
- if mydep[0]=="*":
- mydep=mydep[1:]
orig_dep = mydep
if isinstance(orig_dep, Atom):
- mydep = orig_dep.cp
+ has_cat = True
else:
+ if not mydep:
+ return mydep
+ if mydep[0] == "*":
+ mydep = mydep[1:]
mydep = orig_dep
has_cat = '/' in orig_dep
if not has_cat:
if not has_cat:
null_cat, pn = catsplit(mydep.cp)
mydep = pn
- else:
- mydep = mydep.cp
+
+ if has_cat:
+ # Optimize most common cases to avoid calling cpv_expand.
+ if not mydep.cp.startswith("virtual/"):
+ return mydep
+ if not hasattr(mydb, "cp_list") or \
+ mydb.cp_list(mydep.cp):
+ return mydep
+ # Fallback to legacy cpv_expand for old-style PROVIDE virtuals.
+ mydep = mydep.cp
+
expanded = cpv_expand(mydep, mydb=mydb,
use_cache=use_cache, settings=settings)
return Atom(orig_dep.replace(mydep, expanded, 1), allow_repo=True)