1 |
commit: 78ca6a4c4a2cad2cbd3281ec9cd5ebfe008b799a |
2 |
Author: André Erdmann <dywi <AT> mailerd <DOT> de> |
3 |
AuthorDate: Mon Jul 9 16:44:24 2012 +0000 |
4 |
Commit: André Erdmann <dywi <AT> mailerd <DOT> de> |
5 |
CommitDate: Mon Jul 9 16:44:24 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=78ca6a4c |
7 |
|
8 |
find_invalid.py: verify overlay creation |
9 |
|
10 |
new file: find_invalid.py |
11 |
|
12 |
--- |
13 |
find_invalid.py | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
1 files changed, 84 insertions(+), 0 deletions(-) |
15 |
|
16 |
diff --git a/find_invalid.py b/find_invalid.py |
17 |
new file mode 100755 |
18 |
index 0000000..95a3876 |
19 |
--- /dev/null |
20 |
+++ b/find_invalid.py |
21 |
@@ -0,0 +1,84 @@ |
22 |
+#!/usr/bin/python |
23 |
+# scans a directory for bad overlay creation results: |
24 |
+# * empty dirs |
25 |
+# * missing metadata/Manifest) |
26 |
+# In contrast to repoman, it does verify that overlay creation succeeded, |
27 |
+# not that every ebuild is correct. |
28 |
+ |
29 |
+import os |
30 |
+import sys |
31 |
+ |
32 |
+MISSING_METADATA = set() |
33 |
+MISSING_MANIFEST = set() |
34 |
+EMPTY = set() |
35 |
+ |
36 |
+no_metadata = MISSING_METADATA.add |
37 |
+no_manifest = MISSING_MANIFEST.add |
38 |
+empty = EMPTY.add |
39 |
+ |
40 |
+if len ( sys.argv ) != 2: |
41 |
+ sys.stderr.write ( "usage: {} <dir>\n".format ( sys.argv [0] ) ) |
42 |
+ sys.exit ( os.EX_USAGE ) |
43 |
+ |
44 |
+topdir = os.path.abspath ( sys.argv [1] ) |
45 |
+ |
46 |
+if not os.path.isdir ( topdir ): |
47 |
+ sys.stderr.write ( "{!r} isn't a directory!\n".format ( topdir ) ) |
48 |
+ sys.exit ( os.EX_USAGE ) |
49 |
+ |
50 |
+def ebuild_check ( filenames ): |
51 |
+ man = False |
52 |
+ mtd = False |
53 |
+ eb = False |
54 |
+ for f in filenames: |
55 |
+ if f.endswith ( '.ebuild' ): |
56 |
+ eb = True |
57 |
+ |
58 |
+ elif f == 'metadata.xml': |
59 |
+ mtd = True |
60 |
+ |
61 |
+ elif f == 'Manifest': |
62 |
+ man = True |
63 |
+ |
64 |
+ if eb and mtd and man: |
65 |
+ return ( True, True, True ) |
66 |
+ |
67 |
+ return ( eb, man, mtd ) |
68 |
+ |
69 |
+ |
70 |
+for dpath, dnames, fnames in os.walk ( topdir ): |
71 |
+ here = dpath.replace ( topdir, "<overlay root>" ) |
72 |
+ |
73 |
+ e = ebuild_check ( fnames ) |
74 |
+ |
75 |
+ if e[0]: |
76 |
+ |
77 |
+ if not e[1]: |
78 |
+ # metadata missing |
79 |
+ no_metadata ( here ) |
80 |
+ |
81 |
+ if not e[2]: |
82 |
+ # manifest missing |
83 |
+ no_manifest ( here ) |
84 |
+ |
85 |
+ elif len ( dnames ) == 0 and len ( fnames ) == 0: |
86 |
+ empty ( here ) |
87 |
+ |
88 |
+ |
89 |
+ALL_OK = not ( MISSING_METADATA or MISSING_MANIFEST or EMPTY ) |
90 |
+ |
91 |
+if MISSING_METADATA: |
92 |
+ print ( "*** The following ebuild directories have no metadata file:" ) |
93 |
+ print ( '\n'.join ( sorted ( MISSING_METADATA ) ) ) |
94 |
+ |
95 |
+if MISSING_MANIFEST: |
96 |
+ print ( "*** The following ebuild directories have no Manifest file:" ) |
97 |
+ print ( '\n'.join ( sorted ( MISSING_MANIFEST ) ) ) |
98 |
+ |
99 |
+if EMPTY: |
100 |
+ print ( "*** The following dirs are empty:" ) |
101 |
+ print ( '\n'.join ( sorted ( EMPTY ) ) ) |
102 |
+ |
103 |
+ |
104 |
+if ALL_OK: |
105 |
+ print ( "everything looks ok" ) |