mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-18 00:03:23 +02:00
feat: Add git branch functionality and unit tests
This commit introduces the `git branch` tool to the MCP Git server, allowing users to list branches with various filtering options. Changes include: - Implemented `git_branch` function in `src/git/src/mcp_server_git/server.py` to support listing local, remote, and all branches, as well as filtering by `contains` and `not_contains` SHA values. - Added comprehensive unit tests for the `git branch` functionality in `src/git/tests/test_server.py`, covering different branch types and commit filtering scenarios. - Updated `src/git/README.md`.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
import git
|
||||
from mcp_server_git.server import git_checkout
|
||||
from mcp_server_git.server import git_checkout, git_branch
|
||||
import shutil
|
||||
|
||||
@pytest.fixture
|
||||
@@ -27,4 +27,44 @@ def test_git_checkout_existing_branch(test_repository):
|
||||
def test_git_checkout_nonexistent_branch(test_repository):
|
||||
|
||||
with pytest.raises(git.GitCommandError):
|
||||
git_checkout(test_repository, "nonexistent-branch")
|
||||
git_checkout(test_repository, "nonexistent-branch")
|
||||
|
||||
def test_git_branch_local(test_repository):
|
||||
test_repository.git.branch("new-branch-local")
|
||||
result = git_branch(test_repository, "local")
|
||||
assert "new-branch-local" in result
|
||||
|
||||
def test_git_branch_remote(test_repository):
|
||||
# GitPython does not easily support creating remote branches without a remote.
|
||||
# This test will check the behavior when 'remote' is specified without actual remotes.
|
||||
result = git_branch(test_repository, "remote")
|
||||
assert "" == result.strip() # Should be empty if no remote branches
|
||||
|
||||
def test_git_branch_all(test_repository):
|
||||
test_repository.git.branch("new-branch-all")
|
||||
result = git_branch(test_repository, "all")
|
||||
assert "new-branch-all" in result
|
||||
|
||||
def test_git_branch_contains(test_repository):
|
||||
# Create a new branch and commit to it
|
||||
test_repository.git.checkout("-b", "feature-branch")
|
||||
Path(test_repository.working_dir / Path("feature.txt")).write_text("feature content")
|
||||
test_repository.index.add(["feature.txt"])
|
||||
commit = test_repository.index.commit("feature commit")
|
||||
test_repository.git.checkout("master")
|
||||
|
||||
result = git_branch(test_repository, "local", contains=commit.hexsha)
|
||||
assert "feature-branch" in result
|
||||
assert "master" not in result
|
||||
|
||||
def test_git_branch_not_contains(test_repository):
|
||||
# Create a new branch and commit to it
|
||||
test_repository.git.checkout("-b", "another-feature-branch")
|
||||
Path(test_repository.working_dir / Path("another_feature.txt")).write_text("another feature content")
|
||||
test_repository.index.add(["another_feature.txt"])
|
||||
commit = test_repository.index.commit("another feature commit")
|
||||
test_repository.git.checkout("master")
|
||||
|
||||
result = git_branch(test_repository, "local", not_contains=commit.hexsha)
|
||||
assert "another-feature-branch" not in result
|
||||
assert "master" in result
|
||||
|
||||
Reference in New Issue
Block a user