diff --git a/.gitignore b/.gitignore index 5172e46..0b46c86 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /mycli-1.5.2.tar.gz +/mycli-1.6.0.tar.gz diff --git a/mycli-1.5.2-5db592.patch b/mycli-1.5.2-5db592.patch deleted file mode 100644 index 4aeaf6d..0000000 --- a/mycli-1.5.2-5db592.patch +++ /dev/null @@ -1,541 +0,0 @@ -diff --git a/AUTHORS b/AUTHORS -index 6d86f1f..0c566da 100644 ---- a/AUTHORS -+++ b/AUTHORS -@@ -13,7 +13,6 @@ Contributors: - - * Steve Robbins - * Daniel West -- * shoma - * Daniel Black - * Jonathan Bruno - * Heath Naylor -diff --git a/README.md b/README.md -index e20b209..af6c674 100644 ---- a/README.md -+++ b/README.md -@@ -53,6 +53,9 @@ Check the [detailed install instructions](#detailed-install-instructions) for de - -l, --logfile FILENAME Log every query and its results to a file. - --defaults-group-suffix TEXT Read config group with the specified suffix. - --defaults-file PATH Only read default options from the given file -+ --auto-vertical-output Automatically switch to vertical output mode -+ if the result is wider than the terminal -+ width. - --login-path TEXT Read this path from the login file. - --help Show this message and exit. - -@@ -69,7 +72,7 @@ Features - - `mycli` is written using [prompt_toolkit](https://github.com/jonathanslenders/python-prompt-toolkit/). - --* Auto-completion as you type for SQL keywords as well as tables and -+* Auto-completion as you type for SQL keywords as well as tables, views and - columns in the database. - * Syntax highlighting using Pygments. - * Smart-completion (enabled by default) will suggest context-sensitive completion. -@@ -77,7 +80,16 @@ Features - - `SELECT * FROM ` will only show table names. - - `SELECT * FROM users WHERE ` will only show column names. - -+* Support for multiline queries. -+ -+* Favorite queries. Save a query using `\fs alias query` and execute it with `\f alias` whenever you need. -+ -+* Timing of sql statments and table rendering. -+ - * Config file is automatically created at ``~/.myclirc`` at first launch. -+ -+* Log every query and its results to a file (disabled by default). -+ - * Pretty prints tabular data. - - Contributions: -diff --git a/mycli/clistyle.py b/mycli/clistyle.py -index 45f20e3..a74df45 100644 ---- a/mycli/clistyle.py -+++ b/mycli/clistyle.py -@@ -1,7 +1,7 @@ - from pygments.token import string_to_tokentype - from pygments.style import Style - from pygments.util import ClassNotFound --from prompt_toolkit.styles import default_style_extensions -+from prompt_toolkit.styles import default_style_extensions, PygmentsStyle - import pygments.styles - - -@@ -19,4 +19,4 @@ def style_factory(name, cli_style): - custom_styles = dict([(string_to_tokentype(x), y) for x, y in cli_style.items()]) - styles.update(custom_styles) - -- return CLIStyle -+ return PygmentsStyle(CLIStyle) -diff --git a/mycli/clitoolbar.py b/mycli/clitoolbar.py -index 66bdc80..8abe948 100644 ---- a/mycli/clitoolbar.py -+++ b/mycli/clitoolbar.py -@@ -1,4 +1,5 @@ - from pygments.token import Token -+from prompt_toolkit.enums import DEFAULT_BUFFER - - def create_toolbar_tokens_func(get_key_bindings, get_is_refreshing): - """ -@@ -12,17 +13,17 @@ def create_toolbar_tokens_func(get_key_bindings, get_is_refreshing): - result = [] - result.append((token, ' ')) - -- if cli.buffers['default'].completer.smart_completion: -+ if cli.buffers[DEFAULT_BUFFER].completer.smart_completion: - result.append((token.On, '[F2] Smart Completion: ON ')) - else: - result.append((token.Off, '[F2] Smart Completion: OFF ')) - -- if cli.buffers['default'].always_multiline: -+ if cli.buffers[DEFAULT_BUFFER].always_multiline: - result.append((token.On, '[F3] Multiline: ON ')) - else: - result.append((token.Off, '[F3] Multiline: OFF ')) - -- if cli.buffers['default'].always_multiline: -+ if cli.buffers[DEFAULT_BUFFER].always_multiline: - result.append((token, - ' (Semi-colon [;] will end the line)')) - -diff --git a/mycli/config.py b/mycli/config.py -index 8e9d9d6..0d0dc2e 100644 ---- a/mycli/config.py -+++ b/mycli/config.py -@@ -1,10 +1,16 @@ -+from __future__ import print_function - import shutil - from io import BytesIO, TextIOWrapper - import logging - import os --from os.path import expanduser, exists -+from os.path import exists - import struct --from configobj import ConfigObj -+import sys -+from configobj import ConfigObj, ConfigObjError -+try: -+ basestring -+except NameError: -+ basestring = str - try: - from Crypto.Cipher import AES - except ImportError: -@@ -19,16 +25,49 @@ class CryptoError(Exception): - - logger = logging.getLogger(__name__) - --def load_config(usr_cfg, def_cfg=None): -- cfg = ConfigObj() -- cfg.merge(ConfigObj(def_cfg, interpolation=False)) -- cfg.merge(ConfigObj(expanduser(usr_cfg), interpolation=False)) -- cfg.filename = expanduser(usr_cfg) -+def log(logger, level, message): -+ """Logs message to stderr if logging isn't initialized.""" -+ -+ if logger.parent.name != 'root': -+ logger.log(level, message) -+ else: -+ print(message, file=sys.stderr) -+ -+def read_config_file(f): -+ """Read a config file.""" -+ -+ if isinstance(f, basestring): -+ f = os.path.expanduser(f) -+ -+ try: -+ config = ConfigObj(f, interpolation=False) -+ except ConfigObjError as e: -+ log(logger, logging.ERROR, "Unable to parse line {0} of config file " -+ "'{1}'.".format(e.line_number, f)) -+ log(logger, logging.ERROR, "Using successfully parsed config values.") -+ return e.config -+ except (IOError, OSError) as e: -+ log(logger, logging.WARNING, "You don't have permission to read " -+ "config file '{0}'.".format(e.filename)) -+ return None -+ -+ return config -+ -+def read_config_files(files): -+ """Read and merge a list of config files.""" -+ -+ config = ConfigObj() -+ -+ for _file in files: -+ _config = read_config_file(_file) -+ if bool(_config) is True: -+ config.merge(_config) -+ config.filename = _config.filename - -- return cfg -+ return config - - def write_default_config(source, destination, overwrite=False): -- destination = expanduser(destination) -+ destination = os.path.expanduser(destination) - if not overwrite and exists(destination): - return - -diff --git a/mycli/key_bindings.py b/mycli/key_bindings.py -index 4a16b95..94de541 100644 ---- a/mycli/key_bindings.py -+++ b/mycli/key_bindings.py -@@ -17,6 +17,7 @@ def mycli_bindings(get_key_bindings, set_key_bindings): - key_binding_manager = KeyBindingManager( - enable_open_in_editor=True, - enable_system_bindings=True, -+ enable_abort_and_exit_bindings=True, - enable_vi_mode=Condition(lambda cli: get_key_bindings() == 'vi')) - - @key_binding_manager.registry.add_binding(Keys.F2) -diff --git a/mycli/main.py b/mycli/main.py -index 815d343..12a8e60 100755 ---- a/mycli/main.py -+++ b/mycli/main.py -@@ -15,8 +15,9 @@ from io import open - import click - import sqlparse - from prompt_toolkit import CommandLineInterface, Application, AbortAction -+from prompt_toolkit.interface import AcceptAction - from prompt_toolkit.enums import DEFAULT_BUFFER --from prompt_toolkit.shortcuts import create_default_layout, create_eventloop -+from prompt_toolkit.shortcuts import create_prompt_layout, create_eventloop - from prompt_toolkit.document import Document - from prompt_toolkit.filters import Always, HasFocus, IsDone - from prompt_toolkit.layout.processors import (HighlightMatchingBracketProcessor, -@@ -35,8 +36,9 @@ from .clistyle import style_factory - from .sqlexecute import SQLExecute - from .clibuffer import CLIBuffer - from .completion_refresher import CompletionRefresher --from .config import (write_default_config, load_config, get_mylogin_cnf_path, -- open_mylogin_cnf, CryptoError) -+from .config import (write_default_config, get_mylogin_cnf_path, -+ open_mylogin_cnf, CryptoError, read_config_file, -+ read_config_files) - from .key_bindings import mycli_bindings - from .encodingutils import utf8tounicode - from .lexer import MyCliLexer -@@ -67,16 +69,25 @@ class MyCli(object): - '/etc/my.cnf', - '/etc/mysql/my.cnf', - '/usr/local/etc/my.cnf', -- os.path.expanduser('~/.my.cnf') -+ '~/.my.cnf' - ] - -+ system_config_files = [ -+ '/etc/myclirc', -+ ] -+ -+ default_config_file = os.path.join(PACKAGE_ROOT, 'myclirc') -+ user_config_file = '~/.myclirc' -+ -+ - def __init__(self, sqlexecute=None, prompt=None, - logfile=None, defaults_suffix=None, defaults_file=None, -- login_path=None): -+ login_path=None, auto_vertical_output=False): - self.sqlexecute = sqlexecute - self.logfile = logfile - self.defaults_suffix = defaults_suffix - self.login_path = login_path -+ self.auto_vertical_output = auto_vertical_output - - # self.cnf_files is a class variable that stores the list of mysql - # config files to read in at launch. -@@ -85,12 +96,10 @@ class MyCli(object): - if defaults_file: - self.cnf_files = [defaults_file] - -- default_config = os.path.join(PACKAGE_ROOT, 'myclirc') -- write_default_config(default_config, '~/.myclirc') -- -- - # Load config. -- c = self.config = load_config('~/.myclirc', default_config) -+ config_files = ([self.default_config_file] + self.system_config_files + -+ [self.user_config_file]) -+ c = self.config = read_config_files(config_files) - self.multi_line = c['main'].as_bool('multi_line') - self.destructive_warning = c['main'].as_bool('destructive_warning') - self.key_bindings = c['main']['key_bindings'] -@@ -100,6 +109,10 @@ class MyCli(object): - self.cli_style = c['colors'] - self.wider_completion_menu = c['main'].as_bool('wider_completion_menu') - -+ # Write user config if system config wasn't the last config loaded. -+ if c.filename not in self.system_config_files: -+ write_default_config(self.default_config_file, self.user_config_file) -+ - # audit log - if self.logfile is None and 'audit_log' in c['main']: - try: -@@ -225,6 +238,8 @@ class MyCli(object): - root_logger.addHandler(handler) - root_logger.setLevel(level_map[log_level.upper()]) - -+ logging.captureWarnings(True) -+ - root_logger.debug('Initializing mycli logging.') - root_logger.debug('Log file %r.', log_file) - -@@ -241,15 +256,7 @@ class MyCli(object): - :param keys: list of keys to retrieve - :returns: tuple, with None for missing keys. - """ -- cnf = ConfigObj() -- for _file in files: -- try: -- cnf.merge(ConfigObj(_file, interpolation=False)) -- except ConfigObjError as e: -- self.logger.error('Error parsing %r.', _file) -- self.logger.error('Recovering partially parsed config values.') -- cnf.merge(e.config) -- pass -+ cnf = read_config_files(files) - - sections = ['client'] - if self.login_path and self.login_path != 'client': -@@ -289,7 +296,14 @@ class MyCli(object): - socket = socket or cnf['socket'] - user = user or cnf['user'] or os.getenv('USER') - host = host or cnf['host'] or 'localhost' -- port = int(port or cnf['port'] or 3306) -+ port = port or cnf['port'] or 3306 -+ try: -+ port = int(port) -+ except ValueError as e: -+ self.output("Error: Invalid port number: '{0}'.".format(port), -+ err=True, fg='red') -+ exit(1) -+ - passwd = passwd or cnf['password'] - charset = charset or cnf['default-character-set'] or 'utf8' - -@@ -371,26 +385,26 @@ class MyCli(object): - get_toolbar_tokens = create_toolbar_tokens_func(lambda: self.key_bindings, - self.completion_refresher.is_refreshing) - -- layout = create_default_layout(lexer=MyCliLexer, -- reserve_space_for_menu=True, -- multiline=True, -- get_prompt_tokens=prompt_tokens, -- get_bottom_toolbar_tokens=get_toolbar_tokens, -- display_completions_in_columns=self.wider_completion_menu, -- extra_input_processors=[ -- ConditionalProcessor( -- processor=HighlightMatchingBracketProcessor(chars='[](){}'), -- filter=HasFocus(DEFAULT_BUFFER) & ~IsDone()), -- ]) -+ layout = create_prompt_layout(lexer=MyCliLexer, -+ multiline=True, -+ get_prompt_tokens=prompt_tokens, -+ get_bottom_toolbar_tokens=get_toolbar_tokens, -+ display_completions_in_columns=self.wider_completion_menu, -+ extra_input_processors=[ -+ ConditionalProcessor( -+ processor=HighlightMatchingBracketProcessor(chars='[](){}'), -+ filter=HasFocus(DEFAULT_BUFFER) & ~IsDone()), -+ ]) - with self._completer_lock: - buf = CLIBuffer(always_multiline=self.multi_line, completer=self.completer, - history=FileHistory(os.path.expanduser('~/.mycli-history')), -- complete_while_typing=Always()) -+ complete_while_typing=Always(), accept_action=AcceptAction.RETURN_DOCUMENT) - - application = Application(style=style_factory(self.syntax_style, self.cli_style), - layout=layout, buffer=buf, - key_bindings_registry=key_binding_manager.registry, - on_exit=AbortAction.RAISE_EXCEPTION, -+ on_abort=AbortAction.RETRY, - ignore_case=True) - self.cli = CommandLineInterface(application=application, - eventloop=create_eventloop()) -@@ -456,8 +470,17 @@ class MyCli(object): - if not click.confirm('Do you want to continue?'): - self.output("Aborted!", err=True, fg='red') - break -- output.extend(format_output(title, cur, headers, -- status, self.table_format)) -+ -+ if self.auto_vertical_output: -+ max_width = self.cli.output.get_size().columns -+ else: -+ max_width = None -+ -+ formatted = format_output(title, cur, headers, -+ status, self.table_format, -+ special.is_expanded_output(), max_width) -+ -+ output.extend(formatted) - end = time() - total += end - start - mutating = mutating or is_mutating(status) -@@ -616,19 +639,22 @@ class MyCli(object): - help='Read config group with the specified suffix.') - @click.option('--defaults-file', type=click.Path(), - help='Only read default options from the given file') -+@click.option('--auto-vertical-output', is_flag=True, -+ help='Automatically switch to vertical output mode if the result is wider than the terminal width.') - @click.option('--login-path', type=str, - help='Read this path from the login file.') - @click.argument('database', default='', nargs=1) - def cli(database, user, host, port, socket, password, dbname, - version, prompt, logfile, defaults_group_suffix, defaults_file, -- login_path): -+ login_path, auto_vertical_output): - if version: - print('Version:', __version__) - sys.exit(0) - - mycli = MyCli(prompt=prompt, logfile=logfile, - defaults_suffix=defaults_group_suffix, -- defaults_file=defaults_file, login_path=login_path) -+ defaults_file=defaults_file, login_path=login_path, -+ auto_vertical_output=auto_vertical_output) - - # Choose which ever one has a valid value. - database = database or dbname -@@ -646,21 +672,35 @@ def cli(database, user, host, port, socket, password, dbname, - - mycli.run_cli() - --def format_output(title, cur, headers, status, table_format): -+def format_output(title, cur, headers, status, table_format, expanded=False, max_width=None): - output = [] - if title: # Only print the title if it's not None. - output.append(title) - if cur: - headers = [utf8tounicode(x) for x in headers] -- if special.is_expanded_output(): -+ if expanded: - output.append(expanded_table(cur, headers)) - else: -- output.append(tabulate(cur, headers, tablefmt=table_format, -- missingval='')) -+ rows = list(cur) -+ tabulated, frows = tabulate(rows, headers, tablefmt=table_format, -+ missingval='') -+ if (max_width and rows and -+ content_exceeds_width(frows[0], max_width) and -+ headers): -+ output.append(expanded_table(rows, headers)) -+ else: -+ output.append(tabulated) - if status: # Only print the status if it's not None. - output.append(status) - return output - -+def content_exceeds_width(row, width): -+ # Account for 3 characters between each column -+ separator_space = (len(row)*3) -+ # Add 2 columns for a bit of buffer -+ line_len = sum([len(str(x)) for x in row]) + separator_space + 2 -+ return line_len > width -+ - def need_completion_refresh(queries): - """Determines if the completion needs a refresh by checking if the sql - statement is an alter, create, drop or change db.""" -diff --git a/mycli/myclirc b/mycli/myclirc -index 9abef88..c59e621 100644 ---- a/mycli/myclirc -+++ b/mycli/myclirc -@@ -35,9 +35,11 @@ timing = True - # Recommended: psql, fancy_grid and grid. - table_format = psql - --# Syntax Style. Possible values: manni, igor, xcode, vim, autumn, vs, rrt, --# native, perldoc, borland, tango, emacs, friendly, monokai, paraiso-dark, --# colorful, murphy, bw, pastie, paraiso-light, trac, default, fruity -+# Syntax coloring style. Possible values (many support the "-dark" suffix): -+# manni, igor, xcode, vim, autumn, vs, rrt, native, perldoc, borland, tango, emacs, -+# friendly, monokai, paraiso, colorful, murphy, bw, pastie, paraiso, trac, default, -+# fruity. -+# Screenshots at http://mycli.net/syntax - syntax_style = default - - # Keybindings: Possible values: emacs, vi. -diff --git a/mycli/packages/special/favoritequeries.py b/mycli/packages/special/favoritequeries.py -index addd1fe..bec14ec 100644 ---- a/mycli/packages/special/favoritequeries.py -+++ b/mycli/packages/special/favoritequeries.py -@@ -57,5 +57,5 @@ Examples: - self.config.write() - return '%s: Deleted' % name - --from ...config import load_config --favoritequeries = FavoriteQueries(load_config('~/.myclirc')) -+from ...config import read_config_file -+favoritequeries = FavoriteQueries(read_config_file('~/.myclirc')) -diff --git a/mycli/packages/tabulate.py b/mycli/packages/tabulate.py -index a591199..f0874d5 100644 ---- a/mycli/packages/tabulate.py -+++ b/mycli/packages/tabulate.py -@@ -881,6 +881,8 @@ def tabulate(tabular_data, headers=[], tablefmt="simple", - eggs & 451 \\\\ - \\bottomrule - \end{tabular} -+ -+ Also returns a tuple of the raw rows pulled from tabular_data - """ - if tabular_data is None: - tabular_data = [] -@@ -923,7 +925,7 @@ def tabulate(tabular_data, headers=[], tablefmt="simple", - if not isinstance(tablefmt, TableFormat): - tablefmt = _table_formats.get(tablefmt, _table_formats["simple"]) - -- return _format_table(tablefmt, headers, rows, minwidths, aligns) -+ return _format_table(tablefmt, headers, rows, minwidths, aligns), rows - - - def _build_simple_row(padded_cells, rowfmt): -diff --git a/mycli/sqlexecute.py b/mycli/sqlexecute.py -index 53918e6..2ae56d8 100644 ---- a/mycli/sqlexecute.py -+++ b/mycli/sqlexecute.py -@@ -94,19 +94,17 @@ class SQLExecute(object): - # Remove spaces, eol and semi-colons. - sql = sql.rstrip(';') - -- # \G is treated specially since we have to set the expanded output -- # and then proceed to execute the sql as normal. -+ # \G is treated specially since we have to set the expanded output. - if sql.endswith('\\G'): - special.set_expanded_output(True) -- yield self.execute_normal_sql(sql.rsplit('\\G', 1)[0]) -- else: -- try: # Special command -- _logger.debug('Trying a dbspecial command. sql: %r', sql) -- cur = self.conn.cursor() -- for result in special.execute(cur, sql): -- yield result -- except special.CommandNotFound: # Regular SQL -- yield self.execute_normal_sql(sql) -+ sql = sql[:-2].strip() -+ try: # Special command -+ _logger.debug('Trying a dbspecial command. sql: %r', sql) -+ cur = self.conn.cursor() -+ for result in special.execute(cur, sql): -+ yield result -+ except special.CommandNotFound: # Regular SQL -+ yield self.execute_normal_sql(sql) - - def execute_normal_sql(self, split_sql): - _logger.debug('Regular sql statement. sql: %r', split_sql) -diff --git a/setup.py b/setup.py -index e503e2c..92b11a2 100644 ---- a/setup.py -+++ b/setup.py -@@ -14,7 +14,7 @@ description = 'CLI for MySQL Database. With auto-completion and syntax highlight - install_requirements = [ - 'click >= 4.1', - 'Pygments >= 2.0', # Pygments has to be Capitalcased. WTF? -- 'prompt_toolkit==0.46', -+ 'prompt_toolkit==0.57', - 'PyMySQL >= 0.6.2', - 'sqlparse >= 0.1.16', - 'configobj >= 5.0.6', diff --git a/mycli-1.5.2-mv-authors.patch b/mycli-1.5.2-mv-authors.patch deleted file mode 100644 index ffdb40b..0000000 --- a/mycli-1.5.2-mv-authors.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 23ad1dbe1ea8ba897a64fa7bd2c8207556416e13 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Terje=20R=C3=B8sten?= -Date: Sat, 2 Jan 2016 15:14:14 +0100 -Subject: [PATCH] AUTHORS and SPONSORS cant be installed at top level - ---- - mycli/main.py | 2 +- - setup.py | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/mycli/main.py b/mycli/main.py -index 815d343..0a4299c 100755 ---- a/mycli/main.py -+++ b/mycli/main.py -@@ -353,7 +353,7 @@ class MyCli(object): - value = 'emacs' - self.key_bindings = value - -- project_root = os.path.dirname(PACKAGE_ROOT) -+ project_root = os.path.join(os.path.dirname(PACKAGE_ROOT), 'mycli') - author_file = os.path.join(project_root, 'AUTHORS') - sponsor_file = os.path.join(project_root, 'SPONSORS') - -diff --git a/setup.py b/setup.py -index 2deb6ef..d7a080c 100644 ---- a/setup.py -+++ b/setup.py -@@ -34,7 +34,7 @@ setup( - license='LICENSE.txt', - url='http://mycli.net', - packages=find_packages(), -- package_data={'mycli': ['myclirc', '../AUTHORS', '../SPONSORS']}, -+ package_data={'mycli': ['myclirc', 'AUTHORS', 'SPONSORS']}, - description=description, - long_description=description, - install_requires=install_requirements, --- -2.5.0 - diff --git a/mycli-1.6.0-mv-authors.patch b/mycli-1.6.0-mv-authors.patch new file mode 100644 index 0000000..3e1a514 --- /dev/null +++ b/mycli-1.6.0-mv-authors.patch @@ -0,0 +1,26 @@ +diff --git a/mycli/main.py b/mycli/main.py +index e423aa7..7c3cd75 100755 +--- a/mycli/main.py ++++ b/mycli/main.py +@@ -414,7 +414,7 @@ class MyCli(object): + value = 'emacs' + self.key_bindings = value + +- project_root = os.path.dirname(PACKAGE_ROOT) ++ project_root = os.path.join(os.path.dirname(PACKAGE_ROOT), 'mycli') + author_file = os.path.join(project_root, 'AUTHORS') + sponsor_file = os.path.join(project_root, 'SPONSORS') + +diff --git a/setup.py b/setup.py +index a5eec5e..35d6e38 100644 +--- a/setup.py ++++ b/setup.py +@@ -33,7 +33,7 @@ setup( + version=version, + url='http://mycli.net', + packages=find_packages(), +- package_data={'mycli': ['myclirc', '../AUTHORS', '../SPONSORS']}, ++ package_data={'mycli': ['myclirc', 'AUTHORS', 'SPONSORS']}, + description=description, + long_description=description, + install_requires=install_requirements, diff --git a/mycli.spec b/mycli.spec index 8b82121..4085b7b 100644 --- a/mycli.spec +++ b/mycli.spec @@ -1,19 +1,18 @@ Summary: Interactive CLI for MySQL Database with auto-completion and syntax highlighting Name: mycli -Version: 1.5.2 -Release: 5%{?dist} +Version: 1.6.0 +Release: 1%{?dist} License: BSD URL: http://%{name}.net Source0: https://pypi.python.org/packages/source/m/%{name}/%{name}-%{version}.tar.gz -Patch01: %{name}-1.5.2-5db592.patch -Patch02: %{name}-1.5.2-mv-authors.patch +Patch01: %{name}-1.6.0-mv-authors.patch BuildArch: noarch BuildRequires: python3-devel BuildRequires: python3-setuptools Requires: python3-click >= 4.0 requires: python3-crypto => 2.6.1 Requires: python3-pygments >= 2.0 -Requires: python3-prompt_toolkit >= 0.57 +Requires: python3-prompt_toolkit = 0.60 Requires: python3-PyMySQL >= 0.6.6 Requires: python3-sqlparse >= 0.1.16 Requires: python3-configobj >= 5.0.6 @@ -25,7 +24,6 @@ syntax highlighting. %prep %setup -q %patch01 -p1 -%patch02 -p1 rm -rf %{name}.egg-info mv AUTHORS SPONSORS %{name}/ sed -i -e '1 d' %{name}/main.py @@ -44,6 +42,9 @@ sed -i -e '1 d' %{name}/main.py %{python3_sitelib}/%{name}-%{version}-py?.?.egg-info %changelog +* Sun Mar 27 2016 Terje Rosten - 1.6.0-1 +- 1.6.0 + * Thu Feb 04 2016 Fedora Release Engineering - 1.5.2-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild diff --git a/sources b/sources index b25f2e7..5ba4fa4 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -5649febe9f92c1f49d5efa605103d14c mycli-1.5.2.tar.gz +390ce1ae5b8f9ddca95fb1aa54e2eab2 mycli-1.6.0.tar.gz