dotz 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,175 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ > **Note**: This project was renamed from "dotkeep" to "dotz" starting with version 0.4.0.
9
+ > Historical entries below may reference the old "dotkeep" command name.
10
+
11
+ ## [Unreleased]
12
+
13
+ - **BREAKING**: Project renamed from "dotkeep" to "dotz"
14
+ - Command changed from `dotkeep` to `dotz`
15
+ - Configuration directory changed from `~/.dotkeep` to `~/.dotz`
16
+ - Package name changed from `dotkeepctl` to `dotz`
17
+
18
+ - Future features will be listed here
19
+
20
+ ## [0.3.0] - 2025-07-05
21
+
22
+ ### Professional release with comprehensive improvements and modern packaging
23
+
24
+ ### Added
25
+
26
+ - Comprehensive test suite with 73+ passing tests
27
+ - Environment isolation for robust testing
28
+ - Configuration management system with `dotkeep config` commands
29
+ - File pattern customization (include/exclude patterns)
30
+ - Search settings configuration (recursive, case-sensitive, follow-symlinks)
31
+ - Improved error handling and diagnostics
32
+ - Modern Python packaging with `pyproject.toml`
33
+ - GitHub Actions CI/CD pipeline
34
+ - Professional documentation (CONTRIBUTING.md, PUBLISHING.md)
35
+ - Development tooling (Makefile, setup-dev.sh)
36
+
37
+ ### Changed
38
+
39
+ - Refactored path management for better testability
40
+ - Updated license field in pyproject.toml to modern SPDX string format
41
+ - Enhanced fixtures for test isolation
42
+ - Improved documentation with configuration examples
43
+ - Professional CLI output (removed unprofessional emojis, kept ✓ marks)
44
+ - Complete rewrite for robustness and maintainability
45
+
46
+ ### Fixed
47
+
48
+ - Test pollution issues between test runs
49
+ - Path resolution in different environments
50
+ - Configuration persistence and cleanup
51
+
52
+ ## [0.2.0] - 2025-07-05
53
+
54
+ ### Highlights
55
+
56
+ #### **Recursive Directory Support**
57
+
58
+ - Add all dotfiles in a directory and its subdirectories with `dotkeep add <dir>`
59
+ - Use `--no-recursive` to restrict to top-level dotfiles only
60
+
61
+ #### **Tracked Directories & Watcher**
62
+
63
+ - Only explicitly added directories are monitored for new dotfiles
64
+ - `dotkeep watch` automatically adds new dotfiles created in tracked directories
65
+
66
+ #### **Diagnostics**
67
+
68
+ - New `dotkeep diagnose` command checks for common setup and git issues, providing actionable guidance
69
+
70
+ #### **Enhanced Git Integration**
71
+
72
+ - Improved error messages for common git issues (e.g., divergent branches, missing upstream, rejected pushes)
73
+ - Upstream branch is set automatically on first push if needed
74
+
75
+ #### **Improved CLI Experience**
76
+
77
+ - `--quiet` flag suppresses output for scripting and automation
78
+ - `--push` flag available for `add`, `delete`, and `restore` to immediately push changes
79
+ - `dotkeep version` displays the current version
80
+ - `dotkeep --install-completion` enables shell tab-completion for all commands and options
81
+
82
+ #### **Commit Efficiency**
83
+
84
+ - Adding multiple dotfiles in a directory now results in a single commit, improving repository clarity
85
+
86
+ ### Improvements & Fixes
87
+
88
+ - Robust handling of symlinks and prevention of watcher loops
89
+ - Tracked directories are automatically removed from tracking when all dotfiles inside are deleted
90
+ - Consistent, user-friendly CLI output
91
+ - Expanded and improved test suite for CLI and core logic
92
+
93
+ ### Requirements
94
+
95
+ - Python 3.8+
96
+ - Git
97
+
98
+ ### Installation
99
+
100
+ ```bash
101
+ git clone https://github.com/tTrmc/dotkeep.git
102
+ cd dotkeep
103
+ pip install -e .
104
+ ```
105
+
106
+ ### Getting Started
107
+
108
+ ```bash
109
+ dotkeep init
110
+ dotkeep add .bashrc
111
+ dotkeep status
112
+ dotkeep push
113
+ ```
114
+
115
+ See the README for full usage instructions and advanced features.
116
+
117
+ ## [0.1.0] - First Public Release
118
+
119
+ ### dotkeep is a minimal, Git-backed dotfiles manager for Linux
120
+
121
+ This is the first public release.
122
+
123
+ ### Features
124
+
125
+ - **Easy setup:**
126
+ Initialize your dotfiles repo with `dotkeep init`.
127
+ The Git repository is stored in `~/.dotkeep/repo`.
128
+
129
+ - **Git-based versioning:**
130
+ All changes are tracked with Git.
131
+ Supports local history, branching, and remote sync.
132
+
133
+ - **Add and remove dotfiles:**
134
+ - `dotkeep add <file>`: Copies a file into the repo, commits it, and symlinks it from your home directory.
135
+ - `dotkeep delete <file>`: Removes the symlink and the file from the repo and Git.
136
+
137
+ - **Symlink management:**
138
+ Automatically replaces managed files in `$HOME` with symlinks to the repo.
139
+
140
+ - **Status overview:**
141
+ `dotkeep status` shows untracked, modified, and staged files in your dotkeep repo.
142
+
143
+ - **Remote sync:**
144
+ - `dotkeep push`: Push all local commits to your remote.
145
+ - `dotkeep pull`: Pull and merge changes from your remote.
146
+
147
+ - **Restore files:**
148
+ `dotkeep restore <file>`: Re-create the symlink for a managed file if it's missing.
149
+
150
+ - **List tracked files:**
151
+ `dotkeep list-files`: See all files currently managed by dotkeep.
152
+
153
+ ### Requirements (v0.1.0)
154
+
155
+ - Python 3.8+
156
+ - Git
157
+
158
+ ### Installation (v0.1.0)
159
+
160
+ ```bash
161
+ git clone https://github.com/tTrmc/dotkeep.git
162
+ cd dotkeep
163
+ pip install -e .
164
+ ```
165
+
166
+ ### Getting Started (v0.1.0)
167
+
168
+ ```bash
169
+ dotkeep init
170
+ dotkeep add .bashrc
171
+ dotkeep status
172
+ dotkeep push
173
+ ```
174
+
175
+ See the README for full usage instructions.
@@ -0,0 +1,363 @@
1
+ # Contributing to dotz
2
+
3
+ Thank you for your interest in contributing to dotz! I welcome all pull requests, bug reports, and feature suggestions.
4
+
5
+ ## Table of Contents
6
+
7
+ * [Getting Started](#getting-started)
8
+ * [Development Setup](#development-setup)
9
+ * [Development Tools](#development-tools)
10
+ * [Code Style](#code-style)
11
+ * [Testing](#testing)
12
+ * [Commit Guidelines](#commit-guidelines)
13
+ * [Pull Requests](#pull-requests)
14
+ * [Reporting Issues](#reporting-issues)
15
+ * [Feature Requests](#feature-requests)
16
+
17
+ ## Getting Started
18
+
19
+ 1. **Fork the repository** on GitHub
20
+ 2. **Clone your fork** locally:
21
+
22
+ ```bash
23
+ git clone https://github.com/yourusername/dotz.git
24
+ cd dotz
25
+ ```
26
+
27
+ 3. **Set up the development environment**:
28
+
29
+ ```bash
30
+ ./setup-dev.sh # This sets up virtual environment and installs dependencies
31
+ ```
32
+
33
+ Or manually:
34
+
35
+ ```bash
36
+ python -m venv .venv
37
+ source .venv/bin/activate # On Windows: .venv\Scripts\activate
38
+ pip install -e ".[dev,test]"
39
+ ```
40
+
41
+ 4. **Create a new branch** for your changes:
42
+
43
+ ```bash
44
+ git checkout -b feature/my-new-feature
45
+ ```
46
+
47
+ 5. **Make your changes** locally in this new branch
48
+ 6. **Test your changes** thoroughly
49
+ 7. **Submit a pull request**
50
+
51
+ ## Development Setup
52
+
53
+ ### Prerequisites
54
+
55
+ * Python 3.9 or newer
56
+ * Git
57
+ * Virtual environment (recommended)
58
+
59
+ ### Quick Setup
60
+
61
+ ```bash
62
+ git clone https://github.com/yourusername/dotz.git
63
+ cd dotz
64
+ ./setup-dev.sh
65
+ ```
66
+
67
+ This will:
68
+
69
+ * Create a virtual environment
70
+ * Install development dependencies
71
+ * Set up pre-commit hooks (if available)
72
+ * Run initial tests to verify setup
73
+
74
+ ## Development Tools
75
+
76
+ This project uses modern Python development tools:
77
+
78
+ * **pytest**: Testing framework with comprehensive coverage
79
+ * **black**: Code formatting for consistent style
80
+ * **isort**: Import sorting and organization
81
+ * **flake8**: Linting for code quality
82
+ * **mypy**: Static type checking
83
+ * **GitHub Actions**: Automated CI/CD pipeline
84
+
85
+ ### Running Development Commands
86
+
87
+ ```bash
88
+ make help # Show all available commands
89
+ make test # Run the complete test suite
90
+ make lint # Check code style and quality
91
+ make format # Auto-format code with black and isort
92
+ make type-check # Run mypy type checking
93
+ make build # Build distribution packages
94
+ make clean # Clean build artifacts
95
+ ```
96
+
97
+ Run all quality checks:
98
+
99
+ ```bash
100
+ make test lint type-check
101
+ ```
102
+
103
+ ## Code Style
104
+
105
+ ### Python Code Guidelines
106
+
107
+ * Follow [PEP 8](https://peps.python.org/pep-0008/) guidelines
108
+ * Use type hints for function parameters and return values
109
+ * Write docstrings for public functions and classes
110
+ * Keep functions focused and reasonably sized
111
+ * Use descriptive variable and function names
112
+
113
+ ### Formatting
114
+
115
+ Code is automatically formatted using **black** and **isort**:
116
+
117
+ ```bash
118
+ make format # Auto-format all code
119
+ ```
120
+
121
+ ### Import Organization
122
+
123
+ * Standard library imports first
124
+ * Third-party imports second
125
+ * Local/project imports last
126
+ * Use absolute imports when possible
127
+
128
+ Example:
129
+
130
+ ```python
131
+ import os
132
+ import sys
133
+ from pathlib import Path
134
+
135
+ import typer
136
+ from git import Repo
137
+
138
+ from dotz.core import DotzCore
139
+ ```
140
+
141
+ ## Testing
142
+
143
+ ### Running Tests
144
+
145
+ ```bash
146
+ # Run all tests
147
+ pytest
148
+
149
+ # Run with verbose output
150
+ pytest -v
151
+
152
+ # Run with coverage report
153
+ pytest --cov=dotz
154
+
155
+ # Run specific test file
156
+ pytest tests/test_core.py
157
+
158
+ # Run specific test
159
+ pytest tests/test_core.py::test_init_repo
160
+ ```
161
+
162
+ ### Writing Tests
163
+
164
+ When adding new features or fixing bugs:
165
+
166
+ * **Add tests** for new functionality
167
+ * **Follow existing patterns** in the test suite
168
+ * **Use descriptive test names** that explain what is being tested
169
+ * **Test both success and failure scenarios**
170
+ * **Ensure tests are isolated** and don't depend on external state
171
+ * **Mock external dependencies** when appropriate
172
+
173
+ Test file structure:
174
+
175
+ ```python
176
+ import pytest
177
+ from unittest.mock import Mock, patch
178
+
179
+ from dotz.core import DotzCore
180
+
181
+
182
+ class TestFeatureName:
183
+ def test_successful_operation(self):
184
+ # Test the happy path
185
+ pass
186
+
187
+ def test_handles_error_condition(self):
188
+ # Test error handling
189
+ pass
190
+ ```
191
+
192
+ ### Test Environment
193
+
194
+ * Tests run in isolated temporary directories
195
+ * No interference with your actual dotz configuration
196
+ * Automatic cleanup after test completion
197
+
198
+ ## Commit Guidelines
199
+
200
+ ### Commit Message Format
201
+
202
+ Use clear, descriptive commit messages:
203
+
204
+ * **Use imperative mood**: "Add feature" not "Added feature"
205
+ * **Be specific**: Explain what changed and why
206
+ * **Keep first line under 72 characters**
207
+ * **Add detail in body if needed**
208
+
209
+ Good examples:
210
+
211
+ ```text
212
+ Add support for encrypted backup storage
213
+
214
+ Fix symlink validation for broken links
215
+
216
+ Update documentation for new config options
217
+
218
+ Refactor file pattern matching for better performance
219
+ ```
220
+
221
+ ### Commit Organization
222
+
223
+ * **One logical change per commit**
224
+ * **Group related changes together**
225
+ * **Separate formatting changes from logic changes**
226
+ * **Include tests with the feature they test**
227
+
228
+ ## Pull Requests
229
+
230
+ ### Before Submitting
231
+
232
+ 1. **Ensure all tests pass**:
233
+
234
+ ```bash
235
+ make test
236
+ ```
237
+
238
+ 2. **Check code quality**:
239
+
240
+ ```bash
241
+ make lint
242
+ ```
243
+
244
+ 3. **Format your code**:
245
+
246
+ ```bash
247
+ make format
248
+ ```
249
+
250
+ 4. **Update documentation** if needed
251
+
252
+ ### Submitting Your PR
253
+
254
+ 1. **Push your branch** to your fork:
255
+
256
+ ```bash
257
+ git push -u origin feature/my-new-feature
258
+ ```
259
+
260
+ 2. **Open a pull request** on GitHub with:
261
+
262
+ * Clear description of changes
263
+ * Link to related issues (if any)
264
+ * Screenshots or examples (if relevant)
265
+ * Testing instructions (if needed)
266
+
267
+ ### PR Review Process
268
+
269
+ * I'll review PRs as soon as possible
270
+ * May request changes or ask questions
271
+ * Once approved, I'll merge the changes
272
+ * Your contribution will be acknowledged
273
+
274
+ ## Reporting Issues
275
+
276
+ ### Bug Reports
277
+
278
+ When reporting bugs, please include:
279
+
280
+ * **Clear description** of the problem
281
+ * **Steps to reproduce** the issue
282
+ * **Expected vs actual behavior**
283
+ * **Environment information**:
284
+ * Operating system and version
285
+ * Python version (`python --version`)
286
+ * dotz version (`dotz version`)
287
+ * Relevant configuration details
288
+ * **Error messages or logs** (if any)
289
+ * **Additional context** that might be helpful
290
+
291
+ ### Issue Templates
292
+
293
+ Use the provided issue templates when available:
294
+
295
+ * **Bug Report**: For reporting problems
296
+ * **Feature Request**: For suggesting new features
297
+ * **Documentation**: For documentation improvements
298
+
299
+ ## Feature Requests
300
+
301
+ When suggesting new features:
302
+
303
+ * **Describe the use case**: What problem does this solve?
304
+ * **Provide examples**: How would you use this feature?
305
+ * **Consider alternatives**: Are there existing ways to achieve this?
306
+ * **Think about implementation**: Any ideas on how it could work?
307
+
308
+ ### Feature Discussion
309
+
310
+ * Features are discussed in GitHub issues
311
+ * Community input is welcome
312
+ * Implementation complexity is considered
313
+ * Backward compatibility is important
314
+
315
+ ## Development Guidelines
316
+
317
+ ### Project Goals
318
+
319
+ Keep these principles in mind:
320
+
321
+ * **Simplicity**: dotz should be easy to use and understand
322
+ * **Reliability**: Robust error handling and comprehensive testing
323
+ * **Performance**: Efficient operations, especially for large configurations
324
+ * **Compatibility**: Support for different Linux distributions and Python versions
325
+ * **Security**: Safe handling of sensitive configuration files
326
+
327
+ ### Code Organization
328
+
329
+ * **Keep modules focused**: Each module should have a clear purpose
330
+ * **Minimize dependencies**: Only add dependencies when necessary
331
+ * **Document interfaces**: Clear function and class documentation
332
+ * **Handle errors gracefully**: Provide helpful error messages
333
+
334
+ ## Getting Help
335
+
336
+ ### Resources
337
+
338
+ * **README.md**: Project overview and basic usage
339
+ * **Issues**: Search existing issues for similar problems
340
+ * **Code**: Read the source code for implementation details
341
+ * **Tests**: Look at tests for usage examples
342
+
343
+ ### Communication
344
+
345
+ * **GitHub Issues**: Primary communication channel
346
+ * **Pull Request discussions**: For code-specific questions
347
+ * **Email**: For security issues only (see SECURITY.md)
348
+
349
+ ### Response Times
350
+
351
+ * I aim to respond to issues and PRs within a few days
352
+ * Complex changes may take longer to review
353
+ * Feel free to ping if you haven't heard back in a week
354
+
355
+ ## Recognition
356
+
357
+ Contributors are acknowledged in:
358
+
359
+ * **README.md acknowledgments section**
360
+ * **Git commit history**
361
+ * **Release notes** (for significant contributions)
362
+
363
+ Thank you for helping make dotz better!