Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:drehren
java-1_7_0-openjdk-infinality-font
update.py
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File update.py of Package java-1_7_0-openjdk-infinality-font
#!/usr/bin/python # # generates the script updates tarballs and update working copy # # Copyright (C) 2013-2014, Michal Vyskocil<mvyskocil@suse.com> # # Released under terms of MIT, see # http://opensource.org/licenses/MIT # # Changelog: # 2014-01-15: require icedtea-dir, instead of Makefile.am and hotspot.map paths # 2013-05-13: initial version from __future__ import print_function import re import collections import sys import os.path if len(sys.argv) < 3: print("Usage: update.py spec icedtea-dir") sys.exit(1) SPEC=sys.argv[1] ITDIR=sys.argv[2] if not os.path.isdir(ITDIR): print("Usage: update.py spec icedtea-dir") sys.exit(1) MAKEFILE=os.path.join(ITDIR, "Makefile.am") HOTSPOT_MAP=os.path.join(ITDIR, "hotspot.map") SOURCE_RE = re.compile(r'^Source([5-9]|1[0-3]):') MAKEFILE_DEF_PATTERN = (r"(?P<def>[A-Z_]+)") MAKEFILE_DEF_RE = re.compile(r"\$\({}\)".format(MAKEFILE_DEF_PATTERN)) MAKEFILE_DEFLINE_RE = re.compile(r"^{} = (?P<value>.*)".format(MAKEFILE_DEF_PATTERN)) defs = None class MakefileDefs(object): def __init__(self, d): self._d = d @classmethod def fromio(cls, io): ret = dict() for line in io: m = MAKEFILE_DEFLINE_RE.match(line) if m: ret[m.group('def')] = m.group('value') return cls(ret) def __getitem__(self, key): v = self._d[key] m = MAKEFILE_DEF_RE.search(v) while m: #unless makefile, we ends with an error on undefined variable v = v.replace(m.group(), defs[m.groups()[0]], 1) self._d[key] = v m = MAKEFILE_DEF_RE.search(v) return v def get(self, key, default=None): try: return self.__getitem__(key) except KeyError: return default def __setitem__(self, key, value): return self._d.__setitem__(key, value) def update_from_map(self, io): for line in hm: key, url, changeset, sha = line.split(' ', 3) if key == 'default': self._d['HOTSPOT_CHANGESET'] = changeset self._d['HOTSPOT_URL'] = url elif key == 'aarch64': self._d['AARCH64_CHANGESET'] = changeset self._d['AARCH64_URL'] = url return self with open(MAKEFILE, "rt") as make: defs = MakefileDefs.fromio(make) if HOTSPOT_MAP is not None: with open(HOTSPOT_MAP, 'rt') as hm: defs.update_from_map(hm) MAP = { 'Source5:' : 'OPENJDK', 'Source6:' : 'CORBA', 'Source7:' : 'JAXP', 'Source8:' : 'JAXWS', 'Source9:' : 'JDK', 'Source10:' : 'LANGTOOLS', 'Source11:' : 'HOTSPOT', 'Source12:' : 'AARCH64', 'Source13:' : 'JAMVM' } def generate_update_script_dict(spec_io, defs, MAP): us = collections.defaultdict(list) for line in spec: m = SOURCE_RE.match(line) if not m: continue # things from spec file source, url = line.split(' ', 1) url = url.strip() f = url.rsplit('/', 1)[1] # find matching Makefile.am defs dpref = MAP[source] if dpref not in ("JAMVM", ): changeset = defs.get("{}_CHANGESET".format(dpref)) if not changeset: print("WARNING: {}_CHANGESET not available".format(dpref), file=sys.stderr) continue m_url = "{}/archive/{}.tar.gz".format( defs["{}_URL".format(dpref)], changeset) else: changeset = defs["{}_VERSION".format(dpref)] m_url = defs["{}_URL".format(dpref)] if m_url != url: us['wget'].append(m_url) us['osc'].append(f) us['sed'].append((source, m_url)) return us def print_update_script(out, us): if not us: pass out.write("""#!/bin/bash # # an openjdk.spec update script generated by update.py # # this downloads all files, removes old ones, adds new ones and change spec # # be verbose set -x if [[ -n "$(osc status | grep '^?')" ]]; then echo "ERROR: osc status shows come uncommited changes, please fix-em-first" exit 1 fi """) for url in us['wget']: out.write("[[ ! -f \"{file}\" ]] && wget -q '{url}'\n".format(url=url, file=url.split("/")[-1:][0])) for f in us['osc']: out.write("osc rm -f '{}'\n".format(f)) for source, url in us['sed']: out.write("sed -i 's@^{s}.*@{s} {u}@' {spec}\n".format( s=source, space=(17-len(source))*' ', u=url, spec=SPEC)) out.write("osc addremove\n") with open(SPEC, "rt") as spec: us = generate_update_script_dict(spec, defs, MAP) print_update_script(sys.stdout, us)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor