repopy
A modular, cross-platform Python CLI workspace manager and developer tooling suite designed to automate reproducible local scaffolding, virtual environment creation, and remote repository synchronization.
🌟 Key Features
-
Lifecycle Project Scaffolding (
repopy init): Provisions clean directory structures, dedicated virtual environments, automated.gitignoretemplates, and PEP 621pyproject.tomlorrequirements.txtconfigs. -
Smart Remote Cloning (
repopy clone): Clones remote Git repositories, creates isolated.venvenvironments, previews declared dependencies, and installs them interactively or via flags. -
Upstream Linking (
repopy link): Instantly connects an unlinked local workspace to a remote Git upstream, staging files, executing initial commits, and pushing to the default branch in one step. -
Architectural Themes: Built-in layout presets (
minimal,web_api,cli_package,data_science) tailored to modern packaging standards. -
Transactional Cleanups: Employs defensive rollback mechanisms (
shutil.rmtree) to safely purge half-baked directories if setup fails midway. -
Isolated & Tested: Fully decoupled architecture backed by comprehensive unit and mock test suites.
🛠️ Architecture & Separation of Concerns
repopy is organized into single-responsibility layers:
-
Presentation & Routing (
cli.py,prompts.py,__main__.py): Evaluates native terminal arguments viaargparse, orchestrates interactive prompt flows, and handles OS interrupts gracefully. -
Supervision (
orchestrators.py): Broker layer executing lifecycle validation checks, branch sequencing, rollback triggers and command handoffs. -
Low-Level Engines (
file_system.py,git_engine.py): Decoupled engines handling transactional directory allocations, venv isolation, dependency installation and direct subprocess execution. -
Validation & Translation (
validators.py,dependencies.py,os_detector.py): Sanitizes names and paths, validates Git URLs, verifies host binaries (python,git), and resolves cross-platform paths.
📥 Installation
Install the latest release from PyPI:
pip install repopy
Alternatively, you can install the latest development version directly from the source:
git clone https://github.com/manatunga/repopy.git
cd repopy
pip install -e .
🚀 Usage Guide
1. Initialize a Project (repopy init)
Generate a new workspace interactively or via CLI flags:
# Interactive setup
repopy init my-app
# Non-interactive generation with a specific theme
repopy init my-api -t web_api -s
# Initialize and immediately connect to a remote repository
repopy init my-cli -t cli_package --link <git-url>
Available Themes:
minimal: Bare directory setup withrequirements.txt.web_api: Layered service layout prepared for modern frameworks.cli_package: Modular structure configured with PEP 621 compliantpyproject.toml.data_science: Notebooks, data directories (raw, processed), and pipeline layout.
2. Clone a Remote Project (repopy clone)
Fetch a remote repository, provision a virtual environment, and manage dependencies:
# Interactive mode (previews requirements.txt and prompts for installation)
repopy clone <git-url>
# Custom directory name
repopy clone <git-url> -n custom-folder-name
# Auto-install dependencies without prompting
repopy clone <git-url> -i
# Fetch and provision environment only (skip dependency installation)
repopy clone <git-url> --no-install
3. Link an Existing Workspace (repopy link)
Run inside an existing workspace to push tracking history to an upstream origin:
# Link with default initial commit message
repopy link <git-url>
# Link with custom commit message
repopy link <git-url> -m "feat: initial project structure"
🧪 Testing & Continuous Integration
Run the test suite using pytest:
pytest -v
🗂️ Project Structure
repopy/
├── .github/
│ └── workflows/
│ └── tests.yml # CI test runner pipeline
├── src/
│ └── repopy/
│ ├── __init__.py # Package initialization
│ ├── __main__.py # Application execution entry
│ ├── cli.py # CLI subparser configuration
│ ├── dependencies.py # Binary prerequisite verification
│ ├── file_system.py # Atomic workspace & venv operations
│ ├── git_engine.py # Subprocess Git execution engine
│ ├── orchestrators.py # High-level pipeline management
│ ├── os_detector.py # Cross-platform environment resolver
│ ├── prompts.py # Dynamic terminal questionnaires
│ ├── templates.py # Static asset definitions & manifests
│ └── validators.py # Input sanitation & regex filters
├── tests/
| ├── __init__.py
│ ├── test_cli.py # CLI argument parser & flag exclusivity tests
│ ├── test_dependencies.py # Binary detection & absence verification tests
│ ├── test_file_system.py # Workspace scaffolding & requirements parsing tests
│ ├── test_git_engine.py # Subprocess Git mocking & exit code tests
│ ├── test_main.py # CLI dispatching & interrupt lifecycle tests
│ ├── test_orchestrators.py # Pipeline logic, prompts, and rollback tests
│ ├── test_os_detector.py # Cross-platform path resolution tests
│ ├── test_prompts.py # Input loop & default manifest tests
│ ├── test_templates.py # PEP 621 generator & asset template tests
│ └── test_validators.py # Path and schema validation tests
├── pyproject.toml # PEP 621 packaging configuration
├── LICENSE # MIT License
└── README.md
📄 License
Distributed under the MIT License. See LICENSE for details.
Release files for repopy 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| repopy-0.3.1.tar.gz | 22.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| repopy-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.2 kB
Release files / repopy-0.3.1.tar.gz
| Download URL | repopy-0.3.1.tar.gz |
|---|---|
| Size | 22.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
61928cda184c45e1df1e5d3fa211a9ab0fc69c3e7eddd3b5b3a25a9d629bb34c
|
|
BLAKE2b-256 checksum How to use checksums |
46730f27e08eb0b2cd652f39fe4a1ad10a76f3f0e001565db861f02288bea2e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / repopy-0.3.1-py3-none-any.whl
| Download URL | repopy-0.3.1-py3-none-any.whl |
|---|---|
| Size | 15.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7367c77c762b6f8247ee37b947c4a0c3bbf49d6d92a8e536329b2279b5c15a8d
|
|
BLAKE2b-256 checksum How to use checksums |
49c969b5b15b986d71cdf5a384079e32fbb5c16d7511214eaad5bc74e8a6ee1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|