gecko-dev/testing/mozbase/versioninfo.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

155 строки
4.6 KiB
Python
Исходник Обычный вид История

#!/usr/bin/env python
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http://mozilla.org/MPL/2.0/.
"""
List mozbase package dependencies or generate changelogs
from commit messages.
"""
from __future__ import absolute_import, print_function
from collections import Iterable
from distutils.version import StrictVersion
import argparse
import os
import subprocess
import sys
here = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, here)
import setup_development
Bug 1280573 - Add testing/mozbase to flake8 linter: r=ahal added testing/mozbase to tools/lint/flake8.lint fixed a first batch of PEP8 errors/warnings at first the commad autopep8 -i --max-line-length 99 -r -j 8 . has been used to fix simpler problems, run from testing/mozbase some of the issues can not easily fixed : - undefined 'names' in code for example isLinux - isLinux and isBsd "fixed" with # noqa - undefined 'message' resolved with return fmt.format(... - undefined 'structured' resolved replacing those with mozlog - long comments - some remaining - addressed with # noqa - package level import everything - addressed with # flake8: noqa restored testing/mozbase/mozdevice/mozdevice/Zeroconf.py fixed issues reported on mozreview fixed ')' in testing/mozbase/mozprocess/mozprocess/qijo.py imports finally fixed multiline string at testing/mozbase/manifestparser/tests/test_manifestparser.py:114 ^^^ and again, but now with ./mach python-test --path-only testing/mozbase/manifestparser/tests/test_manifestparser.py passing fixed testing/mozbase/manifestparser/tests/test_convert_directory.py assert fixed this error: 10:15:21 INFO - return lambda line: stack_fixer_module.fixSymbols(line) 10:15:21 INFO - TypeError: fixSymbols() takes exactly 2 arguments (1 given) fixed two spaces lint error even of # noqa comments restored assignement to lambda with # noqa to silence the lint error global noqa for testing/mozbase/manifestparser/tests/test_filters.py stupid is/is not error... MozReview-Commit-ID: 1FpJF54GqIi --HG-- extra : rebase_source : 3cf0277fb36a296e3506aeacc2ff05e1b03f9eac
2016-09-30 17:08:37 +03:00
def run_hg(command):
command = command[:]
if not isinstance(command, Iterable):
command = command.split()
command.insert(0, "hg")
try:
output = subprocess.check_output(command, cwd=here, universal_newlines=True)
except subprocess.CalledProcessError:
sys.exit(1)
return output
def changelog(args):
setup = os.path.join(args.module, "setup.py")
def get_version_rev(v=None):
revisions = run_hg(["log", setup, "--template={rev},"]).split(",")[:-1]
for rev in revisions:
diff = run_hg(["diff", "-c", rev, setup, "-U0"])
minus_version = None
plus_version = None
for line in diff.splitlines():
if line.startswith("-PACKAGE_VERSION"):
try:
minus_version = StrictVersion(line.split()[-1].strip("\"'"))
except ValueError:
pass
elif line.startswith("+PACKAGE_VERSION"):
try:
plus_version = StrictVersion(line.split()[-1].strip("\"'"))
except ValueError:
break
# make sure the change isn't a backout
if not minus_version or plus_version > minus_version:
if not v:
return rev
if StrictVersion(v) == plus_version:
return rev
print(
"Could not find %s revision for version %s." % (args.module, v or "latest")
)
sys.exit(1)
from_ref = args.from_ref or get_version_rev()
to_ref = args.to_ref or "tip"
if "." in from_ref:
from_ref = get_version_rev(from_ref)
if "." in to_ref:
to_ref = get_version_rev(to_ref)
delim = "\x12\x59\x52\x99\x05"
Bug 1280573 - Add testing/mozbase to flake8 linter: r=ahal added testing/mozbase to tools/lint/flake8.lint fixed a first batch of PEP8 errors/warnings at first the commad autopep8 -i --max-line-length 99 -r -j 8 . has been used to fix simpler problems, run from testing/mozbase some of the issues can not easily fixed : - undefined 'names' in code for example isLinux - isLinux and isBsd "fixed" with # noqa - undefined 'message' resolved with return fmt.format(... - undefined 'structured' resolved replacing those with mozlog - long comments - some remaining - addressed with # noqa - package level import everything - addressed with # flake8: noqa restored testing/mozbase/mozdevice/mozdevice/Zeroconf.py fixed issues reported on mozreview fixed ')' in testing/mozbase/mozprocess/mozprocess/qijo.py imports finally fixed multiline string at testing/mozbase/manifestparser/tests/test_manifestparser.py:114 ^^^ and again, but now with ./mach python-test --path-only testing/mozbase/manifestparser/tests/test_manifestparser.py passing fixed testing/mozbase/manifestparser/tests/test_convert_directory.py assert fixed this error: 10:15:21 INFO - return lambda line: stack_fixer_module.fixSymbols(line) 10:15:21 INFO - TypeError: fixSymbols() takes exactly 2 arguments (1 given) fixed two spaces lint error even of # noqa comments restored assignement to lambda with # noqa to silence the lint error global noqa for testing/mozbase/manifestparser/tests/test_filters.py stupid is/is not error... MozReview-Commit-ID: 1FpJF54GqIi --HG-- extra : rebase_source : 3cf0277fb36a296e3506aeacc2ff05e1b03f9eac
2016-09-30 17:08:37 +03:00
changelog = run_hg(
[
Bug 1280573 - Add testing/mozbase to flake8 linter: r=ahal added testing/mozbase to tools/lint/flake8.lint fixed a first batch of PEP8 errors/warnings at first the commad autopep8 -i --max-line-length 99 -r -j 8 . has been used to fix simpler problems, run from testing/mozbase some of the issues can not easily fixed : - undefined 'names' in code for example isLinux - isLinux and isBsd "fixed" with # noqa - undefined 'message' resolved with return fmt.format(... - undefined 'structured' resolved replacing those with mozlog - long comments - some remaining - addressed with # noqa - package level import everything - addressed with # flake8: noqa restored testing/mozbase/mozdevice/mozdevice/Zeroconf.py fixed issues reported on mozreview fixed ')' in testing/mozbase/mozprocess/mozprocess/qijo.py imports finally fixed multiline string at testing/mozbase/manifestparser/tests/test_manifestparser.py:114 ^^^ and again, but now with ./mach python-test --path-only testing/mozbase/manifestparser/tests/test_manifestparser.py passing fixed testing/mozbase/manifestparser/tests/test_convert_directory.py assert fixed this error: 10:15:21 INFO - return lambda line: stack_fixer_module.fixSymbols(line) 10:15:21 INFO - TypeError: fixSymbols() takes exactly 2 arguments (1 given) fixed two spaces lint error even of # noqa comments restored assignement to lambda with # noqa to silence the lint error global noqa for testing/mozbase/manifestparser/tests/test_filters.py stupid is/is not error... MozReview-Commit-ID: 1FpJF54GqIi --HG-- extra : rebase_source : 3cf0277fb36a296e3506aeacc2ff05e1b03f9eac
2016-09-30 17:08:37 +03:00
"log",
"-r",
"%s:children(%s)" % (to_ref, from_ref),
"--template={desc}%s" % delim,
"-M",
args.module,
]
Bug 1280573 - Add testing/mozbase to flake8 linter: r=ahal added testing/mozbase to tools/lint/flake8.lint fixed a first batch of PEP8 errors/warnings at first the commad autopep8 -i --max-line-length 99 -r -j 8 . has been used to fix simpler problems, run from testing/mozbase some of the issues can not easily fixed : - undefined 'names' in code for example isLinux - isLinux and isBsd "fixed" with # noqa - undefined 'message' resolved with return fmt.format(... - undefined 'structured' resolved replacing those with mozlog - long comments - some remaining - addressed with # noqa - package level import everything - addressed with # flake8: noqa restored testing/mozbase/mozdevice/mozdevice/Zeroconf.py fixed issues reported on mozreview fixed ')' in testing/mozbase/mozprocess/mozprocess/qijo.py imports finally fixed multiline string at testing/mozbase/manifestparser/tests/test_manifestparser.py:114 ^^^ and again, but now with ./mach python-test --path-only testing/mozbase/manifestparser/tests/test_manifestparser.py passing fixed testing/mozbase/manifestparser/tests/test_convert_directory.py assert fixed this error: 10:15:21 INFO - return lambda line: stack_fixer_module.fixSymbols(line) 10:15:21 INFO - TypeError: fixSymbols() takes exactly 2 arguments (1 given) fixed two spaces lint error even of # noqa comments restored assignement to lambda with # noqa to silence the lint error global noqa for testing/mozbase/manifestparser/tests/test_filters.py stupid is/is not error... MozReview-Commit-ID: 1FpJF54GqIi --HG-- extra : rebase_source : 3cf0277fb36a296e3506aeacc2ff05e1b03f9eac
2016-09-30 17:08:37 +03:00
).split(delim)[:-1]
def prettify(desc):
lines = desc.splitlines()
lines = [("* %s" if i == 0 else " %s") % l for i, l in enumerate(lines)]
return "\n".join(lines)
# pylint --py3k: W1636
changelog = list(map(prettify, changelog))
print("\n".join(changelog))
def dependencies(args):
# get package information
info = {}
dependencies = {}
for package in setup_development.mozbase_packages:
directory = os.path.join(setup_development.here, package)
info[directory] = setup_development.info(directory)
name, _dependencies = setup_development.get_dependencies(directory)
assert name == info[directory]["Name"]
dependencies[name] = _dependencies
# print package version information
for value in info.values():
print(
"%s %s : %s"
% (value["Name"], value["Version"], ", ".join(dependencies[value["Name"]]))
)
def main(args=sys.argv[1:]):
parser = argparse.ArgumentParser()
subcommands = parser.add_subparsers(help="Sub-commands")
p_deps = subcommands.add_parser("dependencies", help="Print dependencies.")
p_deps.set_defaults(func=dependencies)
p_changelog = subcommands.add_parser("changelog", help="Print a changelog.")
p_changelog.add_argument("module", help="Module to get changelog from.")
p_changelog.add_argument(
"--from",
dest="from_ref",
default=None,
Bug 1280573 - Add testing/mozbase to flake8 linter: r=ahal added testing/mozbase to tools/lint/flake8.lint fixed a first batch of PEP8 errors/warnings at first the commad autopep8 -i --max-line-length 99 -r -j 8 . has been used to fix simpler problems, run from testing/mozbase some of the issues can not easily fixed : - undefined 'names' in code for example isLinux - isLinux and isBsd "fixed" with # noqa - undefined 'message' resolved with return fmt.format(... - undefined 'structured' resolved replacing those with mozlog - long comments - some remaining - addressed with # noqa - package level import everything - addressed with # flake8: noqa restored testing/mozbase/mozdevice/mozdevice/Zeroconf.py fixed issues reported on mozreview fixed ')' in testing/mozbase/mozprocess/mozprocess/qijo.py imports finally fixed multiline string at testing/mozbase/manifestparser/tests/test_manifestparser.py:114 ^^^ and again, but now with ./mach python-test --path-only testing/mozbase/manifestparser/tests/test_manifestparser.py passing fixed testing/mozbase/manifestparser/tests/test_convert_directory.py assert fixed this error: 10:15:21 INFO - return lambda line: stack_fixer_module.fixSymbols(line) 10:15:21 INFO - TypeError: fixSymbols() takes exactly 2 arguments (1 given) fixed two spaces lint error even of # noqa comments restored assignement to lambda with # noqa to silence the lint error global noqa for testing/mozbase/manifestparser/tests/test_filters.py stupid is/is not error... MozReview-Commit-ID: 1FpJF54GqIi --HG-- extra : rebase_source : 3cf0277fb36a296e3506aeacc2ff05e1b03f9eac
2016-09-30 17:08:37 +03:00
help="Starting version or revision to list "
"changes from. [defaults to latest version]",
)
p_changelog.add_argument(
"--to",
dest="to_ref",
default=None,
Bug 1280573 - Add testing/mozbase to flake8 linter: r=ahal added testing/mozbase to tools/lint/flake8.lint fixed a first batch of PEP8 errors/warnings at first the commad autopep8 -i --max-line-length 99 -r -j 8 . has been used to fix simpler problems, run from testing/mozbase some of the issues can not easily fixed : - undefined 'names' in code for example isLinux - isLinux and isBsd "fixed" with # noqa - undefined 'message' resolved with return fmt.format(... - undefined 'structured' resolved replacing those with mozlog - long comments - some remaining - addressed with # noqa - package level import everything - addressed with # flake8: noqa restored testing/mozbase/mozdevice/mozdevice/Zeroconf.py fixed issues reported on mozreview fixed ')' in testing/mozbase/mozprocess/mozprocess/qijo.py imports finally fixed multiline string at testing/mozbase/manifestparser/tests/test_manifestparser.py:114 ^^^ and again, but now with ./mach python-test --path-only testing/mozbase/manifestparser/tests/test_manifestparser.py passing fixed testing/mozbase/manifestparser/tests/test_convert_directory.py assert fixed this error: 10:15:21 INFO - return lambda line: stack_fixer_module.fixSymbols(line) 10:15:21 INFO - TypeError: fixSymbols() takes exactly 2 arguments (1 given) fixed two spaces lint error even of # noqa comments restored assignement to lambda with # noqa to silence the lint error global noqa for testing/mozbase/manifestparser/tests/test_filters.py stupid is/is not error... MozReview-Commit-ID: 1FpJF54GqIi --HG-- extra : rebase_source : 3cf0277fb36a296e3506aeacc2ff05e1b03f9eac
2016-09-30 17:08:37 +03:00
help="Ending version or revision to list " "changes to. [defaults to tip]",
)
p_changelog.set_defaults(func=changelog)
# default to showing dependencies
if args == []:
args.append("dependencies")
args = parser.parse_args(args)
args.func(args)
if __name__ == "__main__":
main()