diff --git a/CONDUCT.md b/CONDUCT.md new file mode 100644 index 000000000000..fc14ecd4f465 --- /dev/null +++ b/CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at conduct@saltstack.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/salt/modules/aptpkg.py b/salt/modules/aptpkg.py index aeac0807b954..4fc07e9cb201 100644 --- a/salt/modules/aptpkg.py +++ b/salt/modules/aptpkg.py @@ -371,9 +371,9 @@ def refresh_db(): # Strip filesize from end of line ident = re.sub(r' \[.+B\]$', '', ident) ret[ident] = True - elif cols[0] == 'Ign': + elif 'Ign' in cols[0]: ret[ident] = False - elif cols[0] == 'Hit': + elif 'Hit' in cols[0]: ret[ident] = None return ret diff --git a/salt/states/postgres_extension.py b/salt/states/postgres_extension.py index 16bfb55f96f7..22ba34c911fe 100644 --- a/salt/states/postgres_extension.py +++ b/salt/states/postgres_extension.py @@ -51,13 +51,13 @@ def present(name, The name of the extension to manage if_not_exists - Add a if_not_exists switch to the ddl statement + Add an `IF NOT EXISTS` parameter to the DDL statement schema Schema to install the extension into ext_version - version to install + Version to install from_version Old extension version if already installed @@ -69,10 +69,10 @@ def present(name, Database to act on db_user - database username if different from config or default + Database username if different from config or default db_password - user password if any password for a specified user + User password if any password for a specified user db_host Database host if different from config or default @@ -87,10 +87,10 @@ def present(name, db_args = { 'maintenance_db': maintenance_db, 'runas': user, - 'host': db_host, 'user': db_user, - 'port': db_port, 'password': db_password, + 'host': db_host, + 'port': db_port, } # check if extension exists mode = 'create' @@ -134,11 +134,11 @@ def present(name, else: suffix = 'ed' ret['comment'] = 'The extension {0} has been {1}{2}'.format(name, mode, suffix) + ret['changes'][name] = '{0}{1}'.format(mode.capitalize(), suffix) elif cret is not None: ret['comment'] = 'Failed to {1} extension {0}'.format(name, mode) ret['result'] = False - else: - ret['result'] = True + return ret diff --git a/salt/utils/gitfs.py b/salt/utils/gitfs.py index e022472ef23b..6db58352e351 100644 --- a/salt/utils/gitfs.py +++ b/salt/utils/gitfs.py @@ -874,6 +874,9 @@ def find_file(self, path, tgt_env): path = salt.utils.path_join(os.path.dirname(path), link_tgt) else: blob = file_blob + if isinstance(blob, git.Tree): + # Path is a directory, not a file. + blob = None break except KeyError: # File not found or repo_path points to a directory @@ -1417,6 +1420,9 @@ def find_file(self, path, tgt_env): else: oid = tree[path].oid blob = self.repo[oid] + if isinstance(blob, pygit2.Tree): + # Path is a directory, not a file. + blob = None break except KeyError: blob = None @@ -1792,6 +1798,9 @@ def find_file(self, path, tgt_env): path = salt.utils.path_join(os.path.dirname(path), link_tgt) else: blob = self.repo.get_object(oid) + if isinstance(blob, dulwich.objects.Tree): + # Path is a directory, not a file. + blob = None break except KeyError: blob = None diff --git a/tests/unit/states/postgres_test.py b/tests/unit/states/postgres_test.py index 1c327d96fca9..0ffc186378e1 100644 --- a/tests/unit/states/postgres_test.py +++ b/tests/unit/states/postgres_test.py @@ -370,7 +370,7 @@ def test_present(self): self.assertEqual( ret, {'comment': 'The extension foo has been installed', - 'changes': {}, 'name': 'foo', 'result': True} + 'changes': {'foo': 'Installed'}, 'name': 'foo', 'result': True} ) ret = postgres_extension.present('foo') self.assertEqual( @@ -382,7 +382,7 @@ def test_present(self): self.assertEqual( ret, {'comment': 'The extension foo has been upgraded', - 'changes': {}, 'name': 'foo', 'result': True} + 'changes': {'foo': 'Upgraded'}, 'name': 'foo', 'result': True} ) @patch.dict(OPTS, {'test': True}) diff --git a/tests/unit/utils/schema_test.py b/tests/unit/utils/schema_test.py index 81ce5c6e511c..73db06d7fd23 100644 --- a/tests/unit/utils/schema_test.py +++ b/tests/unit/utils/schema_test.py @@ -6,6 +6,8 @@ # Import python libs from __future__ import absolute_import +from distutils.version import LooseVersion + # Import Salt Testing Libs from salttesting import TestCase, skipIf from salttesting.helpers import ensure_in_syspath @@ -20,7 +22,9 @@ import jsonschema import jsonschema.exceptions HAS_JSONSCHEMA = True + JSONSCHEMA_VERSION = jsonschema.__version__ except ImportError: + JSONSCHEMA_VERSION = '' HAS_JSONSCHEMA = False @@ -746,6 +750,7 @@ def test_ipv4_config(self): ) @skipIf(HAS_JSONSCHEMA is False, 'The \'jsonschema\' library is missing') + @skipIf(HAS_JSONSCHEMA and LooseVersion(jsonschema.__version__) <= LooseVersion('2.5.0'), 'Requires jsonschema 2.5.0 or greater') def test_ipv4_config_validation(self): class TestConf(schema.Schema): item = schema.IPv4Item(title='Item', description='Item description')