From: fuzzyray Date: Fri, 1 May 2009 14:48:36 +0000 (-0000) Subject: Add ekeyword rewritten in python to repo X-Git-Tag: gentoolkit-0.3.0_rc5~29 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=39f0e0f09af96bd51b7ee2ebc71afd8f8a3988d5;p=gentoolkit.git Add ekeyword rewritten in python to repo svn path=/; revision=567 --- diff --git a/trunk/src/ekeyword2/ekeyword2 b/trunk/src/ekeyword2/ekeyword2 new file mode 100755 index 0000000..963fb5c --- /dev/null +++ b/trunk/src/ekeyword2/ekeyword2 @@ -0,0 +1,93 @@ +#!/usr/bin/python + +# Output like: +# setuptools-0.6_rc9.ebuild +# < KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd -x86 ~x86-fbsd" +# --- +# > KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd x86 ~x86-fbsd" + +from __future__ import with_statement +from sys import argv +from fnmatch import fnmatch +from shutil import copyfile + +import re + +STABLE_KEYWORDS = frozenset(( + 'alpha', + 'amd64', + 'amd64-fbsd', + 'arm', + 'hppa', + 'ia64', + 'mips', + 'm68k', + 'ppc', + 'ppc-macos', + 'ppc64', + 's390', + 'sparc', + 'sparc-fbsd', + 'sh', + 'x86', + 'x86-fbsd', +)) +TEST_KEYWORDS = frozenset(['~'+k for k in STABLE_KEYWORDS]) +KNOWN_KEYWORDS = STABLE_KEYWORDS | TEST_KEYWORDS + +kw_re = re.compile(r'KEYWORDS="([^"]*)"') +ebuilds = set([x for x in argv[1:] if fnmatch(x, '*.ebuild')]) +pretend = not bool(set(('-p', '--pretend',)) - set(argv)) +keywords = frozenset(argv[1:]) - ebuilds - set(('-p', '--pretend')) + +if not ebuilds: + print 'usage: ekeyword [-p|--pretend] [~] [[~|-]arch [[~|-]arch]...] ebuild [ebuild...]' + +for e in ebuilds: + # TODO: error handling for file I/O + kw = set(keywords) + if not pretend: + try: + copyfile(e, e+'.orig') + except IOError: + print "Can't copy file %s. Check permissions." % e + exit(1) + try: + with open(e) as c: + ebuild = c.read() + except IOError: + print "Can't open file %s. Aborting." % e + exit(1) + + orig = kw_re.search(ebuild) + curkw = set(orig.groups()[0].split()) + + if '~' in kw: + kw.remove('~') + curkw = set(['~'+k if k in STABLE_KEYWORDS else k for k in curkw]) + + for k in kw: + if k[0] == '-': + curkw -= set(('~'+k[1:], k[1:],)) + elif k[0] == '~': + curkw -= set((k[1:],)) + curkw |= set((k,)) + else: + curkw -= set(('~'+k,)) + curkw |= set((k,)) + + result = 'KEYWORDS="%s"' % ' '.join(sorted(curkw)) + if not pretend: + try: + with open(e, 'w') as rebuild: + rebuild.write(kw_re.sub(result, ebuild)) + except IOError: + print "Can't write file %s. Aborting." % e + exit(1) + + unknown_keywords = curkw - KNOWN_KEYWORDS + if unknown_keywords: + print "\nWarning: Unknown keywords '%s'.\n" % ', '.join(sorted(unknown_keywords)) + + print '<<< %s' % orig.group() + print '>>> %s' % result