[gentoo-portage-dev] Re: [PATCH] emerge --search: use slash to auto-detect category (bug 647940)

2018-02-19 Thread Zac Medico
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

2018-02-19 Thread Michał Górny
---
 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

2018-02-19 Thread Michał Górny
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

2018-02-19 Thread Michał Górny
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)

2018-02-19 Thread M. J. Everitt
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