http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/input/releases/qpid-jms-amqp-0-x-master/index.md ---------------------------------------------------------------------- diff --git a/input/releases/qpid-jms-amqp-0-x-master/index.md b/input/releases/qpid-jms-amqp-0-x-master/index.md new file mode 100644 index 0000000..57f8c87 --- /dev/null +++ b/input/releases/qpid-jms-amqp-0-x-master/index.md @@ -0,0 +1,46 @@ +;; +;; Licensed to the Apache Software Foundation (ASF) under one +;; or more contributor license agreements. See the NOTICE file +;; distributed with this work for additional information +;; regarding copyright ownership. The ASF licenses this file +;; to you under the Apache License, Version 2.0 (the +;; "License"); you may not use this file except in compliance +;; with the License. You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, +;; software distributed under the License is distributed on an +;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +;; KIND, either express or implied. See the License for the +;; specific language governing permissions and limitations +;; under the License. +;; + +# Qpid JMS for AMQP 0-x documentation snapshot + +<div class="feature" markdown="1"> + +## Warning! This is a snapshot of work in progress + +Documentation found here may be incorrect or incomplete. For a +smoother experience, see the [current stable +release]({{current_jms_amqp_0_x_release_url}}/index.html). + +This content was generated at 12:42 on Wednesday, 26 April 2017. + +</div> + +## Documentation + + +<div class="two-column" markdown="1"> + + - [API reference](http://docs.oracle.com/javaee/7/api/javax/jms/package-summary.html) + +</div> + + +## More information + + - [Source repository](https://git-wip-us.apache.org/repos/asf/qpid-jms-amqp-0-x.git) \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/input/releases/snapshots.md ---------------------------------------------------------------------- diff --git a/input/releases/snapshots.md b/input/releases/snapshots.md index 5965acf..d831838 100644 --- a/input/releases/snapshots.md +++ b/input/releases/snapshots.md @@ -2,9 +2,11 @@ Warning! These are snapshots of work in progress. + - [Qpid Broker-J]({{site_url}}/releases/qpid-broker-j-master/index.html) - [Qpid C++]({{site_url}}/releases/qpid-cpp-master/index.html) - [Qpid Dispatch]({{site_url}}/releases/qpid-dispatch-master/index.html) - [Qpid JMS]({{site_url}}/releases/qpid-jms-master/index.html) + - [Qpid JMS for AMQP 0-x]({{site_url}}/releases/qpid-jms-amqp-0-x-master/index.html) - [Qpid for Java]({{site_url}}/releases/qpid-java-trunk/index.html) - [Qpid Proton]({{site_url}}/releases/qpid-proton-master/index.html) - [Qpid Python]({{site_url}}/releases/qpid-python-master/index.html) http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/python/generate.py ---------------------------------------------------------------------- diff --git a/python/generate.py b/python/generate.py index 33c9841..9d6d982 100644 --- a/python/generate.py +++ b/python/generate.py @@ -6,9 +6,9 @@ # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -53,18 +53,18 @@ def setup_release_script(): assert release_dir != "" assert checkout_dir is None or checkout_dir != "" - call("cmake --version > /dev/null") - call("dot -V > /dev/null") - call("doxygen --version > /dev/null") - call("epydoc --version > /dev/null") - call("fop -version > /dev/null") - call("gcc --version > /dev/null") - call("make --version > /dev/null") - call("rdoc --version > /dev/null") - call("which sphinx-build > /dev/null") - call("svn --version > /dev/null") - call("which javadoc > /dev/null") - call("xsltproc --version > /dev/null") + call_and_print_on_error("cmake --version") + call_and_print_on_error("dot -V") + call_and_print_on_error("doxygen --version") + call_and_print_on_error("epydoc --version") + call_and_print_on_error("fop -version") + call_and_print_on_error("gcc --version") + call_and_print_on_error("make --version") + call_and_print_on_error("rdoc --version") + call_and_print_on_error("which sphinx-build") + call_and_print_on_error("svn --version") + call_and_print_on_error("which javadoc") + call_and_print_on_error("xsltproc --version") notice("Release script inputs:") notice(" release: {}", pformat(release)) @@ -96,7 +96,7 @@ def get_svn_release_url(module, release): if release == "trunk": path = "trunk/qpid" - + return "{}/{}".format(project_url, path) path = "{}/{}{}".format(module, release_path_prefix, release) @@ -113,6 +113,7 @@ def get_git_release_branch_url(module, release, path=""): If called without PATH it returns a URL that you can append paths to. """ + modules = { "cpp": "https://github.com/apache/qpid-cpp/tree", "proton": "https://github.com/apache/qpid-proton/tree", @@ -123,45 +124,24 @@ def get_git_release_branch_url(module, release, path=""): return "{}/{}/{}".format(modules[module], release, path.lstrip("/")) -def export_release(module, release, checkout_dir): - temp_dir = make_user_temp_dir() - dir_name = "qpid-{}-{}".format(module, release) - export_dir = join(temp_dir, "transom", dir_name) - - if is_dir(export_dir): - debug("Export already exists") - return export_dir - - remove(export_dir) - make_dir(split(export_dir)[0]) - - uri = get_svn_release_url(module, release) - - if checkout_dir is not None: - uri = checkout_dir - - call("svn export {} {}", uri, export_dir) - - return export_dir - -def export_release_from_git(module, release): +def fetch_source(module, release): work_dir = make_temp_dir() user_temp_dir = make_user_temp_dir() dir_name = "qpid-{}-{}".format(module, release) - export_dir = join(user_temp_dir, "transom", dir_name) + source_dir = join(user_temp_dir, "transom", dir_name) url = "http://git-wip-us.apache.org/repos/asf/qpid-{}.git".format(module) - if is_dir(export_dir): - debug("Export already exists") - return export_dir + if is_dir(source_dir): + debug("Source already exists") + return source_dir - make_dir(export_dir) + make_dir(source_dir) with working_dir(work_dir): call("git clone --bare --branch '{}' '{}' .", release, url) - call("git archive '{}' | tar -xf - -C '{}'", release, export_dir) + call("git archive '{}' | tar -xf - -C '{}'", release, source_dir, shell=True) - return export_dir + return source_dir ## API reference ## @@ -187,7 +167,7 @@ def gen_doxygen(release, title, input_paths, strip_paths, output_dir, input_paths = " ".join(input_paths) strip_paths = " ".join(strip_paths) example_paths = " ".join(example_paths) - + make_dir(output_dir) source_conf = "" @@ -196,7 +176,7 @@ def gen_doxygen(release, title, input_paths, strip_paths, output_dir, if config_file is not None: source_conf = read(config_file) - path = make_temp("conf") + path = make_temp_file() write(path, source_conf) append(path, local_conf) @@ -221,7 +201,10 @@ def gen_epydoc(release, title, input_paths, input_namespaces, output_dir): options.append("--url \"http://qpid.apache.org/index.html\"") options = " ".join(options) - call("PYTHONPATH={} epydoc {} {}", input_paths, options, input_namespaces) + env = ENV + env["PYTHONPATH"] = input_paths + + call("epydoc {} {}", options, input_namespaces, env=env) touch(join(output_dir, "_transom_ignore_pages")) @@ -259,8 +242,9 @@ def gen_rdoc(release, title, base_input_path, input_paths, output_dir): input_paths = " ".join(input_paths) - call("cd {} && rdoc {} {}", base_input_path, options, input_paths) - + with working_dir(base_input_path): + call("rdoc {} {}", options, input_paths) + touch(join(output_dir, "_transom_ignore_pages")) ## Examples ## @@ -367,7 +351,7 @@ def gen_examples_index(release, input_names, output_dir, title, example_links = LINE_SEP.join(example_links) info_links = LINE_SEP.join(info_links) - + index = _examples_index_template.format(**locals()) write(output_path, index) @@ -424,7 +408,7 @@ def _fetch_issues(project, release): } issues = list() - + for i in range(100): params["startAt"] = i * page_size http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/python/plano.py ---------------------------------------------------------------------- diff --git a/python/plano.py b/python/plano.py index 52a4e86..15e7bce 100644 --- a/python/plano.py +++ b/python/plano.py @@ -6,9 +6,9 @@ # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at -# +# # http://www.apache.org/licenses/LICENSE-2.0 -# +# # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -20,95 +20,161 @@ from __future__ import print_function import atexit as _atexit +import binascii as _binascii import codecs as _codecs +import collections as _collections import fnmatch as _fnmatch import getpass as _getpass +import json as _json import os as _os import random as _random import re as _re +import shlex as _shlex import shutil as _shutil +import signal as _signal +import socket as _socket import subprocess as _subprocess import sys as _sys import tarfile as _tarfile import tempfile as _tempfile +import time as _time import traceback as _traceback +import types as _types +import uuid as _uuid + +from subprocess import CalledProcessError # See documentation at http://www.ssorj.net/projects/plano.html +LINE_SEP = _os.linesep +PATH_SEP = _os.sep +PATH_VAR_SEP = _os.pathsep +ENV = _os.environ +ARGS = _sys.argv + +STD_ERR = _sys.stderr +STD_OUT = _sys.stdout +NULL_DEV = _os.devnull + +_message_levels = ( + "debug", + "notice", + "warn", + "error", +) + +_debug = _message_levels.index("debug") +_notice = _message_levels.index("notice") +_warn = _message_levels.index("warn") +_error = _message_levels.index("error") + +_message_output = STD_ERR +_message_threshold = _notice + +def set_message_output(writeable): + global _message_output + _message_output = writeable + +def set_message_threshold(level): + assert level in _message_levels + + global _message_threshold + _message_threshold = _message_levels.index(level) + def fail(message, *args): error(message, *args) if isinstance(message, BaseException): raise message - raise Exception(message) + raise Exception(message.format(*args)) def error(message, *args): - _traceback.print_exc() - _print_message("Error", message, args, _sys.stderr) + _print_message("Error", message, args) def warn(message, *args): - _print_message("Warn", message, args, _sys.stderr) + if _message_threshold <= _warn: + _print_message("Warning", message, args) def notice(message, *args): - _print_message(None, message, args, _sys.stdout) + if _message_threshold <= _notice: + _print_message(None, message, args) def debug(message, *args): - _print_message("Debug", message, args, _sys.stdout) + if _message_threshold <= _debug: + _print_message("Debug", message, args) -def exit(message=None, *args): - if message is None: +def exit(arg=None, *args): + if arg in (0, None): _sys.exit() - _print_message("Error", message, args, _sys.stderr) + if _is_string(arg): + error(arg, args) + _sys.exit(1) + elif isinstance(arg, _types.IntType): + if arg > 0: + error("Exiting with code {0}", arg) + else: + notice("Exiting with code {0}", arg) - _sys.exit(1) + _sys.exit(arg) + else: + raise Exception() + +def _print_message(category, message, args): + if _message_output is None: + return -def _print_message(category, message, args, file): message = _format_message(category, message, args) - print(message, file=file) - file.flush() + print(message, file=_message_output) + + _message_output.flush() def _format_message(category, message, args): - if isinstance(message, BaseException): + if not _is_string(message): message = str(message) - if message == "": - message = message.__class__.__name__ - - if category: - message = "{}: {}".format(category, message) - if args: message = message.format(*args) - script = split(_sys.argv[0])[1] - message = "{}: {}".format(script, message) + if len(message) > 0 and message[0].islower(): + message = message[0].upper() + message[1:] + + if category: + message = "{0}: {1}".format(category, message) + + program = program_name() + message = "{0}: {1}".format(program, message) return message +def eprint(*args, **kwargs): + print(*args, file=STD_ERR, **kwargs) + +def flush(): + STD_OUT.flush() + STD_ERR.flush() + absolute_path = _os.path.abspath normalize_path = _os.path.normpath +real_path = _os.path.realpath exists = _os.path.exists is_absolute = _os.path.isabs is_dir = _os.path.isdir is_file = _os.path.isfile is_link = _os.path.islink +file_size = _os.path.getsize join = _os.path.join split = _os.path.split split_extension = _os.path.splitext -LINE_SEP = _os.linesep -PATH_SEP = _os.sep -ENV = _os.environ -ARGS = _sys.argv - current_dir = _os.getcwd +sleep = _time.sleep def home_dir(user=""): - return _os.path.expanduser("~{}".format(user)) + return _os.path.expanduser("~{0}".format(user)) def parent_dir(path): path = normalize_path(path) @@ -135,9 +201,26 @@ def name_stem(file): def name_extension(file): name = file_name(file) stem, ext = split_extension(name) - + return ext +def program_name(command=None): + if command is None: + args = ARGS + else: + args = command.split() + + for arg in args: + if "=" not in arg: + return file_name(arg) + +def which(program_name): + for dir in ENV["PATH"].split(PATH_VAR_SEP): + program = join(dir, program_name) + + if _os.access(program, _os.X_OK): + return program + def read(file): with _codecs.open(file, encoding="utf-8", mode="r") as f: return f.read() @@ -160,9 +243,13 @@ def prepend(file, string): return write(file, prepended) +# XXX Should this work on directories? def touch(file): return append(file, "") +def tail(file, n): + return "".join(tail_lines(file, n)) + def read_lines(file): with _codecs.open(file, encoding="utf-8", mode="r") as f: return f.readlines() @@ -188,40 +275,48 @@ def prepend_lines(file, lines): return file -_temp_dir = _tempfile.mkdtemp(prefix="plano.") +# Derived from http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail +def tail_lines(file, n): + assert n >= 0 -def _get_temp_file(key): - assert not key.startswith("_") + with _codecs.open(file, encoding="utf-8", mode="r") as f: + pos = n + 1 + lines = list() - return join(_temp_dir, "_file_{}".format(key)) + while len(lines) <= n: + try: + f.seek(-pos, 2) + except IOError: + f.seek(0) + break + finally: + lines = f.readlines() -def _remove_temp_dir(): - _shutil.rmtree(_temp_dir, ignore_errors=True) + pos *= 2 -_atexit.register(_remove_temp_dir) + return lines[-n:] -def read_temp(key): - file = _get_temp_file(key) - return read(file) +def read_json(file): + with _codecs.open(file, encoding="utf-8", mode="r") as f: + return _json.load(f) -def write_temp(key, string): - file = _get_temp_file(key) - return write(file, string) +def write_json(file, obj): + with _codecs.open(file, encoding="utf-8", mode="w") as f: + return _json.dump(obj, f, indent=4, separators=(",", ": "), sort_keys=True) -def append_temp(key, string): - file = _get_temp_file(key) - return append(file, string) +_temp_dir = _tempfile.mkdtemp(prefix="plano-") -def prepend_temp(key, string): - file = _get_temp_file(key) - return prepend(file, string) +def _remove_temp_dir(): + _shutil.rmtree(_temp_dir, ignore_errors=True) + +_atexit.register(_remove_temp_dir) -def make_temp(key): - return append_temp(key, "") +# XXX Use _tempfile instead +def make_temp_file(extension=""): + key = unique_id(4) + file = join(_temp_dir, "_file_{0}{1}".format(key, extension)) -def open_temp(key, mode="r"): - file = _get_temp_file(key) - return _codecs.open(file, encoding="utf-8", mode=mode) + return append(file, "") # This one is deleted on process exit def make_temp_dir(): @@ -235,13 +330,22 @@ def make_user_temp_dir(): return make_dir(user_temp_dir) -def copy(from_path, to_path): - notice("Copying '{}' to '{}'", from_path, to_path) +def unique_id(length=16): + assert length >= 1 + assert length <= 16 - to_dir = parent_dir(to_path) + uuid_bytes = _uuid.uuid4().bytes + uuid_bytes = uuid_bytes[:length] - if to_dir: - make_dir(to_dir) + return _binascii.hexlify(uuid_bytes).decode("utf-8") + +def copy(from_path, to_path): + notice("Copying '{0}' to '{1}'", from_path, to_path) + + if is_dir(to_path): + to_path = join(to_path, file_name(from_path)) + else: + make_dir(parent_dir(to_path)) if is_dir(from_path): _copytree(from_path, to_path, symlinks=True) @@ -251,7 +355,12 @@ def copy(from_path, to_path): return to_path def move(from_path, to_path): - notice("Moving '{}' to '{}'", from_path, to_path) + notice("Moving '{0}' to '{1}'", from_path, to_path) + + if is_dir(to_path): + to_path = join(to_path, file_name(from_path)) + else: + make_dir(parent_dir(to_path)) _shutil.move(from_path, to_path) @@ -263,14 +372,14 @@ def rename(path, expr, replacement): to_name = string_replace(name, expr, replacement) to_path = join(parent_dir, to_name) - notice("Renaming '{}' to '{}'", path, to_path) + notice("Renaming '{0}' to '{1}'", path, to_path) move(path, to_path) return to_path def remove(path): - notice("Removing '{}'", path) + notice("Removing '{0}'", path) if not exists(path): return @@ -283,10 +392,17 @@ def remove(path): return path def make_link(source_path, link_file): + notice("Making link '{0}' to '{1}'", link_file, source_path) + if exists(link_file): assert read_link(link_file) == source_path return + link_dir = parent_dir(link_file) + + if link_dir: + make_dir(link_dir) + _os.symlink(source_path, link_file) return link_file @@ -315,7 +431,7 @@ def find_any_one(dir, *patterns): if len(paths) == 0: return - + return paths[0] def find_only_one(dir, *patterns): @@ -323,7 +439,7 @@ def find_only_one(dir, *patterns): if len(paths) == 0: return - + assert len(paths) == 1 return paths[0] @@ -341,7 +457,7 @@ def make_dir(dir): # Returns the current working directory so you can change it back def change_dir(dir): - notice("Changing directory to '{}'", dir) + notice("Changing directory to '{0}'", dir) cwd = current_dir() _os.chdir(dir) @@ -374,24 +490,152 @@ class working_dir(object): def __exit__(self, type, value, traceback): change_dir(self.prev_dir) -def _init_call(command, args, kwargs): - if args: - command = command.format(*args) +def call(command, *args, **kwargs): + proc = start_process(command, *args, **kwargs) - if "shell" not in kwargs: - kwargs["shell"] = True + wait_for_process(proc) - notice("Calling '{}'", command) + if proc.returncode != 0: + command_string = _command_string(command) + command_string = command_string.format(*args) - return command, kwargs + raise CalledProcessError(proc.returncode, command_string) -def call(command, *args, **kwargs): - command, args = _init_call(command, args, kwargs) - _subprocess.check_call(command, **kwargs) +def call_for_exit_code(command, *args, **kwargs): + proc = start_process(command, *args, **kwargs) + + wait_for_process(proc) + + return proc.returncode def call_for_output(command, *args, **kwargs): - command, args = _init_call(command, args, kwargs) - return _subprocess.check_output(command, **kwargs) + kwargs["stdout"] = _subprocess.PIPE + + proc = start_process(command, *args, **kwargs) + output = proc.communicate()[0] + exit_code = proc.poll() + + if exit_code not in (None, 0): + command_string = _command_string(command) + command_string = command_string.format(*args) + + error = CalledProcessError(exit_code, command_string) + error.output = output + + raise error + + return output + +def call_and_print_on_error(command, *args, **kwargs): + output_file = make_temp_file() + + try: + with open(output_file, "w") as out: + kwargs["output"] = out + call(command, *args, **kwargs) + except CalledProcessError: + eprint(read(output_file), end="") + raise + +_child_processes = list() + +class _Process(_subprocess.Popen): + def __init__(self, command, *args, **kwargs): + super(_Process, self).__init__(command, *args, **kwargs) + + try: + self.name = kwargs["name"] + except KeyError: + if _is_string(command): + self.name = program_name(command) + elif isinstance(command, _collections.Iterable): + self.name = command[0] + else: + raise Exception() + + _child_processes.append(self) + + def __repr__(self): + return "process {0} ({1})".format(self.pid, self.name) + +def _command_string(command): + if _is_string(command): + return command + + elems = ["\"{0}\"".format(x) if " " in x else x for x in command] + + return " ".join(elems) + +def default_sigterm_handler(signum, frame): + for proc in _child_processes: + if proc.poll() is None: + proc.terminate() + + _remove_temp_dir() + + exit(-(_signal.SIGTERM)) + +_signal.signal(_signal.SIGTERM, default_sigterm_handler) + +def start_process(command, *args, **kwargs): + if _is_string(command): + command = command.format(*args) + command_args = _shlex.split(command) + command_string = command + elif isinstance(command, _collections.Iterable): + assert len(args) == 0, args + command_args = command + command_string = _command_string(command) + else: + raise Exception() + + notice("Calling '{0}'", command_string) + + if "output" in kwargs: + out = kwargs.pop("output") + + kwargs["stdout"] = out + kwargs["stderr"] = out + + if "shell" in kwargs and kwargs["shell"]: + proc = _Process(command_string, **kwargs) + else: + proc = _Process(command_args, **kwargs) + + debug("{0} started", proc) + + return proc + +def stop_process(proc): + notice("Stopping {0}", proc) + + if proc.poll() is not None: + if proc.returncode == 0: + debug("{0} already exited normally", proc) + elif proc.returncode == -(_signal.SIGTERM): + debug("{0} was already terminated", proc) + else: + debug("{0} already exited with code {1}", proc, proc.returncode) + + return + + proc.terminate() + + return wait_for_process(proc) + +def wait_for_process(proc): + debug("Waiting for {0} to exit", proc) + + proc.wait() + + if proc.returncode == 0: + debug("{0} exited normally", proc) + elif proc.returncode == -(_signal.SIGTERM): + debug("{0} exited after termination", proc) + else: + debug("{0} exited with code {1}", proc, proc.returncode) + + return proc.returncode def make_archive(input_dir, output_dir, archive_stem): temp_dir = make_temp_dir() @@ -400,11 +644,11 @@ def make_archive(input_dir, output_dir, archive_stem): copy(input_dir, temp_input_dir) make_dir(output_dir) - output_file = "{}.tar.gz".format(join(output_dir, archive_stem)) + output_file = "{0}.tar.gz".format(join(output_dir, archive_stem)) output_file = absolute_path(output_file) with working_dir(temp_dir): - call("tar -czf {} {}", output_file, archive_stem) + call("tar -czf {0} {1}", output_file, archive_stem) return output_file @@ -417,7 +661,7 @@ def extract_archive(archive_file, output_dir): archive_file = absolute_path(archive_file) with working_dir(output_dir): - call("tar -xf {}", archive_file) + call("tar -xf {0}", archive_file) return output_dir @@ -425,7 +669,7 @@ def rename_archive(archive_file, new_archive_stem): assert is_file(archive_file) if name_stem(archive_file) == new_archive_stem: - return + return archive_file temp_dir = make_temp_dir() @@ -446,6 +690,27 @@ def rename_archive(archive_file, new_archive_stem): def random_port(min=49152, max=65535): return _random.randint(min, max) +def wait_for_port(port, host="", timeout=30): + if _is_string(port): + port = int(port) + + sock = _socket.socket(_socket.AF_INET, _socket.SOCK_STREAM) + sock.setsockopt(_socket.SOL_SOCKET, _socket.SO_REUSEADDR, 1) + + start = _time.time() + + try: + while True: + if sock.connect_ex((host, port)) == 0: + return + + sleep(0.1) + + if _time.time() - start > timeout: + fail("Timed out waiting for port {0} to open", port) + finally: + sock.close() + # Modified copytree impl that allows for already existing destination # dirs def _copytree(src, dst, symlinks=False, ignore=None): @@ -513,3 +778,9 @@ def _copytree(src, dst, symlinks=False, ignore=None): errors.append((src, dst, str(why))) if errors: raise _shutil.Error(errors) + +def _is_string(obj): + try: + return isinstance(obj, basestring) + except NameError: + return isinstance(obj, str) http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-broker-j-release-docs ---------------------------------------------------------------------- diff --git a/scripts/gen-broker-j-release-docs b/scripts/gen-broker-j-release-docs new file mode 100755 index 0000000..dea889a --- /dev/null +++ b/scripts/gen-broker-j-release-docs @@ -0,0 +1,89 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from __future__ import print_function + +from generate import * + +import uuid +from xml.etree import ElementTree + +def gen_broker_j_books(release, source_dir, output_dir): + toplevel_pom = join(source_dir, "pom.xml") + input_dir = join(source_dir, "doc") + + cpp_broker_book_url = "/releases/qpid-cpp-{{current_cpp_release}}/cpp-broker/book/" + jms_client010_book_url = "/releases/qpid-jms-amqp-0-x-{{current_jms_amqp_0_x_release}}/jms-client-0-10/book/" + + call("mvn -f {} -pl doc -amd -Ddoc=true package -DqpidCppBook={} -DqpidJmsClient010Book={}", + toplevel_pom, + cpp_broker_book_url, + jms_client010_book_url) + + java_broker_input_dir = join(input_dir, "java-broker", "target", "docbkx") + java_broker_output_dir = join(output_dir, "java-broker") + + remove(java_broker_output_dir) + + copy(java_broker_input_dir, join(java_broker_output_dir, "book")) + + for path in find(java_broker_output_dir, "*.html"): + print(path) + + tree = ElementTree.parse(path) + elem = tree.find(".//{http://www.w3.org/1999/xhtml}body") + + elem.tag = "div" + elem.set("class", "docbook") + + remove_namespace(elem, "http://www.w3.org/1999/xhtml") + + # A hack to preserve docbook's empty anchors in an + # IE-compatible way + + target = str(uuid.uuid4()) + + for a in tree.iter("a"): + if a.text is None: + a.text = target + + content = ElementTree.tostring(elem) + content = content.replace(target, "") + + write("{}.in".format(path), content) + remove(path) + +# From http://homework.nwsnet.de/releases/45be/ +def remove_namespace(doc, namespace): + """Remove namespace in the passed document in place.""" + ns = u'{%s}' % namespace + nsl = len(ns) + for elem in doc.getiterator(): + if elem.tag.startswith(ns): + elem.tag = elem.tag[nsl:] + +## Now do stuff ## + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() +source_dir = checkout_dir or fetch_source("broker-j", source_release) + +gen_broker_j_books(release, source_dir, release_dir) + +notice("Docs generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-broker-j-release-notes ---------------------------------------------------------------------- diff --git a/scripts/gen-broker-j-release-notes b/scripts/gen-broker-j-release-notes new file mode 100755 index 0000000..3a8f494 --- /dev/null +++ b/scripts/gen-broker-j-release-notes @@ -0,0 +1,73 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from generate import * + +template = \ +""" +;; +;; Licensed to the Apache Software Foundation (ASF) under one +;; or more contributor license agreements. See the NOTICE file +;; distributed with this work for additional information +;; regarding copyright ownership. The ASF licenses this file +;; to you under the Apache License, Version 2.0 (the +;; "License"); you may not use this file except in compliance +;; with the License. You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, +;; software distributed under the License is distributed on an +;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +;; KIND, either express or implied. See the License for the +;; specific language governing permissions and limitations +;; under the License. +;; + +# Qpid Broker-J {release} Release Notes + +Qpid Broker-J is a message broker written in Java that stores, routes, +and forwards messages using AMQP. + +For more information about this release, including download links and +documentation, see the [release overview](index.html). + +{release_notes} +""" + +def gen_release_notes(release, issues_release, release_dir): + output_path = join(release_dir, "release-notes.md") + + release_notes = render_release_notes("broker-j", issues_release) + + output = template.format(**locals()) + output = output.strip() + + write(output_path, output) + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() + +if release == "master": + notice("Skipping generation for master") + exit() + +gen_release_notes(release, issues_release, release_dir) + +notice("Release notes generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-broker-j-release-page ---------------------------------------------------------------------- diff --git a/scripts/gen-broker-j-release-page b/scripts/gen-broker-j-release-page new file mode 100755 index 0000000..065a684 --- /dev/null +++ b/scripts/gen-broker-j-release-page @@ -0,0 +1,245 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from generate import * + +from datetime import datetime + +source_artefact_records = ( + ("qpid-broker-j-{}.tar.gz", "Qpid Broker-J"), +) + +binary_artefact_records = ( + ("qpid-broker-{}-bin.tar.gz", "Qpid Broker-J"), +) + +component_records = ( + ("broker-j", "Qpid Broker-J", "Java", "JVM", "1.0, 0-10, 0-9-1, 0-9, 0-8"), +) + +documentation = \ +""" +<div class="two-column" markdown="1"> + + - [Installing Qpid Broker-J](java-broker/book/Java-Broker-Installation.html) + - [Broker book](java-broker/book/index.html) + +</div> +""" + +template = \ +""" +;; +;; Licensed to the Apache Software Foundation (ASF) under one +;; or more contributor license agreements. See the NOTICE file +;; distributed with this work for additional information +;; regarding copyright ownership. The ASF licenses this file +;; to you under the Apache License, Version 2.0 (the +;; "License"); you may not use this file except in compliance +;; with the License. You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, +;; software distributed under the License is distributed on an +;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +;; KIND, either express or implied. See the License for the +;; specific language governing permissions and limitations +;; under the License. +;; + +# Qpid Broker-J {release} + +Qpid Broker-J is a message broker written in Java that stores, routes, +and forwards messages using AMQP. More about +[Qpid]({{{{site_url}}}}/index.html). + +For a detailed list of the changes in this release, see the [release +notes](release-notes.html). + +It's important to [verify the +integrity]({{{{site_url}}}}/download.html#verify-what-you-download) of the +files you download. + +## Source archives + +| Content | Download | Verify | +|---------|----------|--------| +{source_artefacts} + +## Binaries + +| Content | Download | Verify | +|---------|----------|--------| +{binary_artefacts} + +## Components + +| Component | Languages | Platforms | AMQP versions | +|-----------|-----------|-----------|---------------| +{components} + +## Documentation + +{documentation} + +## More information + + - [All release artefacts](http://archive.apache.org/dist/qpid/broker-j/{release}) + - [Resolved issues in JIRA]({issues_url}) + - [Source repository tag](https://git-wip-us.apache.org/repos/asf/qpid-broker-j.git/tree/refs/tags/{release}) + +<script type="text/javascript"> + _deferredFunctions.push(function() {{ + if ("{release}" === "{{{{current_broker_j_release}}}}") {{ + _modifyCurrentReleaseLinks(); + }} + }}); +</script> +""" + +def gen_release_page(release, issues_release, source_release, release_dir): + output_path = join(release_dir, "index.md") + + components = list() + + source_artefacts = list() + source_artefact_url = "http://archive.apache.org/dist/qpid/broker-j/{}/{}" + + binary_artefacts = list() + binary_artefact_url = "http://archive.apache.org/dist/qpid/broker-j/{}/binaries/{}" + + for artefact, summary in source_artefact_records: + artefact = artefact.format(release) + artefact_url = source_artefact_url.format(release, artefact) + asc_url = "{}.asc".format(artefact_url) + md5_url = "{}.md5".format(artefact_url) + sha_url = "{}.sha".format(artefact_url) + + args = summary, artefact, artefact_url, asc_url, md5_url, sha_url + row = "| {} | [{}]({}) | [ASC]({}), [MD5]({}), [SHA512]({}) |".format(*args) + + source_artefacts.append(row) + + for artefact, summary in binary_artefact_records: + artefact = artefact.format(release) + artefact_url = binary_artefact_url.format(release, artefact) + asc_url = "{}.asc".format(artefact_url) + md5_url = "{}.md5".format(artefact_url) + sha_url = "{}.sha".format(artefact_url) + + args = summary, artefact, artefact_url, asc_url, md5_url, sha_url + row = "| {} | [{}]({}) | [ASC]({}), [MD5]({}), [SHA512]({}) |".format(*args) + + binary_artefacts.append(row) + + for key, name, languages, platforms, amqp_versions in component_records: + if key.endswith(".html"): + link = "[{}]({{{{site_url}}}}/components/{})".format(name, key) + else: + link = "[{}]({{{{site_url}}}}/components/{}/index.html)".format(name, key) + args = link, languages, platforms, amqp_versions + components.append("| {} | {} | {} | {} |".format(*args)) + + source_artefacts = "\n".join(source_artefacts) + binary_artefacts = "\n".join(binary_artefacts) + components = "\n".join(components) + + jql = "project = QPID AND fixVersion = '{}' AND resolution = 'fixed' ORDER BY priority DESC".format(issues_release) + issues_url = "https://issues.apache.org/jira/issues/?jql={}".format(urllib.quote_plus(jql)) + + vars = locals() + vars["documentation"] = documentation + + output = template.format(**vars) + output = output.strip() + + write(output_path, output) + +trunk_template = """ +;; +;; Licensed to the Apache Software Foundation (ASF) under one +;; or more contributor license agreements. See the NOTICE file +;; distributed with this work for additional information +;; regarding copyright ownership. The ASF licenses this file +;; to you under the Apache License, Version 2.0 (the +;; "License"); you may not use this file except in compliance +;; with the License. You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, +;; software distributed under the License is distributed on an +;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +;; KIND, either express or implied. See the License for the +;; specific language governing permissions and limitations +;; under the License. +;; + +# Qpid Broker-J documentation snapshot + +<div class="feature" markdown="1"> + +## Warning! This is a snapshot of work in progress + +Documentation found here may be incorrect or incomplete. For a +smoother experience, see the [current stable +release]({{{{current_broker_j_release_url}}}}/index.html). + +This content was generated at {time} on {day}, {date}. + +</div> + +## Documentation + +{documentation} + +## More information + + - [Source repository](https://git-wip-us.apache.org/repos/asf/qpid-broker-j.git) +""" + +def gen_master_release_page(release_dir): + output_path = join(release_dir, "index.md") + + now = datetime.now() + + day = now.strftime("%A") + date = now.strftime("%d %B %Y") + time = now.strftime("%H:%M %Z") + + vars = locals() + vars["documentation"] = documentation + + output = trunk_template.format(**vars) + output = output.strip() + + write(output_path, output) + +## Now do stuff ## + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() + +if release == "master": + gen_master_release_page(release_dir) +else: + gen_release_page(release, issues_release, source_release, release_dir) + +notice("Release page generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-cpp-release-api-doc ---------------------------------------------------------------------- diff --git a/scripts/gen-cpp-release-api-doc b/scripts/gen-cpp-release-api-doc deleted file mode 100755 index 6726483..0000000 --- a/scripts/gen-cpp-release-api-doc +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/python -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -from generate import * - -def gen_messaging_api(release, source_dir, release_dir): - component_dir = join(release_dir, "messaging-api") - remove(component_dir) - - gen_cpp_messaging_api(release, source_dir, component_dir) - #gen_dotnet_messaging_api(release, source_dir, component_dir) - #gen_python_messaging_api(release, source_dir, component_dir) - #gen_ruby_messaging_api(release, source_dir, component_dir) - -def gen_cpp_messaging_api(release, source_dir, component_dir): - include_dir = join(source_dir, "include") - input_paths = ( - join(source_dir, "cpp", "docs", "api", "doxygen_mainpage.h"), - join(include_dir, "qpid", "messaging"), - join(include_dir, "qpid", "types"), - ) - output_dir = join(component_dir, "cpp", "api") - - gen_doxygen(release=release, - title="Qpid C++ Messaging API", - input_paths=input_paths, - strip_paths=(include_dir,), - output_dir=output_dir) - -def gen_dotnet_messaging_api(release, source_dir, component_dir): - include_dir = join(source_dir, "bindings", "qpid", "dotnet", "src") - input_paths = (include_dir,) - output_dir = join(component_dir, "dotnet", "api") - - gen_doxygen(release=release, - title="Qpid .NET Messaging API", - input_paths=input_paths, - strip_paths=(include_dir,), - output_dir=output_dir) - -def gen_python_messaging_api(release, source_dir, component_dir): - input_path = join(source_dir, "python") - input_namespace = "qpid.messaging" - output_dir = join(component_dir, "python", "api") - - gen_epydoc(release=release, - title="Qpid Python Messaging API", - input_paths=(input_path,), - input_namespaces=(input_namespace,), - output_dir=output_dir) - -def gen_ruby_messaging_api(release, source_dir, component_dir): - base_input_path = join(source_dir, "bindings") - input_path = join("qpid", "ruby", "lib") - output_dir = join(component_dir, "ruby", "api") - - gen_rdoc(release=release, - title="Qpid Ruby Messaging API", - base_input_path=base_input_path, - input_paths=(input_path,), - output_dir=output_dir) - - #name = "qpid-{}-ruby-messaging-api-apiref".format(release) - #make_archive(api_dir, output_dir, name) - -## Now do stuff ## - -release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() -source_dir = export_release_from_git("cpp", source_release) - -gen_messaging_api(release, source_dir, release_dir) - -notice("API documentation generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-cpp-release-books ---------------------------------------------------------------------- diff --git a/scripts/gen-cpp-release-books b/scripts/gen-cpp-release-books deleted file mode 100755 index 69ba41b..0000000 --- a/scripts/gen-cpp-release-books +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/python -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -from generate import * - -import uuid -from xml.etree import ElementTree - -def gen_books(release, source_dir, output_dir): - input_dir = join(source_dir, "docs", "book") - - stylesheet = """<?xml version='1.0'?> - <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> - <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/> - </xsl:stylesheet>""" - - write(join(input_dir, "xsl", "html-custom.xsl"), stylesheet) - - call("make -C {} clean all", input_dir) - - cpp_broker_input_dir = join(input_dir, "build", "AMQP-Messaging-Broker-CPP-Book") - cpp_broker_output_dir = join(output_dir, "cpp-broker") - - remove(cpp_broker_output_dir) - - copy(join(cpp_broker_input_dir, "html"), join(cpp_broker_output_dir, "book")) - - copy(join(cpp_broker_input_dir, "pdf", "AMQP-Messaging-Broker-CPP-Book.pdf"), - join(cpp_broker_output_dir, "cpp-broker-book.pdf")) - - output_dirs = [cpp_broker_output_dir] - - for dir in output_dirs: - for path in find(dir, "*.html"): - tree = ElementTree.parse(path) - elem = tree.find(".//{http://www.w3.org/1999/xhtml}body") - - elem.tag = "div" - elem.set("class", "docbook") - - remove_namespace(elem, "http://www.w3.org/1999/xhtml") - - # A hack to preserve docbook's empty anchors in an - # IE-compatible way - - target = str(uuid.uuid4()) - - for a in tree.iter("a"): - if a.text is None: - a.text = target - - content = ElementTree.tostring(elem) - - content = content.replace(target, "") - - write("{}.in".format(path), content) - remove(path) - -# From http://homework.nwsnet.de/releases/45be/ -def remove_namespace(doc, namespace): - """Remove namespace in the passed document in place.""" - ns = u'{%s}' % namespace - nsl = len(ns) - for elem in doc.getiterator(): - if elem.tag.startswith(ns): - elem.tag = elem.tag[nsl:] - -## Now do stuff ## - -release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() -source_dir = export_release_from_git("cpp", source_release) - -gen_books(release, source_dir, release_dir) - -notice("Books generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-cpp-release-docs ---------------------------------------------------------------------- diff --git a/scripts/gen-cpp-release-docs b/scripts/gen-cpp-release-docs new file mode 100755 index 0000000..f7999e3 --- /dev/null +++ b/scripts/gen-cpp-release-docs @@ -0,0 +1,140 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import uuid + +from generate import * +from xml.etree import ElementTree + +def gen_cpp_apis(release, source_dir, release_dir): + component_dir = join(release_dir, "messaging-api") + + remove(component_dir) + + gen_cpp_messaging_api(release, source_dir, component_dir) + +def gen_cpp_messaging_api(release, source_dir, component_dir): + include_dir = join(source_dir, "include") + input_paths = ( + join(source_dir, "cpp", "docs", "api", "doxygen_mainpage.h"), + join(include_dir, "qpid", "messaging"), + join(include_dir, "qpid", "types"), + ) + output_dir = join(component_dir, "cpp", "api") + + gen_doxygen(release=release, + title="Qpid C++ Messaging API", + input_paths=input_paths, + strip_paths=(include_dir,), + output_dir=output_dir) + +def gen_cpp_books(release, source_dir, output_dir): + input_dir = join(source_dir, "docs", "book") + + stylesheet = """<?xml version='1.0'?> + <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/> + </xsl:stylesheet>""" + + write(join(input_dir, "xsl", "html-custom.xsl"), stylesheet) + + call("make -C {} clean all", input_dir) + + cpp_broker_input_dir = join(input_dir, "build", "AMQP-Messaging-Broker-CPP-Book") + cpp_broker_output_dir = join(output_dir, "cpp-broker") + + remove(cpp_broker_output_dir) + + copy(join(cpp_broker_input_dir, "html"), join(cpp_broker_output_dir, "book")) + + copy(join(cpp_broker_input_dir, "pdf", "AMQP-Messaging-Broker-CPP-Book.pdf"), + join(cpp_broker_output_dir, "cpp-broker-book.pdf")) + + output_dirs = [cpp_broker_output_dir] + + for dir in output_dirs: + for path in find(dir, "*.html"): + tree = ElementTree.parse(path) + elem = tree.find(".//{http://www.w3.org/1999/xhtml}body") + + elem.tag = "div" + elem.set("class", "docbook") + + remove_namespace(elem, "http://www.w3.org/1999/xhtml") + + # A hack to preserve docbook's empty anchors in an + # IE-compatible way + + target = str(uuid.uuid4()) + + for a in tree.iter("a"): + if a.text is None: + a.text = target + + content = ElementTree.tostring(elem) + + content = content.replace(target, "") + + write("{}.in".format(path), content) + remove(path) + +# From http://homework.nwsnet.de/releases/45be/ +def remove_namespace(doc, namespace): + """Remove namespace in the passed document in place.""" + ns = u'{%s}' % namespace + nsl = len(ns) + for elem in doc.getiterator(): + if elem.tag.startswith(ns): + elem.tag = elem.tag[nsl:] + +def gen_cpp_examples(release, source_dir, release_dir): + component_dir = join(release_dir, "messaging-api") + + gen_cpp_messaging_examples(release, source_dir, component_dir) + +def gen_cpp_messaging_examples(release, source_dir, component_dir): + input_dir = join(source_dir, "examples", "messaging") + output_dir = join(component_dir, "cpp", "examples") + + release_url = get_git_release_branch_url("cpp", release) + readme_url = "https://git-wip-us.apache.org/repos/asf?p=qpid-cpp.git;a=blob_plain;f=examples/README.txt;hb=refs/heads/{}".format("master") + source_url = "https://git-wip-us.apache.org/repos/asf?p=qpid-cpp.git;a=tree;f=examples/messaging;hb=refs/heads/{}".format("master") + + input_names = list_dir(input_dir, "*.cpp", "*.h") + + gen_examples(release=release, + lang="cpp", + title="C++ Messaging API Examples", + input_dir=input_dir, + input_names=input_names, + output_dir=output_dir, + readme_url=readme_url, + source_url=source_url) + +## Now do stuff ## + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() +source_dir = checkout_dir or fetch_source("cpp", source_release) + +gen_cpp_apis(release, source_dir, release_dir) +gen_cpp_books(release, source_dir, release_dir) +gen_cpp_examples(release, source_dir, release_dir) + +notice("Docs generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-cpp-release-examples ---------------------------------------------------------------------- diff --git a/scripts/gen-cpp-release-examples b/scripts/gen-cpp-release-examples deleted file mode 100755 index 3bf29cf..0000000 --- a/scripts/gen-cpp-release-examples +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/python -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -from generate import * - -## Messaging API ## - -def gen_messaging_api(release, source_dir, release_dir): - component_dir = join(release_dir, "messaging-api") - - gen_cpp_messaging_api(release, source_dir, component_dir) - #gen_dotnet_messaging_api(release, source_dir, component_dir) - #gen_python_messaging_api(release, source_dir, component_dir) - #gen_ruby_messaging_api(release, source_dir, component_dir) - -def gen_cpp_messaging_api(release, source_dir, component_dir): - input_dir = join(source_dir, "examples", "messaging") - output_dir = join(component_dir, "cpp", "examples") - - release_url = get_git_release_branch_url("cpp", release) - readme_url = "https://git-wip-us.apache.org/repos/asf?p=qpid-cpp.git;a=blob_plain;f=examples/README.txt;hb=refs/heads/{}".format("master") - source_url = "https://git-wip-us.apache.org/repos/asf?p=qpid-cpp.git;a=tree;f=examples/messaging;hb=refs/heads/{}".format("master") - - input_names = list_dir(input_dir, "*.cpp", "*.h") - - gen_examples(release=release, - lang="cpp", - title="C++ Messaging API Examples", - input_dir=input_dir, - input_names=input_names, - output_dir=output_dir, - readme_url=readme_url, - source_url=source_url) - -def gen_dotnet_messaging_api(release, source_dir, component_dir): - input_dir = join(source_dir, "bindings", "qpid", "dotnet", "examples") - output_dir = join(component_dir, "dotnet", "examples") - - release_url = get_svn_release_url("main", release) - source_url = "{}/bindings/qpid/dotnet/examples".format(release_url) - - # The layout of dotnet examples is funky, so some schlepping to - # normalize it - - temp_dir = make_temp_dir() - input_names = set() - - for path in find(input_dir, "*.cs"): - name = split(path)[1] - - if name == "AssemblyInfo.cs": - continue - - copy(path, join(temp_dir, name)) - input_names.add(name) - - input_names = sorted(input_names) - - gen_examples(release=release, - title=".NET Messaging API Examples", - lang="csharp", - input_dir=temp_dir, - input_names=input_names, - output_dir=output_dir, - source_url=source_url) - -def gen_python_messaging_api(release, source_dir, component_dir): - input_dir = join(source_dir, "python", "examples", "api") - output_dir = join(component_dir, "python", "examples") - - release_url = get_svn_release_url("main", release) - readme_url = "{}/python/examples/README.txt".format(release_url) - source_url = "{}/python/examples".format(release_url) - - input_names = list_dir(input_dir) - - gen_examples(release=release, - title="Python Messaging API Examples", - lang="python", - input_dir=input_dir, - input_names=input_names, - output_dir=output_dir, - readme_url=readme_url, - source_url=source_url) - -def gen_ruby_messaging_api(release, source_dir, component_dir): - input_dir = join(source_dir, "bindings", "qpid", "ruby", "examples") - output_dir = join(component_dir, "ruby", "examples") - - release_url = get_svn_release_url("main", release) - source_url = "{}/bindings/qpid/ruby/examples".format(release_url) - - input_names = list_dir(input_dir, "*.rb") - - gen_examples(release=release, - title="Ruby Messaging API Examples", - lang="ruby", - input_dir=input_dir, - input_names=input_names, - output_dir=output_dir, - source_url=source_url) - -## Now do stuff ## - -release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() -source_dir = export_release_from_git("cpp", source_release) - -gen_messaging_api(release, source_dir, release_dir) - -notice("Examples generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-cpp-release-notes ---------------------------------------------------------------------- diff --git a/scripts/gen-cpp-release-notes b/scripts/gen-cpp-release-notes index 3fa4521..21f3ab0 100755 --- a/scripts/gen-cpp-release-notes +++ b/scripts/gen-cpp-release-notes @@ -65,8 +65,8 @@ def gen_release_notes(release, issues_release, release_dir): release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() -if release == "trunk": - notice("Skipping generation for trunk") +if release == "master": + notice("Skipping generation for master") exit() gen_release_notes(release, issues_release, release_dir) http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-cpp-release-page ---------------------------------------------------------------------- diff --git a/scripts/gen-cpp-release-page b/scripts/gen-cpp-release-page index 030b7e8..408cf98 100755 --- a/scripts/gen-cpp-release-page +++ b/scripts/gen-cpp-release-page @@ -96,7 +96,7 @@ files you download. ## More information - [Resolved issues in JIRA]({issues_url}) - - [Source repository tag](http://svn.apache.org/repos/asf/qpid/tags/qpid-cpp-{release}) + - [Source repository tag](https://git-wip-us.apache.org/repos/asf/qpid-cpp.git/tree/refs/tags/{release}) <script type="text/javascript"> _deferredFunctions.push(function() {{ http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-dispatch-release-books ---------------------------------------------------------------------- diff --git a/scripts/gen-dispatch-release-books b/scripts/gen-dispatch-release-books deleted file mode 100755 index cb9a9e7..0000000 --- a/scripts/gen-dispatch-release-books +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/python -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -import os -from generate import * - -def gen_books_and_man(release, source_dir, output_dir): - build_dir = join(source_dir, "build") - make_dir(build_dir) - with working_dir(build_dir): - call("cmake ..") - call("make") - call("make doc") - - book_build_dir = join(build_dir, "doc", "book") - - for f in list_dir(book_build_dir, "*.html.in"): - input_file = join(book_build_dir, f) - output_file = join(output_dir, "book", f) - - copy(input_file, output_file) - - for f in list_dir(book_build_dir, "*.png"): - input_file = join(book_build_dir, f) - output_file = join(output_dir, "book", f) - - copy(input_file, output_file) - - # book_image_dir = join(build_dir, "doc", "_images") - - # for f in list_dir(book_image_dir, "*"): - # input_file = join(book_image_dir, f) - # output_file = join(output_dir, "_images", f) - - # copy(input_file, output_file) - - man_build_dir = join(build_dir, "doc", "man") - - for f in list_dir(man_build_dir, "*.html.in"): - input_file = join(man_build_dir, f) - output_file = join(output_dir, "man", f) - - copy(input_file, output_file) - -## Now do stuff ## -release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() -source_dir = checkout_dir or export_release_from_git("dispatch", source_release) - -gen_books_and_man(release, source_dir, release_dir) - -notice("Books generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-dispatch-release-docs ---------------------------------------------------------------------- diff --git a/scripts/gen-dispatch-release-docs b/scripts/gen-dispatch-release-docs new file mode 100755 index 0000000..0f3ec34 --- /dev/null +++ b/scripts/gen-dispatch-release-docs @@ -0,0 +1,69 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import os +from generate import * + +def gen_dispatch_docs(release, source_dir, output_dir): + build_dir = make_temp_dir() + + with working_dir(build_dir): + call("cmake {}", source_dir) + call("make") + call("make doc") + + book_build_dir = join(build_dir, "doc", "book") + + for f in list_dir(book_build_dir, "*.html.in"): + input_file = join(book_build_dir, f) + output_file = join(output_dir, "book", f) + + copy(input_file, output_file) + + for f in list_dir(book_build_dir, "*.png"): + input_file = join(book_build_dir, f) + output_file = join(output_dir, "book", f) + + copy(input_file, output_file) + + # book_image_dir = join(build_dir, "doc", "_images") + + # for f in list_dir(book_image_dir, "*"): + # input_file = join(book_image_dir, f) + # output_file = join(output_dir, "_images", f) + + # copy(input_file, output_file) + + man_build_dir = join(build_dir, "doc", "man") + + for f in list_dir(man_build_dir, "*.html.in"): + input_file = join(man_build_dir, f) + output_file = join(output_dir, "man", f) + + copy(input_file, output_file) + +## Now do stuff ## + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() +source_dir = checkout_dir or fetch_source("dispatch", source_release) + +gen_dispatch_docs(release, source_dir, release_dir) + +notice("Docs generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-interop-test-release-docs ---------------------------------------------------------------------- diff --git a/scripts/gen-interop-test-release-docs b/scripts/gen-interop-test-release-docs new file mode 100755 index 0000000..a7c7c39 --- /dev/null +++ b/scripts/gen-interop-test-release-docs @@ -0,0 +1,35 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +import os + +from generate import * + +def gen_interop_test_docs(release, source_dir, output_dir): + pass + +## Now do stuff ## + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() +source_dir = checkout_dir or fetch_source("interop-test", source_release) + +gen_interop_test_docs(release, source_dir, release_dir) + +notice("Docs generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-java-release-books ---------------------------------------------------------------------- diff --git a/scripts/gen-java-release-books b/scripts/gen-java-release-books deleted file mode 100755 index 4e29862..0000000 --- a/scripts/gen-java-release-books +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/python -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -from generate import * - -import uuid -from xml.etree import ElementTree - -def gen_books(release, source_dir, output_dir): - toplevel_pom = join(source_dir, "pom.xml") - input_dir = join(source_dir, "doc") - - cpp_broker_book_url = "/releases/qpid-cpp-{{current_cpp_release}}/cpp-broker/book/" - jms_client010_book_url = "/releases/qpid-java-{}/jms-client-0-10/book/".format(release) - - call("mvn -f {} -pl doc -amd -Ddoc=true package -DqpidCppBook={} -DqpidJmsClient010Book={}", - toplevel_pom, - cpp_broker_book_url, - jms_client010_book_url) - - java_broker_input_dir = join(input_dir, "java-broker", "target", "docbkx") - jms_client08_input_dir = join(input_dir, "jms-client-0-8", "target", "docbkx") - jms_client010_input_dir = join(input_dir, "jms-client-0-10", "target", "docbkx") - - - java_broker_output_dir = join(output_dir, "java-broker") - jms_client08_output_dir = join(output_dir, "jms-client-0-8") - jms_client010_output_dir = join(output_dir, "jms-client-0-10") - - remove(java_broker_output_dir) - remove(jms_client08_output_dir) - remove(jms_client010_output_dir) - - copy(java_broker_input_dir, join(java_broker_output_dir, "book")) - copy(jms_client08_input_dir, join(jms_client08_output_dir, "book")) - copy(jms_client010_input_dir, join(jms_client010_output_dir, "book")) - - output_dirs = [java_broker_output_dir, jms_client08_output_dir, jms_client010_output_dir] - - for dir in output_dirs: - for path in find(dir, "*.html"): - print path - - tree = ElementTree.parse(path) - elem = tree.find(".//{http://www.w3.org/1999/xhtml}body") - - elem.tag = "div" - elem.set("class", "docbook") - - remove_namespace(elem, "http://www.w3.org/1999/xhtml") - - # A hack to preserve docbook's empty anchors in an - # IE-compatible way - - target = str(uuid.uuid4()) - - for a in tree.iter("a"): - if a.text is None: - a.text = target - - content = ElementTree.tostring(elem) - content = content.replace(target, "") - - write("{}.in".format(path), content) - remove(path) - -def infile_replace(filename, old_string, new_string): - fileContent = "" - with open(filename,'r') as f: - fileContent=f.read() - if old_string in fileContent: - newContent=fileContent.replace(old_string, new_string) - with open(filename,'w') as f: - f.write(newContent) - f.flush() - -# From http://homework.nwsnet.de/releases/45be/ -def remove_namespace(doc, namespace): - """Remove namespace in the passed document in place.""" - ns = u'{%s}' % namespace - nsl = len(ns) - for elem in doc.getiterator(): - if elem.tag.startswith(ns): - elem.tag = elem.tag[nsl:] - -## Now do stuff ## - -release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() -source_dir = export_release("java", source_release, checkout_dir) - -gen_books(release, source_dir, release_dir) - -notice("Books generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-java-release-docs ---------------------------------------------------------------------- diff --git a/scripts/gen-java-release-docs b/scripts/gen-java-release-docs new file mode 100755 index 0000000..b1d70ee --- /dev/null +++ b/scripts/gen-java-release-docs @@ -0,0 +1,141 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from generate import * + +import uuid +from xml.etree import ElementTree + +def gen_java_books(release, source_dir, output_dir): + toplevel_pom = join(source_dir, "pom.xml") + input_dir = join(source_dir, "doc") + + cpp_broker_book_url = "/releases/qpid-cpp-{{current_cpp_release}}/cpp-broker/book/" + jms_client010_book_url = "/releases/qpid-java-{}/jms-client-0-10/book/".format(release) + + call("mvn -f {} -pl doc -amd -Ddoc=true package -DqpidCppBook={} -DqpidJmsClient010Book={}", + toplevel_pom, + cpp_broker_book_url, + jms_client010_book_url) + + java_broker_input_dir = join(input_dir, "java-broker", "target", "docbkx") + jms_client08_input_dir = join(input_dir, "jms-client-0-8", "target", "docbkx") + jms_client010_input_dir = join(input_dir, "jms-client-0-10", "target", "docbkx") + + java_broker_output_dir = join(output_dir, "java-broker") + jms_client08_output_dir = join(output_dir, "jms-client-0-8") + jms_client010_output_dir = join(output_dir, "jms-client-0-10") + + remove(java_broker_output_dir) + remove(jms_client08_output_dir) + remove(jms_client010_output_dir) + + copy(java_broker_input_dir, join(java_broker_output_dir, "book")) + copy(jms_client08_input_dir, join(jms_client08_output_dir, "book")) + copy(jms_client010_input_dir, join(jms_client010_output_dir, "book")) + + output_dirs = [java_broker_output_dir, jms_client08_output_dir, jms_client010_output_dir] + + for dir in output_dirs: + for path in find(dir, "*.html"): + print path + + tree = ElementTree.parse(path) + elem = tree.find(".//{http://www.w3.org/1999/xhtml}body") + + elem.tag = "div" + elem.set("class", "docbook") + + remove_namespace(elem, "http://www.w3.org/1999/xhtml") + + # A hack to preserve docbook's empty anchors in an + # IE-compatible way + + target = str(uuid.uuid4()) + + for a in tree.iter("a"): + if a.text is None: + a.text = target + + content = ElementTree.tostring(elem) + content = content.replace(target, "") + + write("{}.in".format(path), content) + remove(path) + +def infile_replace(filename, old_string, new_string): + fileContent = "" + with open(filename,'r') as f: + fileContent=f.read() + if old_string in fileContent: + newContent=fileContent.replace(old_string, new_string) + with open(filename,'w') as f: + f.write(newContent) + f.flush() + +# From http://homework.nwsnet.de/releases/45be/ +def remove_namespace(doc, namespace): + """Remove namespace in the passed document in place.""" + ns = u'{%s}' % namespace + nsl = len(ns) + for elem in doc.getiterator(): + if elem.tag.startswith(ns): + elem.tag = elem.tag[nsl:] + +def gen_java_examples(release, source_dir, release_dir): + component_dir = join(release_dir, "qpid-jms") + input_dir = join(source_dir, "client", "example", "src", "main", + "java", "org", "apache", "qpid", "example") + output_dir = join(component_dir, "examples") + + release_url = "http://svn.apache.org/repos/asf/qpid/java/tags/{}".format(release) + readme_url = "{}/client/README.txt".format(release_url) + source_url = "{}/client/example/src/main/java/org/apache/qpid/example".format(release_url) + + input_names = list_dir(input_dir, "*.java", "*.properties") + + for name in input_names: + lang = "java" + + if name.endswith(".properties"): + lang = "ini" + + gen_example_page(release=release, + input_dir=input_dir, + input_name=name, + output_dir=output_dir, + lang=lang) + + gen_examples_index(release=release, + input_names=input_names, + output_dir=output_dir, + title="Qpid JMS Examples (AMQP 0-10)", + readme_url=readme_url, + source_url=source_url) + +## Now do stuff ## + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() +source_dir = export_release("java", source_release, checkout_dir) + +gen_java_books(release, source_dir, release_dir) +gen_java_examples(release, source_dir, release_dir) + +notice("Docs generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-java-release-examples ---------------------------------------------------------------------- diff --git a/scripts/gen-java-release-examples b/scripts/gen-java-release-examples deleted file mode 100755 index 32411fc..0000000 --- a/scripts/gen-java-release-examples +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/python -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -from generate import * - -## JMS ## - -def gen_jms(release, source_dir, release_dir): - component_dir = join(release_dir, "qpid-jms") - input_dir = join(source_dir, "client", "example", "src", "main", - "java", "org", "apache", "qpid", "example") - output_dir = join(component_dir, "examples") - - release_url = "http://svn.apache.org/repos/asf/qpid/java/tags/{}".format(release) - readme_url = "{}/client/README.txt".format(release_url) - source_url = "{}/client/example/src/main/java/org/apache/qpid/example".format(release_url) - - input_names = list_dir(input_dir, "*.java", "*.properties") - - for name in input_names: - lang = "java" - - if name.endswith(".properties"): - lang = "ini" - - gen_example_page(release=release, - input_dir=input_dir, - input_name=name, - output_dir=output_dir, - lang=lang) - - gen_examples_index(release=release, - input_names=input_names, - output_dir=output_dir, - title="Qpid JMS Examples (AMQP 0-10)", - readme_url=readme_url, - source_url=source_url) - -## Now do stuff ## - -release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() -source_dir = export_release("java", source_release, checkout_dir) - -gen_jms(release, source_dir, release_dir) - -notice("Examples generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-jms-amqp-0-x-release-docs ---------------------------------------------------------------------- diff --git a/scripts/gen-jms-amqp-0-x-release-docs b/scripts/gen-jms-amqp-0-x-release-docs new file mode 100755 index 0000000..58125f4 --- /dev/null +++ b/scripts/gen-jms-amqp-0-x-release-docs @@ -0,0 +1,33 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from generate import * + +def gen_jms_docs(release, source_dir, output_dir): + pass + +## Now do stuff ## + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() +source_dir = checkout_dir or fetch_source("jms-amqp-0-x", source_release) + +gen_jms_docs(release, source_dir, release_dir) + +notice("Docs generated") http://git-wip-us.apache.org/repos/asf/qpid-site/blob/32dce6b5/scripts/gen-jms-amqp-0-x-release-notes ---------------------------------------------------------------------- diff --git a/scripts/gen-jms-amqp-0-x-release-notes b/scripts/gen-jms-amqp-0-x-release-notes new file mode 100755 index 0000000..dac4f82 --- /dev/null +++ b/scripts/gen-jms-amqp-0-x-release-notes @@ -0,0 +1,74 @@ +#!/usr/bin/python +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +from generate import * + +template = \ +""" +;; +;; Licensed to the Apache Software Foundation (ASF) under one +;; or more contributor license agreements. See the NOTICE file +;; distributed with this work for additional information +;; regarding copyright ownership. The ASF licenses this file +;; to you under the Apache License, Version 2.0 (the +;; "License"); you may not use this file except in compliance +;; with the License. You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, +;; software distributed under the License is distributed on an +;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +;; KIND, either express or implied. See the License for the +;; specific language governing permissions and limitations +;; under the License. +;; + +# Qpid JMS for AMQP 0-x {release} Release Notes + +Qpid JMS for AMQP 0-x is XXX. + +For more information about this release, including download links and +documentation, see the [release overview](index.html). + +[jms]: http://en.wikipedia.org/wiki/Java_Message_Service + +{release_notes} +""" + +def gen_release_notes(release, issues_release, release_dir): + output_path = join(release_dir, "release-notes.md") + + release_notes = render_release_notes("qpid", issues_release) + + output = template.format(**locals()) + output = output.strip() + + write(output_path, output) + +release, issues_release, source_release, release_dir, checkout_dir = setup_release_script() + +if release == "master": + notice("Skipping generation for master") + exit() + +gen_release_notes(release, issues_release, release_dir) + +notice("Release notes generated") --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org