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,))