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

Reply via email to