From e725df47477df1a1bcf6f046640ec9a024d6480b Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Fri, 4 Mar 2016 14:38:07 +0100 Subject: [PATCH 1/2] metasync: Strip whitespace from values Fix #358 --- tests/test_metasync.py | 17 +++++++++++++++++ vdirsyncer/metasync.py | 13 +++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/tests/test_metasync.py b/tests/test_metasync.py index 522bfdd..5b86972 100644 --- a/tests/test_metasync.py +++ b/tests/test_metasync.py @@ -1,5 +1,8 @@ # -*- coding: utf-8 -*- +from hypothesis import given +import hypothesis.strategies as st + import pytest from vdirsyncer.metasync import MetaSyncConflict, metasync @@ -82,3 +85,17 @@ def test_conflict_x_wins(wins): assert a.get_meta('foo') == b.get_meta('foo') == status['foo'] == ( 'bar' if wins == 'a' else 'baz' ) + + +@given(s=st.text().filter(lambda x: x.strip() == x), key=st.text()) +def test_trailing_newline(s, key): + a = MemoryStorage() + b = MemoryStorage() + status = {} + a.set_meta(key, s + u'\n') + b.set_meta(key, s) + a.set_meta = b.set_meta = blow_up + + metasync(a, b, status, keys=[key]) + + assert status[key] == s diff --git a/vdirsyncer/metasync.py b/vdirsyncer/metasync.py index db7ce74..ae0f3a7 100644 --- a/vdirsyncer/metasync.py +++ b/vdirsyncer/metasync.py @@ -1,4 +1,5 @@ from . import exceptions, log +from .utils.compat import text_type logger = log.get(__name__) @@ -33,8 +34,8 @@ def metasync(storage_a, storage_b, status, keys, conflict_resolution=None): _b_to_a() for key in keys: - a = storage_a.get_meta(key) - b = storage_b.get_meta(key) + a = _normalize_value(storage_a.get_meta(key)) + b = _normalize_value(storage_b.get_meta(key)) s = status.get(key) logger.debug(u'Key: {}'.format(key)) logger.debug(u'A: {}'.format(a)) @@ -52,3 +53,11 @@ def metasync(storage_a, storage_b, status, keys, conflict_resolution=None): for key in set(status) - set(keys): del status[key] + + +def _normalize_value(value): + if value is None: + return value + else: + assert isinstance(value, text_type) + return value.strip() From 52489f471f09bd02e28111e938e73a8272808ef0 Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Fri, 4 Mar 2016 15:04:22 +0100 Subject: [PATCH 2/2] Add changelog --- CHANGELOG.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 9b571a5..ec9193d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,8 @@ Version 0.9.1 - Removed leftover debug print statement in ``vdirsyncer discover``, see commit ``3d856749f37639821b148238ef35f1acba82db36``. +- ``metasync`` will now strip whitespace from the start and the end of the + values. See :gh:`358`. Version 0.9.0 =============