diff --git a/vdirsyncer/storage/dav.py b/vdirsyncer/storage/dav.py index 21588ad3..e5c4649e 100644 --- a/vdirsyncer/storage/dav.py +++ b/vdirsyncer/storage/dav.py @@ -587,7 +587,16 @@ async def _put(self, href, item, etag): async def update(self, href, item, etag): if etag is None: raise ValueError("etag must be given and must not be None.") - href, etag = await self._put(self._normalize_href(href), item, etag) + try: + href, etag = await self._put(self._normalize_href(href), item, etag) + except aiohttp.ClientResponseError as e: + if e.status == 409: + dav_logger.debug("Conflict, will delete old event and recreate it.") + await self.delete(self._normalize_href(href), None) + dav_logger.debug("Now trying again") + href, etag = await self._put(self._normalize_href(href), item, None) + else: + raise e return etag async def upload(self, item: Item):