diff --git a/renku/core/metadata/repository.py b/renku/core/metadata/repository.py index 1b0e2f3952..5eef30436d 100644 --- a/renku/core/metadata/repository.py +++ b/renku/core/metadata/repository.py @@ -589,6 +589,9 @@ def _get_user_from_configuration(configuration: "Configuration") -> "Actor": if not email: # pragma: no cover raise errors.GitMissingEmail + name = _sanitize_git_config_value(name) + email = _sanitize_git_config_value(email) + return Actor(name=name, email=email) def get_configuration(self, writable=False, scope: str = None) -> "Configuration": @@ -1376,3 +1379,8 @@ def get_previous_commit_from_submodules() -> Optional[Commit]: if submodules: return get_previous_commit_from_submodules() + + +def _sanitize_git_config_value(value: str) -> str: + """Remove quotation marks and whitespaces surrounding a config value.""" + return value.strip(" \n\t\"'") diff --git a/tests/core/metadata/test_repository.py b/tests/core/metadata/test_repository.py index deeb0ecd35..0cbf02ad19 100644 --- a/tests/core/metadata/test_repository.py +++ b/tests/core/metadata/test_repository.py @@ -227,3 +227,15 @@ def test_hash_directories(git_repository): with pytest.raises(errors.GitCommandError): Repository.hash_object("X") + + +def test_get_user_with_quotation_mark(git_repository): + """Test quotation marks wrapping user/email are ignored.""" + config = git_repository.get_configuration(writable=True) + config.set_value("user", "name", """ ' Renku the Frog' """) + config.set_value("user", "email", """ "renku@renku.ch " """) + + user = git_repository.get_user() + + assert "Renku the Frog" == user.name + assert "renku@renku.ch" == user.email