[gentoo-portage-dev] Re: [PATCH] emerge --search: use slash to auto-detect category (bug 647940)
Thanks for reviews, merged now: https://gitweb.gentoo.org/proj/portage.git/commit/?id=7a6099f046a0c1f7d45751daf13c1e68253878aa -- Thanks, Zac signature.asc Description: OpenPGP digital signature
[gentoo-portage-dev] [PATCH v3 3/3] repoman: Verify commit messages when using EDITOR
--- repoman/pym/repoman/actions.py | 22 +++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/repoman/pym/repoman/actions.py b/repoman/pym/repoman/actions.py index cd954223a..8e23322c8 100644 --- a/repoman/pym/repoman/actions.py +++ b/repoman/pym/repoman/actions.py @@ -129,7 +129,23 @@ class Actions(object): else: sys.exit(1) else: - commitmessage = self.get_new_commit_message(qa_output) + commitmessage = None + msg_qa_output = qa_output + initial_message = None + while True: + commitmessage = self.get_new_commit_message( + msg_qa_output, commitmessage) + res, expl = self.verify_commit_message(commitmessage) + if res: + break + else: + full_expl = '''Issues with the commit message were found. Please fix it or remove +the whole commit message to abort. + +''' + expl + msg_qa_output = ( + [' %s\n' % x for x in full_expl.splitlines()] + + qa_output) commitmessage = commitmessage.rstrip() @@ -577,8 +593,8 @@ class Actions(object): prefix = "/".join(self.scanner.reposplit[1:]) + ": " return prefix - def get_new_commit_message(self, qa_output): - msg_prefix = self.msg_prefix() + def get_new_commit_message(self, qa_output, old_message=None): + msg_prefix = old_message or self.msg_prefix() try: editor = os.environ.get("EDITOR") if editor and utilities.editor_is_executable(editor): -- 2.16.2
[gentoo-portage-dev] [PATCH v3 2/3] repoman: Remove support for getting messages from stdin
Remove the support for getting commit messages from stdin, in favor of always using external editor. This was never very useful, especially given that was implemented poorly and with commit message verification it will become even more painful to keep. --- repoman/pym/repoman/actions.py | 4 +++- repoman/pym/repoman/utilities.py | 22 +- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/repoman/pym/repoman/actions.py b/repoman/pym/repoman/actions.py index 57b528312..cd954223a 100644 --- a/repoman/pym/repoman/actions.py +++ b/repoman/pym/repoman/actions.py @@ -585,7 +585,9 @@ class Actions(object): commitmessage = utilities.get_commit_message_with_editor( editor, message=qa_output, prefix=msg_prefix) else: - commitmessage = utilities.get_commit_message_with_stdin() + print("EDITOR is unset or invalid. Please set EDITOR to your preferred editor.") + print(bad("* no EDITOR found for commit message, aborting commit.")) + sys.exit(1) except KeyboardInterrupt: logging.fatal("Interrupted; exiting...") sys.exit(1) diff --git a/repoman/pym/repoman/utilities.py b/repoman/pym/repoman/utilities.py index c204faa8d..1272f3fb6 100644 --- a/repoman/pym/repoman/utilities.py +++ b/repoman/pym/repoman/utilities.py @@ -1,6 +1,6 @@ # -*- coding:utf-8 -*- # repoman: Utilities -# Copyright 2007-2013 Gentoo Foundation +# Copyright 2007-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 """This module contains utility functions to help repoman find ebuilds to @@ -13,7 +13,6 @@ __all__ = [ "FindPackagesToScan", "FindPortdir", "get_commit_message_with_editor", - "get_commit_message_with_stdin", "get_committer_name", "have_ebuild_dir", "have_profile_dir", @@ -226,25 +225,6 @@ def get_commit_message_with_editor(editor, message=None, prefix=""): pass -def get_commit_message_with_stdin(): - """ - Read a commit message from the user and return it. - - @rtype: string or None - @return: A string on success or None if an error occurs. - """ - print( - "Please enter a commit message." - " Use Ctrl-d to finish or Ctrl-c to abort.") - commitmessage = [] - while True: - commitmessage.append(sys.stdin.readline()) - if not commitmessage[-1]: - break - commitmessage = "".join(commitmessage) - return commitmessage - - def FindPortdir(settings): """ Try to figure out what repo we are in and whether we are in a regular tree or an overlay. -- 2.16.2
Re: [gentoo-portage-dev] [PATCH v2 1/3] repoman: Add commit message verification
W dniu sob, 17.02.2018 o godzinie 13∶56 +0100, użytkownik Michał Górny napisał: > Add a check for common mistakes in commit messages. For now, it is > pretty rough and works only for -m/-F. It will be extended to work > in the interactive mode in the future. > --- > repoman/pym/repoman/actions.py | 74 > - > repoman/pym/repoman/tests/commit/__init__.py| 2 + > repoman/pym/repoman/tests/commit/__test__.py| 1 + Oh, great. Now I see that I haven't added the new tests, and the file is gone now, and now I'm going to waste another hour writing them all again... > repoman/pym/repoman/tests/simple/test_simple.py | 8 +-- > 4 files changed, 80 insertions(+), 5 deletions(-) > create mode 100644 repoman/pym/repoman/tests/commit/__init__.py > create mode 100644 repoman/pym/repoman/tests/commit/__test__.py > > diff --git a/repoman/pym/repoman/actions.py b/repoman/pym/repoman/actions.py > index b76a6e466..91603865c 100644 > --- a/repoman/pym/repoman/actions.py > +++ b/repoman/pym/repoman/actions.py > @@ -119,7 +119,16 @@ class Actions(object): > if commitmessage[:9].lower() in ("cat/pkg: ",): > commitmessage = self.msg_prefix() + > commitmessage[9:] > > - if not commitmessage or not commitmessage.strip(): > + if commitmessage is not None and commitmessage.strip(): > + res, expl = self.verify_commit_message(commitmessage) > + if not res: > + print(bad("RepoMan does not like your commit > message:")) > + print(expl) > + if self.options.force: > + print('(but proceeding due to --force)') > + else: > + sys.exit(1) > + else: > commitmessage = self.get_new_commit_message(qa_output) > > commitmessage = commitmessage.rstrip() > @@ -585,3 +594,66 @@ class Actions(object): > print("* no commit message? aborting commit.") > sys.exit(1) > return commitmessage > + > + footer_re = re.compile(r'^[\w-]+:') > + > + @classmethod > + def verify_commit_message(cls, msg): > + """ > + Check whether the message roughly complies with GLEP66. Returns > + (True, None) if it does, (False, ) if it does not. > + """ > + > + problems = [] > + paras = msg.strip().split('\n\n') > + summary = paras.pop(0) > + > + if ':' not in summary: > + problems.append('summary line must start with a logical > unit name, e.g. "cat/pkg:"') > + if '\n' in summary.strip(): > + problems.append('commit message must start with a > *single* line of summary, followed by empty line') > + # accept 69 overall or unit+50, in case of very long package > names > + elif len(summary.strip()) > 69 and len(summary.split(':', > 1)[-1]) > 50: > + problems.append('summary line is too long (max 69 > characters)') > + > + multiple_footers = False > + gentoo_bug_used = False > + bug_closes_without_url = False > + body_too_long = False > + > + found_footer = False > + for p in paras: > + lines = p.splitlines() > + # if all lines look like footer material, we assume > it's footer > + # else, we assume it's body text > + if all(cls.footer_re.match(l) for l in lines if > l.strip()): > + # multiple footer-like blocks? > + if found_footer: > + multiple_footers = True > + found_footer = True > + for l in lines: > + if l.startswith('Gentoo-Bug'): > + gentoo_bug_used = True > + elif l.startswith('Bug:') or > l.startswith('Closes:'): > + if 'http://' not in l and > 'https://' not in l: > + bug_closes_without_url > = True > + else: > + for l in lines: > + # we recommend wrapping at 72 but > accept up to 80; > + # do not complain if we have single > word (usually > + # it means very long URL) > + if len(l.strip()) > 80 and > len(l.split()) > 1: > + body_too_long = True > + > +
Re: [gentoo-portage-dev] [PATCH] emerge --search: use slash to auto-detect category (bug 647940)
On 18/02/18 21:27, Zac Medico wrote: > Since search strings containing a slash do no work unless category > match mode is enabled, use slash to auto-detect category match mode, > so that users do not have to prefix the search string with the special > @ symbol. > > Bug: https://bugs.gentoo.org/647940 > --- > pym/_emerge/search.py | 4 > 1 file changed, 4 insertions(+) > > diff --git a/pym/_emerge/search.py b/pym/_emerge/search.py > index 36897fb15..eb52b2ca3 100644 > --- a/pym/_emerge/search.py > +++ b/pym/_emerge/search.py > @@ -256,6 +256,10 @@ class search(object): > if self.searchkey.startswith('@'): > match_category = 1 > self.searchkey = self.searchkey[1:] > + # Auto-detect category match mode (@ symbol can be deprecated > + # after this is available in a stable version of portage). > + if '/' in self.searchkey: > + match_category = 1 > fuzzy = False > if regexsearch: > self.searchre=re.compile(self.searchkey,re.I) +1 long overdue! :D signature.asc Description: OpenPGP digital signature