aboutsummaryrefslogtreecommitdiff
blob: 95a38768993453e90c617079f66b4d213f467475 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/python
#  scans a directory for bad overlay creation results:
#  * empty dirs
#  * missing metadata/Manifest)
#  In contrast to repoman, it does verify that overlay creation succeeded,
#  not that every ebuild is correct.

import os
import sys

MISSING_METADATA = set()
MISSING_MANIFEST = set()
EMPTY = set()

no_metadata = MISSING_METADATA.add
no_manifest = MISSING_MANIFEST.add
empty       = EMPTY.add

if len ( sys.argv ) != 2:
	sys.stderr.write ( "usage: {} <dir>\n".format ( sys.argv [0] ) )
	sys.exit ( os.EX_USAGE )

topdir = os.path.abspath ( sys.argv [1] )

if not os.path.isdir ( topdir ):
	sys.stderr.write ( "{!r} isn't a directory!\n".format ( topdir ) )
	sys.exit ( os.EX_USAGE )

def ebuild_check ( filenames ):
	man = False
	mtd = False
	eb  = False
	for f in filenames:
		if f.endswith ( '.ebuild' ):
			eb = True

		elif f == 'metadata.xml':
			mtd = True

		elif f == 'Manifest':
			man = True

		if eb and mtd and man:
			return ( True, True, True )

	return ( eb, man, mtd )


for dpath, dnames, fnames in os.walk ( topdir ):
	here = dpath.replace ( topdir, "<overlay root>" )

	e = ebuild_check ( fnames )

	if e[0]:

		if not e[1]:
			# metadata missing
			no_metadata ( here )

		if not e[2]:
			# manifest missing
			no_manifest ( here )

	elif len ( dnames ) == 0 and len ( fnames ) == 0:
		empty ( here )


ALL_OK = not ( MISSING_METADATA or MISSING_MANIFEST or EMPTY )

if MISSING_METADATA:
	print ( "*** The following ebuild directories have no metadata file:" )
	print ( '\n'.join ( sorted ( MISSING_METADATA ) ) )

if MISSING_MANIFEST:
	print ( "*** The following ebuild directories have no Manifest file:" )
	print ( '\n'.join ( sorted ( MISSING_MANIFEST ) ) )

if EMPTY:
	print ( "*** The following dirs are empty:" )
	print ( '\n'.join ( sorted ( EMPTY ) ) )


if ALL_OK:
	print ( "everything looks ok" )