aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pym/gentoolkit/equery/__init__.py1
-rw-r--r--pym/gentoolkit/equery/changes.py184
-rw-r--r--pym/gentoolkit/helpers.py173
-rw-r--r--pym/gentoolkit/test/equery/test_init.py1
-rw-r--r--pym/gentoolkit/test/test_helpers.py47
5 files changed, 0 insertions, 406 deletions
diff --git a/pym/gentoolkit/equery/__init__.py b/pym/gentoolkit/equery/__init__.py
index 4640086..677f534 100644
--- a/pym/gentoolkit/equery/__init__.py
+++ b/pym/gentoolkit/equery/__init__.py
@@ -42,7 +42,6 @@ __authors__ = (
NAME_MAP = {
'b': 'belongs',
- 'c': 'changes',
'k': 'check',
'd': 'depends',
'g': 'depgraph',
diff --git a/pym/gentoolkit/equery/changes.py b/pym/gentoolkit/equery/changes.py
deleted file mode 100644
index f234ecb..0000000
--- a/pym/gentoolkit/equery/changes.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# Copyright(c) 2009, Gentoo Foundation
-#
-# Licensed under the GNU General Public License, v2 or higher
-
-"""Displays the ChangeLog entry for the latest installable version of an atom"""
-
-__docformat__ = 'epytext'
-
-# =======
-# Imports
-# =======
-
-import sys
-import os
-from getopt import gnu_getopt, GetoptError
-
-import gentoolkit.pprinter as pp
-from gentoolkit.atom import Atom
-from gentoolkit.equery import format_options, mod_usage
-from gentoolkit.helpers import ChangeLog
-from gentoolkit.query import Query
-
-# =======
-# Globals
-# =======
-
-QUERY_OPTS = {
- 'only_latest': False,
- 'show_full_log': False,
- 'limit': None,
- 'from': None,
- 'to': None
-}
-
-# =========
-# Functions
-# =========
-
-def print_help(with_description=True):
- """Print description, usage and a detailed help message.
-
- @type with_description: bool
- @param with_description: if true, print module's __doc__ string
- """
-
- if with_description:
- print(__doc__.strip())
- print()
- print(mod_usage(mod_name="changes"))
- print()
- print(pp.emph("examples"))
- print (" c portage # show latest visible "
- "version's entry")
- print(" c portage --full --limit=3 # show 3 latest entries")
- print(" c '=sys-apps/portage-2.1.6*' # use atom syntax")
- print(" c portage --from=2.2_rc60 --to=2.2_rc70 # use version ranges")
- print()
- print(pp.command("options"))
- print(format_options((
- (" -h, --help", "display this help message"),
- (" -l, --latest", "display only the latest ChangeLog entry"),
- (" -f, --full", "display the full ChangeLog"),
- (" --limit=NUM",
- "limit the number of entries displayed (with --full)"),
- (" --from=VER", "set which version to display from"),
- (" --to=VER", "set which version to display to"),
- )))
-
-
-def parse_module_options(module_opts):
- """Parse module options and update QUERY_OPTS"""
-
- opts = (x[0] for x in module_opts)
- posargs = (x[1] for x in module_opts)
- for opt, posarg in zip(opts, posargs):
- if opt in ('-h', '--help'):
- print_help()
- sys.exit(0)
- elif opt in ('-f', '--full'):
- QUERY_OPTS['show_full_log'] = True
- elif opt in ('-l', '--latest'):
- QUERY_OPTS['only_latest'] = True
- elif opt in ('--limit',):
- set_limit(posarg)
- elif opt in ('--from',):
- QUERY_OPTS['from'] = posarg
- elif opt in ('--to',):
- QUERY_OPTS['to'] = posarg
-
-
-def print_entries(entries):
- """Print entries and strip trailing whitespace from the last entry."""
-
- len_entries = len(entries)
- for i, entry in enumerate(entries, start=1):
- if i < len_entries:
- pp.uprint(entry)
- else:
- pp.uprint(entry.strip())
-
-
-def set_limit(posarg):
- """Set a limit in QUERY_OPTS on how many ChangeLog entries to display.
-
- Die if posarg is not an integer.
- """
-
- if posarg.isdigit():
- QUERY_OPTS['limit'] = int(posarg)
- else:
- err = "Module option --limit requires integer (got '%s')"
- sys.stderr.write(pp.error(err % posarg))
- print()
- print_help(with_description=False)
- sys.exit(2)
-
-
-def main(input_args):
- """Parse input and run the program"""
-
- short_opts = "hlf"
- long_opts = ('help', 'full', 'from=', 'latest', 'limit=', 'to=')
-
- try:
- module_opts, queries = gnu_getopt(input_args, short_opts, long_opts)
- except GetoptError as err:
- sys.stderr.write(pp.error("Module %s" % err))
- print()
- print_help(with_description=False)
- sys.exit(2)
-
- parse_module_options(module_opts)
-
- if not queries:
- print_help()
- sys.exit(2)
-
- first_run = True
- got_match = False
- for query in (Query(x) for x in queries):
- if not first_run:
- print()
-
- match = query.find_best()
- if match is None:
- continue
-
- got_match = True
- changelog_path = os.path.join(match.package_path(), 'ChangeLog')
- changelog = ChangeLog(changelog_path)
-
- #
- # Output
- #
-
- if (QUERY_OPTS['only_latest'] or (
- changelog.entries and not changelog.indexed_entries
- )):
- pp.uprint(changelog.latest.strip())
- else:
- end = QUERY_OPTS['limit'] or len(changelog.indexed_entries)
- if QUERY_OPTS['to'] or QUERY_OPTS['from']:
- print_entries(
- changelog.entries_matching_range(
- from_ver=QUERY_OPTS['from'],
- to_ver=QUERY_OPTS['to']
- )[:end]
- )
- elif QUERY_OPTS['show_full_log']:
- print_entries(changelog.full[:end])
- else:
- # Raises GentoolkitInvalidAtom here if invalid
- if query.is_ranged():
- atom = Atom(str(query))
- else:
- atom = '=' + str(match.cpv)
- print_entries(changelog.entries_matching_atom(atom)[:end])
-
- first_run = False
-
- if not got_match:
- sys.exit(1)
-
-# vim: set ts=4 sw=4 tw=79:
diff --git a/pym/gentoolkit/helpers.py b/pym/gentoolkit/helpers.py
index e7185c3..236a379 100644
--- a/pym/gentoolkit/helpers.py
+++ b/pym/gentoolkit/helpers.py
@@ -9,7 +9,6 @@
"""
__all__ = (
- 'ChangeLog',
'FileOwner',
'get_cpvs',
'get_installed_cpvs',
@@ -43,178 +42,6 @@ from gentoolkit.versionmatch import VersionMatch
# Classes
# =======
-class ChangeLog:
- """Provides methods for working with a Gentoo ChangeLog file.
-
- Example usage:
- >>> from gentoolkit.helpers import ChangeLog
- >>> portage = ChangeLog('/usr/portage/sys-apps/portage/ChangeLog')
- >>> print(portage.latest.strip())
- *portage-2.2.0_alpha142 (26 Oct 2012)
- <BLANKLINE>
- 26 Oct 2012; Zac Medico <zmedico@gentoo.org> +portage-2.2.0_alpha142.ebuild:
- 2.2.0_alpha142 version bump. This includes all of the fixes in 2.1.11.31. Bug
- #210077 tracks all bugs fixed since portage-2.1.x.
- >>> len(portage.full)
- 270
- >>> len(portage.entries_matching_range(
- ... from_ver='2.1.11.31',
- ... to_ver='9999'))
- 140
- """
- def __init__(self, changelog_path, invalid_entry_is_fatal=False):
- if not (os.path.isfile(changelog_path) and
- os.access(changelog_path, os.R_OK)):
- raise errors.GentoolkitFatalError(
- "%s does not exist or is unreadable" % pp.path(changelog_path)
- )
- self.changelog_path = changelog_path
- self.invalid_entry_is_fatal = invalid_entry_is_fatal
-
- # Process the ChangeLog:
- self.entries = self._split_changelog()
- self.indexed_entries = self._index_changelog()
- self.full = self.entries
- self.latest = self.entries[0]
-
- def __repr__(self):
- return "<%s %r>" % (self.__class__.__name__, self.changelog_path)
-
- def entries_matching_atom(self, atom):
- """Return entries whose header versions match atom's version.
-
- @type atom: L{gentoolkit.atom.Atom} or str
- @param atom: a atom to find matching entries against
- @rtype: list
- @return: entries matching atom
- @raise errors.GentoolkitInvalidAtom: if atom is a string and malformed
- """
- result = []
-
- if not isinstance(atom, Atom):
- atom = Atom(atom)
-
- for entry_set in self.indexed_entries:
- i, entry = entry_set
- # VersionMatch doesn't store .cp, so we'll force it to match here:
- i.cp = atom.cp
- if atom.intersects(i):
- result.append(entry)
-
- return result
-
- def entries_matching_range(self, from_ver=None, to_ver=None):
- """Return entries whose header versions are within a range of versions.
-
- @type from_ver: str
- @param from_ver: valid Gentoo version
- @type to_ver: str
- @param to_ver: valid Gentoo version
- @rtype: list
- @return: entries between from_ver and to_ver
- @raise errors.GentoolkitFatalError: if neither vers are set
- @raise errors.GentoolkitInvalidVersion: if either ver is invalid
- """
- result = []
-
- # Make sure we have at least one version set
- if not (from_ver or to_ver):
- raise errors.GentoolkitFatalError(
- "Need to specifiy 'from_ver' or 'to_ver'"
- )
-
- # Create a VersionMatch instance out of from_ver
- from_restriction = None
- if from_ver:
- try:
- from_ver_rev = CPV("null-%s" % from_ver)
- except errors.GentoolkitInvalidCPV:
- raise errors.GentoolkitInvalidVersion(from_ver)
- from_restriction = VersionMatch(from_ver_rev, op='>=')
-
- # Create a VersionMatch instance out of to_ver
- to_restriction = None
- if to_ver:
- try:
- to_ver_rev = CPV("null-%s" % to_ver)
- except errors.GentoolkitInvalidCPV:
- raise errors.GentoolkitInvalidVersion(to_ver)
- to_restriction = VersionMatch(to_ver_rev, op='<=')
-
- # Add entry to result if version ranges intersect it
- for entry_set in self.indexed_entries:
- i, entry = entry_set
- if from_restriction and not from_restriction.match(i):
- continue
- if to_restriction and not to_restriction.match(i):
- # TODO: is it safe to break here?
- continue
- result.append(entry)
-
- return result
-
- def _index_changelog(self):
- """Use the output of L{self._split_changelog} to create an index list
- of L{gentoolkit.versionmatch.VersionMatch} objects.
-
- @rtype: list
- @return: tuples containing a VersionMatch instance for the release
- version of each entry header as the first item and the entire entry
- as the second item
- @raise ValueError: if self.invalid_entry_is_fatal is True and we hit an
- invalid entry
- """
-
- result = []
- for entry in self.entries:
- # Extract the package name from the entry header, ex:
- # *xterm-242 (07 Mar 2009) => xterm-242
- pkg_name = entry.split(' ', 1)[0].lstrip('*')
- if not pkg_name.strip():
- continue
- try:
- entry_ver = CPV(pkg_name, validate=True)
- except errors.GentoolkitInvalidCPV:
- if self.invalid_entry_is_fatal:
- raise ValueError(entry_ver)
- continue
-
- result.append((VersionMatch(entry_ver, op='='), entry))
-
- return result
-
- def _split_changelog(self):
- """Split the ChangeLog into individual entries.
-
- @rtype: list
- @return: individual ChangeLog entries
- """
-
- result = []
- partial_entries = []
- with open(_unicode_encode(self.changelog_path,
- encoding=_encodings['fs'], errors="replace"),
- encoding=_encodings['content']) as log:
- for line in log:
- if line.startswith('#'):
- continue
- elif line.startswith('*'):
- # Append last entry to result...
- entry = ''.join(partial_entries)
- if entry and not entry.isspace():
- result.append(entry)
- # ... and start a new entry
- partial_entries = [line]
- else:
- partial_entries.append(line)
- else:
- # Append the final entry
- entry = ''.join(partial_entries)
- result.append(entry)
-
- return result
-
-
class FileOwner:
"""Creates a function for locating the owner of filename queries.
diff --git a/pym/gentoolkit/test/equery/test_init.py b/pym/gentoolkit/test/equery/test_init.py
index 075f653..4cad22e 100644
--- a/pym/gentoolkit/test/equery/test_init.py
+++ b/pym/gentoolkit/test/equery/test_init.py
@@ -15,7 +15,6 @@ class TestEqueryInit(unittest.TestCase):
name_map = {
'a': 'has',
'b': 'belongs',
- 'c': 'changes',
'k': 'check',
'd': 'depends',
'g': 'depgraph',
diff --git a/pym/gentoolkit/test/test_helpers.py b/pym/gentoolkit/test/test_helpers.py
index 734539c..be27835 100644
--- a/pym/gentoolkit/test/test_helpers.py
+++ b/pym/gentoolkit/test/test_helpers.py
@@ -6,52 +6,6 @@ from tempfile import NamedTemporaryFile, mktemp
from gentoolkit import helpers
-class TestChangeLog(unittest.TestCase):
-
- def setUp(self):
- pass
-
- def tearDown(self):
- pass
-
-# Commented out for being useless
-# def test_split_changelog(self):
-# changelog = """
-# *portage-2.1.6.2 (20 Dec 2008)
-
-# 20 Dec 2008; Zac Medico <zmedico@gentoo.org> +portage-2.1.6.2.ebuild:
-# 2.1.6.2 bump. This fixes bug #251591 (repoman inherit.autotools false
-# positives) and bug #251616 (performance issue in build log search regex
-# makes emerge appear to hang). Bug #216231 tracks all bugs fixed since
-# 2.1.4.x.
-
-# 20 Dec 2008; Zac Medico <zmedico@gentoo.org> -portage-2.1.6.ebuild,
-# -portage-2.1.6.1.ebuild, -portage-2.2_rc17.ebuild:
-# Remove old versions.
-
-
-# *portage-2.1.6.1 (12 Dec 2008)
-
-# 12 Dec 2008; Zac Medico <zmedico@gentoo.org> +portage-2.1.6.1.ebuild:
-# 2.1.6.1 bump. This fixes bug #250148 (emerge hangs with selinux if ebuild
-# spawns a daemon), bug #250166 (trigger download when generating manifest
-# if file size differs from existing entry), and bug #250212 (new repoman
-# upstream.workaround category for emake -j1 warnings). Bug #216231 tracks
-# all bugs fixed since 2.1.4.x.
-
-
-# *portage-2.1.6 (07 Dec 2008)
-
-# 07 Dec 2008; Zac Medico <zmedico@gentoo.org> +portage-2.1.6.ebuild:
-# 2.1.6 final release. This fixes bug #249586. Bug #216231 tracks all bugs
-# fixed since 2.1.4.x.
-
-# 07 Dec 2008; Zac Medico <zmedico@gentoo.org> -portage-2.1.6_rc1.ebuild,
-# -portage-2.1.6_rc2.ebuild, -portage-2.1.6_rc3.ebuild,
-# -portage-2.2_rc16.ebuild:
-# Remove old versions.
-# """
-
class TestFileOwner(unittest.TestCase):
def setUp(self):
@@ -113,7 +67,6 @@ class TestFileOwner(unittest.TestCase):
def test_main():
suite = unittest.TestLoader()
- suite.loadTestsFromTestCase(TestChangeLog)
suite.loadTestsFromTestCase(TestFileOwner)
unittest.TextTestRunner(verbosity=2).run(suite)
test_main.__test__ = False