mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Resolve homebrew and homebrew_cask package name validation issues (#1038)
Add basic regression tests Add changelog Rename _create_regex_group to better suit function Fix '-' use in Homebrew validation
This commit is contained in:
parent
4842f67da1
commit
4c379bd3b2
5 changed files with 62 additions and 14 deletions
|
@ -0,0 +1,5 @@
|
||||||
|
bugfixes:
|
||||||
|
- homebrew - fix package name validation for packages containing hypen ``-``
|
||||||
|
(https://github.com/ansible-collections/community.general/issues/1037).
|
||||||
|
- homebrew_cask - fix package name validation for casks containing hypen ``-``
|
||||||
|
(https://github.com/ansible-collections/community.general/issues/1037).
|
|
@ -168,7 +168,7 @@ class HomebrewException(Exception):
|
||||||
|
|
||||||
|
|
||||||
# utils ------------------------------------------------------------------- {{{
|
# utils ------------------------------------------------------------------- {{{
|
||||||
def _create_regex_group(s):
|
def _create_regex_group_complement(s):
|
||||||
lines = (line.strip() for line in s.split('\n') if line.strip())
|
lines = (line.strip() for line in s.split('\n') if line.strip())
|
||||||
chars = filter(None, (line.split('#')[0].strip() for line in lines))
|
chars = filter(None, (line.split('#')[0].strip() for line in lines))
|
||||||
group = r'[^' + r''.join(chars) + r']'
|
group = r'[^' + r''.join(chars) + r']'
|
||||||
|
@ -186,7 +186,7 @@ class Homebrew(object):
|
||||||
: # colons
|
: # colons
|
||||||
{sep} # the OS-specific path separator
|
{sep} # the OS-specific path separator
|
||||||
. # dots
|
. # dots
|
||||||
- # dashes
|
\- # dashes
|
||||||
'''.format(sep=os.path.sep)
|
'''.format(sep=os.path.sep)
|
||||||
|
|
||||||
VALID_BREW_PATH_CHARS = r'''
|
VALID_BREW_PATH_CHARS = r'''
|
||||||
|
@ -194,7 +194,7 @@ class Homebrew(object):
|
||||||
\s # spaces
|
\s # spaces
|
||||||
{sep} # the OS-specific path separator
|
{sep} # the OS-specific path separator
|
||||||
. # dots
|
. # dots
|
||||||
- # dashes
|
\- # dashes
|
||||||
'''.format(sep=os.path.sep)
|
'''.format(sep=os.path.sep)
|
||||||
|
|
||||||
VALID_PACKAGE_CHARS = r'''
|
VALID_PACKAGE_CHARS = r'''
|
||||||
|
@ -202,14 +202,14 @@ class Homebrew(object):
|
||||||
. # dots
|
. # dots
|
||||||
/ # slash (for taps)
|
/ # slash (for taps)
|
||||||
\+ # plusses
|
\+ # plusses
|
||||||
- # dashes
|
\- # dashes
|
||||||
: # colons (for URLs)
|
: # colons (for URLs)
|
||||||
@ # at-sign
|
@ # at-sign
|
||||||
'''
|
'''
|
||||||
|
|
||||||
INVALID_PATH_REGEX = _create_regex_group(VALID_PATH_CHARS)
|
INVALID_PATH_REGEX = _create_regex_group_complement(VALID_PATH_CHARS)
|
||||||
INVALID_BREW_PATH_REGEX = _create_regex_group(VALID_BREW_PATH_CHARS)
|
INVALID_BREW_PATH_REGEX = _create_regex_group_complement(VALID_BREW_PATH_CHARS)
|
||||||
INVALID_PACKAGE_REGEX = _create_regex_group(VALID_PACKAGE_CHARS)
|
INVALID_PACKAGE_REGEX = _create_regex_group_complement(VALID_PACKAGE_CHARS)
|
||||||
# /class regexes ----------------------------------------------- }}}
|
# /class regexes ----------------------------------------------- }}}
|
||||||
|
|
||||||
# class validations -------------------------------------------- {{{
|
# class validations -------------------------------------------- {{{
|
||||||
|
|
|
@ -152,7 +152,7 @@ class HomebrewCaskException(Exception):
|
||||||
|
|
||||||
|
|
||||||
# utils ------------------------------------------------------------------- {{{
|
# utils ------------------------------------------------------------------- {{{
|
||||||
def _create_regex_group(s):
|
def _create_regex_group_complement(s):
|
||||||
lines = (line.strip() for line in s.split('\n') if line.strip())
|
lines = (line.strip() for line in s.split('\n') if line.strip())
|
||||||
chars = filter(None, (line.split('#')[0].strip() for line in lines))
|
chars = filter(None, (line.split('#')[0].strip() for line in lines))
|
||||||
group = r'[^' + r''.join(chars) + r']'
|
group = r'[^' + r''.join(chars) + r']'
|
||||||
|
@ -170,7 +170,7 @@ class HomebrewCask(object):
|
||||||
: # colons
|
: # colons
|
||||||
{sep} # the OS-specific path separator
|
{sep} # the OS-specific path separator
|
||||||
. # dots
|
. # dots
|
||||||
- # dashes
|
\- # dashes
|
||||||
'''.format(sep=os.path.sep)
|
'''.format(sep=os.path.sep)
|
||||||
|
|
||||||
VALID_BREW_PATH_CHARS = r'''
|
VALID_BREW_PATH_CHARS = r'''
|
||||||
|
@ -178,20 +178,20 @@ class HomebrewCask(object):
|
||||||
\s # spaces
|
\s # spaces
|
||||||
{sep} # the OS-specific path separator
|
{sep} # the OS-specific path separator
|
||||||
. # dots
|
. # dots
|
||||||
- # dashes
|
\- # dashes
|
||||||
'''.format(sep=os.path.sep)
|
'''.format(sep=os.path.sep)
|
||||||
|
|
||||||
VALID_CASK_CHARS = r'''
|
VALID_CASK_CHARS = r'''
|
||||||
\w # alphanumeric characters (i.e., [a-zA-Z0-9_])
|
\w # alphanumeric characters (i.e., [a-zA-Z0-9_])
|
||||||
. # dots
|
. # dots
|
||||||
/ # slash (for taps)
|
/ # slash (for taps)
|
||||||
- # dashes
|
\- # dashes
|
||||||
@ # at symbol
|
@ # at symbol
|
||||||
'''
|
'''
|
||||||
|
|
||||||
INVALID_PATH_REGEX = _create_regex_group(VALID_PATH_CHARS)
|
INVALID_PATH_REGEX = _create_regex_group_complement(VALID_PATH_CHARS)
|
||||||
INVALID_BREW_PATH_REGEX = _create_regex_group(VALID_BREW_PATH_CHARS)
|
INVALID_BREW_PATH_REGEX = _create_regex_group_complement(VALID_BREW_PATH_CHARS)
|
||||||
INVALID_CASK_REGEX = _create_regex_group(VALID_CASK_CHARS)
|
INVALID_CASK_REGEX = _create_regex_group_complement(VALID_CASK_CHARS)
|
||||||
# /class regexes ----------------------------------------------- }}}
|
# /class regexes ----------------------------------------------- }}}
|
||||||
|
|
||||||
# class validations -------------------------------------------- {{{
|
# class validations -------------------------------------------- {{{
|
||||||
|
|
22
tests/unit/plugins/modules/packaging/os/test_homebrew.py
Normal file
22
tests/unit/plugins/modules/packaging/os/test_homebrew.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function)
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
from ansible_collections.community.general.tests.unit.compat import unittest
|
||||||
|
from ansible_collections.community.general.plugins.modules.packaging.os.homebrew import Homebrew
|
||||||
|
|
||||||
|
|
||||||
|
class TestHomebrewModule(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.brew_app_names = [
|
||||||
|
'git-ssh',
|
||||||
|
'awscli@1',
|
||||||
|
'bash'
|
||||||
|
]
|
||||||
|
|
||||||
|
def test_valid_package_names(self):
|
||||||
|
for name in self.brew_app_names:
|
||||||
|
self.assertTrue(Homebrew.valid_package(name))
|
|
@ -0,0 +1,21 @@
|
||||||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function)
|
||||||
|
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
from ansible_collections.community.general.tests.unit.compat import unittest
|
||||||
|
from ansible_collections.community.general.plugins.modules.packaging.os.homebrew_cask import HomebrewCask
|
||||||
|
|
||||||
|
|
||||||
|
class TestHomebrewCaskModule(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.brew_cask_names = [
|
||||||
|
'visual-studio-code',
|
||||||
|
'firefox'
|
||||||
|
]
|
||||||
|
|
||||||
|
def test_valid_cask_names(self):
|
||||||
|
for name in self.brew_cask_names:
|
||||||
|
self.assertTrue(HomebrewCask.valid_cask(name))
|
Loading…
Reference in a new issue