On 02/12/2012 10:15 AM, Sergei Trofimovich wrote: > Feature request: > Can we add a double-inclusion detector for profiles to repoman?
If it's not too noisy. Right now, profiles.desc contains 83 profiles with double inclusions like this. See attached data and scripts. -- Thanks, Zac
default/linux/alpha/10.0/desktop/gnome targets/desktop default/linux/alpha/10.0/desktop/kde targets/desktop default/linux/amd64/10.0/desktop/gnome targets/desktop default/linux/amd64/10.0/desktop/kde targets/desktop default/linux/amd64/10.0/no-multilib arch/amd64 arch/base features/multilib features/multilib/lib32 default/linux/arm/10.0/armv4 arch/arm arch/base default/linux/arm/10.0/armv4/desktop arch/arm arch/base default/linux/arm/10.0/armv4/desktop/gnome arch/arm arch/base targets/desktop default/linux/arm/10.0/armv4/desktop/kde arch/arm arch/base targets/desktop default/linux/arm/10.0/armv4/developer arch/arm arch/base default/linux/arm/10.0/armv4/server arch/arm arch/base default/linux/arm/10.0/armv4t arch/arm arch/base default/linux/arm/10.0/armv4t/desktop arch/arm arch/base default/linux/arm/10.0/armv4t/desktop/gnome arch/arm arch/base targets/desktop default/linux/arm/10.0/armv4t/desktop/kde arch/arm arch/base targets/desktop default/linux/arm/10.0/armv4t/developer arch/arm arch/base default/linux/arm/10.0/armv4t/server arch/arm arch/base default/linux/arm/10.0/armv5te arch/arm arch/base default/linux/arm/10.0/armv5te/desktop arch/arm arch/base default/linux/arm/10.0/armv5te/desktop/gnome arch/arm arch/base targets/desktop default/linux/arm/10.0/armv5te/desktop/kde arch/arm arch/base targets/desktop default/linux/arm/10.0/armv5te/developer arch/arm arch/base default/linux/arm/10.0/armv5te/server arch/arm arch/base default/linux/arm/10.0/armv6j arch/arm arch/base default/linux/arm/10.0/armv6j/desktop arch/arm arch/base default/linux/arm/10.0/armv6j/desktop/gnome arch/arm arch/base targets/desktop default/linux/arm/10.0/armv6j/desktop/kde arch/arm arch/base targets/desktop default/linux/arm/10.0/armv6j/developer arch/arm arch/base default/linux/arm/10.0/armv6j/server arch/arm arch/base default/linux/arm/10.0/armv7a arch/arm arch/base default/linux/arm/10.0/armv7a/desktop arch/arm arch/base default/linux/arm/10.0/armv7a/desktop/gnome arch/arm arch/base targets/desktop default/linux/arm/10.0/armv7a/desktop/kde arch/arm arch/base targets/desktop default/linux/arm/10.0/armv7a/developer arch/arm arch/base default/linux/arm/10.0/armv7a/server arch/arm arch/base default/linux/arm/10.0/desktop/gnome targets/desktop default/linux/arm/10.0/desktop/kde targets/desktop default/linux/hppa/10.0/desktop/gnome targets/desktop default/linux/hppa/10.0/desktop/kde targets/desktop default/linux/ia64/10.0/desktop/gnome targets/desktop default/linux/ia64/10.0/desktop/kde targets/desktop default/linux/m68k/10.0/desktop/gnome targets/desktop default/linux/m68k/10.0/desktop/kde targets/desktop default/linux/mips/10.0 base default/linux/mips/10.0/mipsel arch/mips base default/linux/mips/10.0/mipsel/multilib arch/mips arch/mips/mipsel base default/linux/mips/10.0/mipsel/multilib/n32 arch/mips arch/mips/mipsel base default/linux/mips/10.0/mipsel/multilib/n64 arch/mips arch/mips/mipsel base default/linux/mips/10.0/mipsel/n32 arch/mips arch/mips/mipsel base default/linux/mips/10.0/mipsel/n64 arch/mips arch/mips/mipsel base default/linux/mips/10.0/multilib arch/mips base default/linux/mips/10.0/multilib/n32 arch/mips base default/linux/mips/10.0/multilib/n64 arch/mips base default/linux/mips/10.0/n32 arch/mips base default/linux/mips/10.0/n64 arch/mips base default/linux/powerpc/ppc32/10.0 arch/base arch/powerpc default/linux/powerpc/ppc32/10.0/desktop arch/base arch/powerpc default/linux/powerpc/ppc32/10.0/desktop/gnome arch/base arch/powerpc targets/desktop default/linux/powerpc/ppc32/10.0/desktop/kde arch/base arch/powerpc targets/desktop default/linux/powerpc/ppc32/10.0/developer arch/base arch/powerpc default/linux/powerpc/ppc32/10.0/server arch/base arch/powerpc default/linux/powerpc/ppc64/10.0/32bit-userland arch/base arch/powerpc arch/powerpc/ppc64 default/linux/powerpc/ppc64/10.0/32bit-userland/desktop arch/base arch/powerpc arch/powerpc/ppc64 default/linux/powerpc/ppc64/10.0/32bit-userland/desktop/gnome arch/base arch/powerpc arch/powerpc/ppc64 targets/desktop default/linux/powerpc/ppc64/10.0/32bit-userland/desktop/kde arch/base arch/powerpc arch/powerpc/ppc64 targets/desktop default/linux/powerpc/ppc64/10.0/32bit-userland/developer arch/base arch/powerpc arch/powerpc/ppc64 default/linux/powerpc/ppc64/10.0/32bit-userland/server arch/base arch/powerpc arch/powerpc/ppc64 default/linux/powerpc/ppc64/10.0/64bit-userland arch/base arch/powerpc arch/powerpc/ppc64 default/linux/powerpc/ppc64/10.0/64bit-userland/desktop arch/base arch/powerpc arch/powerpc/ppc64 default/linux/powerpc/ppc64/10.0/64bit-userland/desktop/gnome arch/base arch/powerpc arch/powerpc/ppc64 targets/desktop default/linux/powerpc/ppc64/10.0/64bit-userland/desktop/kde arch/base arch/powerpc arch/powerpc/ppc64 targets/desktop default/linux/powerpc/ppc64/10.0/64bit-userland/developer arch/base arch/powerpc arch/powerpc/ppc64 default/linux/powerpc/ppc64/10.0/64bit-userland/server arch/base arch/powerpc arch/powerpc/ppc64 default/linux/sh/10.0/desktop/gnome targets/desktop default/linux/sh/10.0/desktop/kde targets/desktop default/linux/sparc/10.0/desktop/gnome targets/desktop default/linux/sparc/10.0/desktop/kde targets/desktop default/linux/x86/10.0/desktop/gnome targets/desktop default/linux/x86/10.0/desktop/kde targets/desktop hardened/linux/powerpc/ppc32 arch/base arch/powerpc hardened/linux/powerpc/ppc64/32bit-userland arch/base arch/powerpc hardened/linux/powerpc/ppc64/64bit-userland arch/base arch/powerpc prefix/linux/amd64 arch/amd64 arch/base features/multilib features/multilib/lib32
#!/usr/bin/env python import operator import os import sys import portage def grab_profiles_desc(repo_path): lines = portage.util.grablines( os.path.join(repo_path, "profiles", "profiles.desc")) profiles = [] for line in lines: if line.startswith("#"): continue line_split = line.split() if line_split: profiles.append(line_split) return profiles def check_double_inclusion(repo_path, profile, out): profiles_dir = os.path.join(repo_path, "profiles") profile_path = os.path.join(profiles_dir, profile[1]) c = portage.config(config_profile_path=profile_path) if len(c.profiles) != len(set(c.profiles)): previous = set() duplicates = set() for x in c.profiles: if x in previous: duplicates.add(x) previous.add(x) out.write("%s\t%s\n" % (profile[1], "\t".join((x[len(profiles_dir)+1:] for x in sorted(duplicates))))) def main(): portdir = portage.settings["PORTDIR"] profiles_desc = grab_profiles_desc(portdir) profiles_desc.sort(key=operator.itemgetter(1)) for profile in profiles_desc: check_double_inclusion(portdir, profile, sys.stdout) if __name__ == "__main__": main()
#!/usr/bin/env python import sys import portage c = portage.config(config_profile_path=sys.argv[1]) for x in c.profiles: sys.stdout.write("%s\n" % (x,))