diff --git a/README.md b/README.md index 6f118bf..23a692c 100644 --- a/README.md +++ b/README.md @@ -24,5 +24,4 @@ pipx install git-draft[openai] * Mechanism for reporting feedback from a bot, and possibly allowing user to interactively respond. * Support file rename tool. - * https://stackoverflow.com/q/49853177/1062617 - * https://stackoverflow.com/q/6658313/1062617 +* Add MCP bot. diff --git a/docs/git-draft.adoc b/docs/git-draft.adoc index d32f545..a30d8e3 100644 --- a/docs/git-draft.adoc +++ b/docs/git-draft.adoc @@ -18,7 +18,9 @@ IMPORTANT: `git-draft` is WIP. == Synopsis [verse] -git draft [options] [--generate] [--accept... | no-accept] [--bot BOT] [--edit] [--reset | --no-reset] [--sync | --no-sync] [TEMPLATE [VARIABLE...]] +git draft [options] [--generate] [--accept... | --no-accept] [--bot BOT] + [--edit] [--reset | --no-reset] [--sync | --no-sync] + [TEMPLATE [VARIABLE...]] git draft [options] --finalize [--delete] [--sync | --no-sync] git draft [options] --show-drafts [--json] git draft [options] --show-prompts [--json] [PROMPT] @@ -96,6 +98,7 @@ git draft [options] --show-templates [--json | [--edit] TEMPLATE] -s:: --sync:: +--no-sync:: Create a sync commit with any changes. -t TIMEOUT:: diff --git a/src/git_draft/__main__.py b/src/git_draft/__main__.py index cf7ee8d..9acfb50 100644 --- a/src/git_draft/__main__.py +++ b/src/git_draft/__main__.py @@ -215,7 +215,7 @@ def main() -> None: # noqa: PLR0912 PLR0915 prompt = sys.stdin.read() accept = Accept(opts.accept or 0) - name = drafter.generate_draft( + draft = drafter.generate_draft( prompt, bot, accept=accept, @@ -225,13 +225,13 @@ def main() -> None: # noqa: PLR0912 PLR0915 reset=config.reset if opts.reset is None else opts.reset, sync=config.sync if opts.sync is None else opts.sync, ) - print(f"Generated change in {name}.") + print(f"Generated change in {draft.branch_name}.") case "finalize": - name = drafter.finalize_draft( + draft = drafter.finalize_draft( delete=opts.delete, sync=config.sync if opts.sync is None else opts.sync, ) - print(f"Finalized {name}.") + print(f"Finalized {draft.branch_name}.") case "show-drafts": table = drafter.history_table(args[0] if args else None) if table: diff --git a/src/git_draft/drafter.py b/src/git_draft/drafter.py index a2c1f79..314506c 100644 --- a/src/git_draft/drafter.py +++ b/src/git_draft/drafter.py @@ -36,6 +36,13 @@ class Accept(enum.Enum): NO_REGRETS = enum.auto() +@dataclasses.dataclass(frozen=True) +class Draft: + """Collection of generated changes""" + + branch_name: str + + @dataclasses.dataclass(frozen=True) class _Branch: """Draft branch""" @@ -94,7 +101,7 @@ def generate_draft( # noqa: PLR0913 sync: bool = False, timeout: float | None = None, tool_visitors: Sequence[ToolVisitor] | None = None, - ) -> str: + ) -> Draft: if timeout is not None: raise NotImplementedError() # TODO: Implement @@ -165,7 +172,7 @@ def generate_draft( # noqa: PLR0913 delta.apply() if accept.value >= Accept.FINALIZE.value: self.finalize_draft(delete=accept == Accept.NO_REGRETS, sync=sync) - return str(branch) + return Draft(str(branch)) def _prepare_prompt( self, @@ -214,7 +221,7 @@ def _generate_change( def finalize_draft( self, *, delete: bool = False, sync: bool = False - ) -> str: + ) -> Draft: branch = _Branch.active(self._repo) if not branch: raise RuntimeError("Not currently on a draft branch") @@ -240,7 +247,7 @@ def finalize_draft( _logger.debug("Deleted branch %s.", branch) _logger.info("Exited %s.", branch) - return branch.name + return Draft(branch.name) def _create_branch(self, sync: bool) -> _Branch: if self._repo.head.is_detached: diff --git a/tests/git_draft/drafter_test.py b/tests/git_draft/drafter_test.py index d3c52f7..7377a83 100644 --- a/tests/git_draft/drafter_test.py +++ b/tests/git_draft/drafter_test.py @@ -200,7 +200,7 @@ def test_finalize_keeps_changes(self) -> None: assert self._read("PROMPT") == "hello" def test_finalize_and_sync(self) -> None: - branch = self._drafter.generate_draft( + draft = self._drafter.generate_draft( "hello", _SimpleBot.prompt(), accept=sut.Accept.CHECKOUT, @@ -208,7 +208,7 @@ def test_finalize_and_sync(self) -> None: self._write("PROMPT", "a2") self._drafter.finalize_draft(sync=True) assert self._read("PROMPT") == "a2" - commits = self._commits(branch) + commits = self._commits(draft.branch_name) assert len(commits) == 3 # init, prompt, sync assert "sync" in commits[0].message