mirror of
https://github.com/github/spec-kit.git
synced 2026-03-24 14:23:09 +00:00
fix: address all PR review comments for git extension
- Fix bash common.sh sourcing: check .specify/scripts/bash/ first, then scripts/bash/, with explicit error if neither found - Fix PowerShell common.ps1 sourcing: use $fallbackRoot for reliable path resolution, with explicit error if not found - Remove undocumented branch_template and auto_fetch from extension.yml defaults and config-template.yml (scripts don't use them yet) - Remove unused ExtensionError import in _install_bundled_git_extension - Remove undocumented SPECKIT_GIT_BRANCH_NUMBERING env var from README - Fix specify.md: skip step 2 when before_specify hook already executed - Fix specify.md: add explicit FEATURE_DIR/SPEC_FILE in disabled-git path - Fix specify.md: add PowerShell path to script resolution - Add tests for git extension auto-install during specify init Co-authored-by: mnriem <15701806+mnriem@users.noreply.github.com> Agent-Logs-Url: https://github.com/github/spec-kit/sessions/008835a0-7778-40bb-bdb2-4182b22be315
This commit is contained in:
committed by
GitHub
parent
312c37be25
commit
5e49ec6936
@@ -87,3 +87,54 @@ class TestBranchNumberingValidation:
|
||||
result = runner.invoke(app, ["init", str(tmp_path / "proj"), "--ai", "claude", "--branch-numbering", "timestamp", "--ignore-agent-tools"])
|
||||
assert result.exit_code == 0
|
||||
assert "Invalid --branch-numbering" not in (result.output or "")
|
||||
|
||||
|
||||
class TestGitExtensionAutoInstall:
|
||||
"""Tests for bundled git extension auto-install during specify init."""
|
||||
|
||||
def test_git_extension_installed_during_init(self, tmp_path: Path, monkeypatch):
|
||||
"""verify that `specify init` auto-installs the bundled git extension."""
|
||||
from typer.testing import CliRunner
|
||||
from specify_cli import app
|
||||
|
||||
def _fake_download(project_path, *args, **kwargs):
|
||||
Path(project_path).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
monkeypatch.setattr("specify_cli.download_and_extract_template", _fake_download)
|
||||
|
||||
project_dir = tmp_path / "proj"
|
||||
runner = CliRunner()
|
||||
result = runner.invoke(app, ["init", str(project_dir), "--ai", "claude", "--ignore-agent-tools"])
|
||||
assert result.exit_code == 0
|
||||
|
||||
# Extension files should exist
|
||||
ext_dir = project_dir / ".specify" / "extensions" / "git"
|
||||
assert ext_dir.is_dir(), "git extension directory not created"
|
||||
assert (ext_dir / "extension.yml").is_file(), "extension.yml not installed"
|
||||
|
||||
# Registry should contain the git extension
|
||||
registry_file = project_dir / ".specify" / "extensions" / ".registry"
|
||||
assert registry_file.is_file(), "extension registry not created"
|
||||
registry = json.loads(registry_file.read_text())
|
||||
assert "git" in registry.get("extensions", {}), "git not in registry"
|
||||
assert registry["extensions"]["git"]["enabled"] is True
|
||||
|
||||
def test_git_extension_noop_when_already_installed(self, tmp_path: Path):
|
||||
"""_install_bundled_git_extension should no-op if git is already installed."""
|
||||
from specify_cli import _install_bundled_git_extension
|
||||
from specify_cli.extensions import ExtensionManager
|
||||
|
||||
project_dir = tmp_path / "proj"
|
||||
(project_dir / ".specify").mkdir(parents=True)
|
||||
|
||||
# First install
|
||||
result1 = _install_bundled_git_extension(project_dir)
|
||||
assert result1 is True
|
||||
|
||||
# Second install should also succeed (no-op)
|
||||
result2 = _install_bundled_git_extension(project_dir)
|
||||
assert result2 is True
|
||||
|
||||
# Only one entry in registry
|
||||
manager = ExtensionManager(project_dir)
|
||||
assert manager.registry.is_installed("git")
|
||||
|
||||
Reference in New Issue
Block a user