1 |
Author: fuzzyray |
2 |
Date: 2009-05-01 14:48:36 +0000 (Fri, 01 May 2009) |
3 |
New Revision: 567 |
4 |
|
5 |
Added: |
6 |
trunk/src/ekeyword2/ |
7 |
trunk/src/ekeyword2/ekeyword2 |
8 |
Log: |
9 |
Add ekeyword rewritten in python to repo |
10 |
|
11 |
Added: trunk/src/ekeyword2/ekeyword2 |
12 |
=================================================================== |
13 |
--- trunk/src/ekeyword2/ekeyword2 (rev 0) |
14 |
+++ trunk/src/ekeyword2/ekeyword2 2009-05-01 14:48:36 UTC (rev 567) |
15 |
@@ -0,0 +1,93 @@ |
16 |
+#!/usr/bin/python |
17 |
+ |
18 |
+# Output like: |
19 |
+# setuptools-0.6_rc9.ebuild |
20 |
+# < KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd -x86 ~x86-fbsd" |
21 |
+# --- |
22 |
+# > KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd x86 ~x86-fbsd" |
23 |
+ |
24 |
+from __future__ import with_statement |
25 |
+from sys import argv |
26 |
+from fnmatch import fnmatch |
27 |
+from shutil import copyfile |
28 |
+ |
29 |
+import re |
30 |
+ |
31 |
+STABLE_KEYWORDS = frozenset(( |
32 |
+ 'alpha', |
33 |
+ 'amd64', |
34 |
+ 'amd64-fbsd', |
35 |
+ 'arm', |
36 |
+ 'hppa', |
37 |
+ 'ia64', |
38 |
+ 'mips', |
39 |
+ 'm68k', |
40 |
+ 'ppc', |
41 |
+ 'ppc-macos', |
42 |
+ 'ppc64', |
43 |
+ 's390', |
44 |
+ 'sparc', |
45 |
+ 'sparc-fbsd', |
46 |
+ 'sh', |
47 |
+ 'x86', |
48 |
+ 'x86-fbsd', |
49 |
+)) |
50 |
+TEST_KEYWORDS = frozenset(['~'+k for k in STABLE_KEYWORDS]) |
51 |
+KNOWN_KEYWORDS = STABLE_KEYWORDS | TEST_KEYWORDS |
52 |
+ |
53 |
+kw_re = re.compile(r'KEYWORDS="([^"]*)"') |
54 |
+ebuilds = set([x for x in argv[1:] if fnmatch(x, '*.ebuild')]) |
55 |
+pretend = not bool(set(('-p', '--pretend',)) - set(argv)) |
56 |
+keywords = frozenset(argv[1:]) - ebuilds - set(('-p', '--pretend')) |
57 |
+ |
58 |
+if not ebuilds: |
59 |
+ print 'usage: ekeyword [-p|--pretend] [~] [[~|-]arch [[~|-]arch]...] ebuild [ebuild...]' |
60 |
+ |
61 |
+for e in ebuilds: |
62 |
+ # TODO: error handling for file I/O |
63 |
+ kw = set(keywords) |
64 |
+ if not pretend: |
65 |
+ try: |
66 |
+ copyfile(e, e+'.orig') |
67 |
+ except IOError: |
68 |
+ print "Can't copy file %s. Check permissions." % e |
69 |
+ exit(1) |
70 |
+ try: |
71 |
+ with open(e) as c: |
72 |
+ ebuild = c.read() |
73 |
+ except IOError: |
74 |
+ print "Can't open file %s. Aborting." % e |
75 |
+ exit(1) |
76 |
+ |
77 |
+ orig = kw_re.search(ebuild) |
78 |
+ curkw = set(orig.groups()[0].split()) |
79 |
+ |
80 |
+ if '~' in kw: |
81 |
+ kw.remove('~') |
82 |
+ curkw = set(['~'+k if k in STABLE_KEYWORDS else k for k in curkw]) |
83 |
+ |
84 |
+ for k in kw: |
85 |
+ if k[0] == '-': |
86 |
+ curkw -= set(('~'+k[1:], k[1:],)) |
87 |
+ elif k[0] == '~': |
88 |
+ curkw -= set((k[1:],)) |
89 |
+ curkw |= set((k,)) |
90 |
+ else: |
91 |
+ curkw -= set(('~'+k,)) |
92 |
+ curkw |= set((k,)) |
93 |
+ |
94 |
+ result = 'KEYWORDS="%s"' % ' '.join(sorted(curkw)) |
95 |
+ if not pretend: |
96 |
+ try: |
97 |
+ with open(e, 'w') as rebuild: |
98 |
+ rebuild.write(kw_re.sub(result, ebuild)) |
99 |
+ except IOError: |
100 |
+ print "Can't write file %s. Aborting." % e |
101 |
+ exit(1) |
102 |
+ |
103 |
+ unknown_keywords = curkw - KNOWN_KEYWORDS |
104 |
+ if unknown_keywords: |
105 |
+ print "\nWarning: Unknown keywords '%s'.\n" % ', '.join(sorted(unknown_keywords)) |
106 |
+ |
107 |
+ print '<<< %s' % orig.group() |
108 |
+ print '>>> %s' % result |
109 |
|
110 |
|
111 |
Property changes on: trunk/src/ekeyword2/ekeyword2 |
112 |
___________________________________________________________________ |
113 |
Name: svn:executable |
114 |
+ * |