You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Move implicit config from storage to pair and add conflict resolution
Use conflict_resolution parameter to determine behavior when both
'create' and 'delete' are specified in implicit.
When collection exists in A but not B:
- 'a wins': create in B, delete from A
- 'b wins': create in A, delete from B
- No resolution: raise clear error
This resolves the ambiguity issue raised in PR pimutils#869 by using the
existing conflict_resolution mechanism to make the behavior predictable
and controllable.
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+
## Project Overview
6
+
7
+
vdirsyncer is a command-line tool for synchronizing calendars and addressbooks between various servers and the local filesystem. It's essentially "OfflineIMAP for calendars and contacts" - syncing CalDAV and CardDAV servers with local vdir directories.
8
+
9
+
## Development Commands
10
+
11
+
### Setup and Installation
12
+
```bash
13
+
make install-dev # Install in development mode with test dependencies
14
+
```
15
+
16
+
### Testing
17
+
```bash
18
+
make test# Run all tests
19
+
make style # Check code style with flake8
20
+
make test-storage # Run only storage tests
21
+
make test-unit # Run only unit tests
22
+
make test-system # Run only system tests
23
+
24
+
# Test against specific DAV servers:
25
+
make DAV_SERVER=radicale test
26
+
make DAV_SERVER=xandikos test
27
+
make DAV_SERVER=baikal test
28
+
make DAV_SERVER=davical test
29
+
make DAV_SERVER=fastmail test
30
+
make DAV_SERVER=icloud test
31
+
32
+
# Run specific test file:
33
+
pytest tests/unit/sync/test_sync.py
34
+
pytest tests/unit/sync/test_sync.py::test_name
35
+
```
36
+
37
+
### Documentation
38
+
```bash
39
+
make docs # Build documentation
40
+
make install-docs # Install docs dependencies
41
+
```
42
+
43
+
### Release Process
44
+
```bash
45
+
make release # Build and upload release to PyPI
46
+
```
47
+
48
+
## Architecture
49
+
50
+
### Core Components
51
+
52
+
1.**Storage Layer** (`vdirsyncer/storage/`)
53
+
-`base.py`: Abstract base classes defining storage interface
54
+
-`filesystem.py`: Local filesystem storage using vdir format
55
+
-`dav.py`: CalDAV/CardDAV server storage
56
+
-`google.py`: Google Calendar/Contacts storage
57
+
-`http.py`: Read-only HTTP storage
58
+
-`singlefile.py`: Single .ics/.vcf file storage
59
+
-`memory.py`: In-memory storage for testing
60
+
61
+
2.**Sync Engine** (`vdirsyncer/sync/`)
62
+
-`__init__.py`: Core sync algorithm based on OfflineIMAP
63
+
-`status.py`: Tracks sync state between storages
64
+
-`exceptions.py`: Sync-specific exceptions
65
+
66
+
3.**CLI** (`vdirsyncer/cli/`)
67
+
-`config.py`: Configuration file parsing and validation
0 commit comments