Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package git-town for openSUSE:Factory checked in at 2026-06-22 17:35:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/git-town (Old) and /work/SRC/openSUSE:Factory/.git-town.new.1956 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "git-town" Mon Jun 22 17:35:30 2026 rev:18 rq:1360863 version:23.0.3 Changes: -------- --- /work/SRC/openSUSE:Factory/git-town/git-town.changes 2026-06-08 14:27:16.469921085 +0200 +++ /work/SRC/openSUSE:Factory/.git-town.new.1956/git-town.changes 2026-06-22 17:35:44.134987275 +0200 @@ -1,0 +2,9 @@ +Sun Jun 21 16:28:31 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 23.0.3: + * Bug Fixes + - git town continue now works with faulty Git pre-commit hooks + (#6242). + - git town ship now works from a Git worktree (#6237). + +------------------------------------------------------------------- Old: ---- git-town-23.0.2.obscpio New: ---- git-town-23.0.3.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ git-town.spec ++++++ --- /var/tmp/diff_new_pack.DI9aRG/_old 2026-06-22 17:35:46.199059911 +0200 +++ /var/tmp/diff_new_pack.DI9aRG/_new 2026-06-22 17:35:46.203060052 +0200 @@ -17,7 +17,7 @@ Name: git-town -Version: 23.0.2 +Version: 23.0.3 Release: 0 Summary: Git branches made easy License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.DI9aRG/_old 2026-06-22 17:35:46.235061178 +0200 +++ /var/tmp/diff_new_pack.DI9aRG/_new 2026-06-22 17:35:46.239061319 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/git-town/git-town.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">refs/tags/v23.0.2</param> + <param name="revision">refs/tags/v23.0.3</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.DI9aRG/_old 2026-06-22 17:35:46.279062727 +0200 +++ /var/tmp/diff_new_pack.DI9aRG/_new 2026-06-22 17:35:46.283062868 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/git-town/git-town.git</param> - <param name="changesrevision">16c982b8b9828afb4a00db4ff61d491fca221782</param></service></servicedata> + <param name="changesrevision">7d8dce35b3a1471a8d081d7837e06d3c9d15b976</param></service></servicedata> (No newline at EOF) ++++++ git-town-23.0.2.obscpio -> git-town-23.0.3.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/CHANGELOG.md new/git-town-23.0.3/CHANGELOG.md --- old/git-town-23.0.2/CHANGELOG.md 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/CHANGELOG.md 2026-06-21 14:45:40.000000000 +0200 @@ -1,5 +1,16 @@ # Git Town Changelog +## 23.0.3 (2026-06-21) + +#### Bug Fixes + +- `git town continue` now works with faulty Git pre-commit hooks ([#6242](https://github.com/git-town/git-town/issues/6242)). +- `git town ship` now works from a Git worktree ([#6237](https://github.com/git-town/git-town/issues/6237)). + +#### Contributors + +Big thanks to @Indemnity83, @OrHayat, @kevgo, @yaadata for contributing code, bug fixes, and ideas to 15 shipped pull requests 3 resolved issues! + ## 23.0.2 (2026-06-06) #### Bug Fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/Makefile new/git-town-23.0.3/Makefile --- old/git-town-23.0.2/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,8 +1,8 @@ -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use # internal data and state .DEFAULT_GOAL := help -RELEASE_VERSION := "23.0.2" +RELEASE_VERSION := "23.0.3" GO_TEST_ARGS = LANG=C GOGC=off RTA = tools/rta@$(RTA_VERSION) @@ -18,6 +18,7 @@ GHOKIN = $(RTA) ghokin GOFUMPT = $(RTA) gofumpt GOLANGCILINT = $(RTA) golangci-lint +KEEPSORTED = $(RTA) keep-sorted LEFTHOOK = $(RTA) lefthook NPM = $(RTA) npm NPX = $(RTA) npx @@ -179,7 +180,7 @@ keep-sorted: ${RTA} @$(RTA) --install ripgrep - @$(RTA) keep-sorted $(shell $(RTA) ripgrep -l --hidden 'keep-sorted end' ./ --glob '!{.git,Makefile}') + @$(KEEPSORTED) $(shell $(RTA) ripgrep -l --hidden 'keep-sorted end' ./ --glob '!{.git,Makefile}') lint-cached-connectors: @(cd tools/lint_cached_connectors && go build) && ./tools/lint_cached_connectors/lint_cached_connectors diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/cucumber-sort.json new/git-town-23.0.3/cucumber-sort.json --- old/git-town-23.0.2/cucumber-sort.json 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/cucumber-sort.json 2026-06-21 14:45:40.000000000 +0200 @@ -33,6 +33,7 @@ "features/sync/all_branches/merge_sync_strategy/conflicts/feature_branch_main_branch_conflict/shipped_changes_conflict_with_existing_feature_branch.feature", "features/sync/all_branches/merge_sync_strategy/conflicts/multiple_conflicting_branches.feature", "features/sync/all_branches/merge_sync_strategy/stack/conflicting_changes.feature", + "features/sync/current_branch/feature_branch/broken_precommit_hook.feature", "features/sync/current_branch/feature_branch/change_repo_in_between/add_stash.feature", "features/sync/current_branch/feature_branch/change_repo_in_between/create_branch.feature", "features/sync/current_branch/feature_branch/compress_sync_strategy/two_collaborators/conflicting_changes_parallel.feature", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/docs/RELEASE.md new/git-town-23.0.3/docs/RELEASE.md --- old/git-town-23.0.2/docs/RELEASE.md 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/docs/RELEASE.md 2026-06-21 14:45:40.000000000 +0200 @@ -12,7 +12,7 @@ the README file - verify that the website content reflects all the changes made - search-and-replace the old version with the new version - - triple-digits: `23.0.2` + - triple-digits: `23.0.3` - double-digits: `23.0` - its best to do this manually so that you don't change unrelated version numbers in CHANGELOG.md, lockfiles, and data files @@ -21,7 +21,7 @@ - update `github.com/git-town/git-town/v23` (without trailing slash) - update the changelog with links to the website - ship the branch -- `git sync --all && git checkout main && git tag v23.0.2 && git push --tags` +- `git sync --all && git checkout main && git tag v23.0.3 && git push --tags` - wait for CI to finish the release: <https://github.com/git-town/git-town/actions> - edit the new unpublished release: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/features/ship/squash_merge/current_branch/verbose/verbose.feature new/git-town-23.0.3/features/ship/squash_merge/current_branch/verbose/verbose.feature --- old/git-town-23.0.2/features/ship/squash_merge/current_branch/verbose/verbose.feature 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/features/ship/squash_merge/current_branch/verbose/verbose.feature 2026-06-21 14:45:40.000000000 +0200 @@ -34,6 +34,7 @@ | | backend | git diff --shortstat main feature -- | | | frontend | git checkout main | | main | frontend | git merge --squash --ff feature | + | | backend | git rev-parse --absolute-git-dir | | | frontend | git commit -m done | | | backend | git rev-parse main | | | backend | git rev-parse --verify -q refs/heads/main | @@ -49,7 +50,7 @@ | | backend | git stash list | And Git Town prints: """ - Ran 32 shell commands. + Ran 33 shell commands. """ Scenario: undo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/features/sync/current_branch/feature_branch/broken_precommit_hook.feature new/git-town-23.0.3/features/sync/current_branch/feature_branch/broken_precommit_hook.feature --- old/git-town-23.0.2/features/sync/current_branch/feature_branch/broken_precommit_hook.feature 1970-01-01 01:00:00.000000000 +0100 +++ new/git-town-23.0.3/features/sync/current_branch/feature_branch/broken_precommit_hook.feature 2026-06-21 14:45:40.000000000 +0200 @@ -0,0 +1,48 @@ +Feature: recover from broken precommit hooks + + Background: + Given a Git repo with origin + And the branches + | NAME | TYPE | PARENT | LOCATIONS | + | feature | feature | main | local, origin | + And the commits + | BRANCH | LOCATION | MESSAGE | FILE NAME | FILE CONTENT | + | feature | local | conflicting local commit | conflicting_file | local content | + | | origin | conflicting origin commit | conflicting_file | origin content | + And the current branch is "feature" + And a pre-commit hook that always fails + And I run "git-town sync" + And Git Town runs the commands + | BRANCH | COMMAND | + | feature | git fetch --prune --tags | + | | git merge --no-edit --ff origin/feature | + And Git Town prints the error: + """ + CONFLICT (add/add): Merge conflict in conflicting_file + """ + And a merge is now in progress + And I resolve the conflict in "conflicting_file" + And I run "git-town continue" + And Git Town prints the error: + """ + Error: exit status 1 + """ + And I run "git commit -m manual --no-verify" + And I run "git-town continue" + + Scenario: result + Then Git Town runs the commands + | BRANCH | COMMAND | + | feature | git push | + And no merge is now in progress + And all branches are now synchronized + + Scenario: undo + When I run "git-town undo" + Then Git Town runs the commands + | BRANCH | COMMAND | + | feature | git reset --hard {{ sha 'conflicting local commit' }} | + | | git push --force-with-lease origin {{ sha-in-origin 'conflicting origin commit' }}:feature | + And no merge is now in progress + And the initial branches and lineage exist now + And the initial commits exist now diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/features/version/version.feature new/git-town-23.0.3/features/version/version.feature --- old/git-town-23.0.2/features/version/version.feature 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/features/version/version.feature 2026-06-21 14:45:40.000000000 +0200 @@ -6,5 +6,5 @@ When I run "git-town --version" Then Git Town prints: """ - Git Town 23.0.2 + Git Town 23.0.3 """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/config/version.go new/git-town-23.0.3/internal/config/version.go --- old/git-town-23.0.2/internal/config/version.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/config/version.go 2026-06-21 14:45:40.000000000 +0200 @@ -1,4 +1,4 @@ package config // GitTownVersion provides the current Git Town version. -const GitTownVersion = "23.0.2" +const GitTownVersion = "23.0.3" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/git/commands.go new/git-town-23.0.3/internal/git/commands.go --- old/git-town-23.0.2/internal/git/commands.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/git/commands.go 2026-06-21 14:45:40.000000000 +0200 @@ -257,8 +257,12 @@ // CommentOutSquashCommitMessage comments out the message for the current squash merge // If the given prefix has content, adds it together with a newline. -func (self *Commands) CommentOutSquashCommitMessage(prefix Option[string]) error { - squashMessageFile := ".git/SQUASH_MSG" +func (self *Commands) CommentOutSquashCommitMessage(querier subshelldomain.Querier, prefix Option[string]) error { + gitDir, err := self.gitDirectory(querier) + if err != nil { + return err + } + squashMessageFile := filepath.Join(gitDir.String(), "SQUASH_MSG") contentBytes, err := os.ReadFile(squashMessageFile) if err != nil { return fmt.Errorf(messages.SquashCannotReadFile, squashMessageFile, err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/git/commands_test.go new/git-town-23.0.3/internal/git/commands_test.go --- old/git-town-23.0.2/internal/git/commands_test.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/git/commands_test.go 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,8 @@ package git_test import ( + "os" + "path/filepath" "testing" "github.com/git-town/git-town/v23/internal/config/configdomain" @@ -910,6 +912,35 @@ must.EqOp(t, initial, currentBranch) }) + t.Run("CommentOutSquashCommitMessage", func(t *testing.T) { + t.Parallel() + t.Run("comments out the squash message in a normal repo", func(t *testing.T) { + t.Parallel() + runtime := testruntime.Create(t) + gitDir := runtime.MustQueryTrim("git", "rev-parse", "--absolute-git-dir").String() + squashMessageFile := filepath.Join(gitDir, "SQUASH_MSG") + asserts.NoError(os.WriteFile(squashMessageFile, []byte("line 1\nline 2\n"), 0o600)) + asserts.NoError(runtime.Git.CommentOutSquashCommitMessage(runtime, None[string]())) + have := string(asserts.NoError1(os.ReadFile(squashMessageFile))) + must.EqOp(t, "# line 1\n# line 2\n# ", have) + }) + t.Run("resolves SQUASH_MSG relative to the per-worktree git dir in a linked worktree", func(t *testing.T) { + t.Parallel() + // In a linked worktree, ".git" is a file pointing at the real git dir, + // so the literal path ".git/SQUASH_MSG" would fail with "not a directory". + origin := testruntime.Create(t) + worktreeDir := t.TempDir() + origin.MustRun("git", "worktree", "add", "-b", "feature", worktreeDir) + linked := testruntime.New(worktreeDir, origin.HomeDir, origin.BinDir) + gitDir := linked.MustQueryTrim("git", "rev-parse", "--absolute-git-dir").String() + squashMessageFile := filepath.Join(gitDir, "SQUASH_MSG") + asserts.NoError(os.WriteFile(squashMessageFile, []byte("body\n"), 0o600)) + asserts.NoError(linked.Git.CommentOutSquashCommitMessage(linked, Some("prefix"))) + have := string(asserts.NoError1(os.ReadFile(squashMessageFile))) + must.EqOp(t, "# prefix\n# body\n# ", have) + }) + }) + t.Run("CommitsInBranch", func(t *testing.T) { t.Parallel() t.Run("feature branch contains commits", func(t *testing.T) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/git/gitdomain/repo_status.go new/git-town-23.0.3/internal/git/gitdomain/repo_status.go --- old/git-town-23.0.2/internal/git/gitdomain/repo_status.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/git/gitdomain/repo_status.go 2026-06-21 14:45:40.000000000 +0200 @@ -6,3 +6,8 @@ RebaseInProgress bool // a rebase is in progress UntrackedChanges bool // the repo contains files that aren't tracked by Git } + +// NeedsToCommit indicates whether the repo contains something to commit. +func (self RepoStatus) NeedsToCommit() bool { + return self.OpenChanges || self.RebaseInProgress || self.Conflicts || self.UntrackedChanges +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/state/runstate/save_load_test.go new/git-town-23.0.3/internal/state/runstate/save_load_test.go --- old/git-town-23.0.2/internal/state/runstate/save_load_test.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/state/runstate/save_load_test.go 2026-06-21 14:45:40.000000000 +0200 @@ -70,6 +70,7 @@ &opcodes.CherryPickContinue{}, &opcodes.Commit{AuthorOverride: Some(gitdomain.Author("[email protected]")), FallbackToDefaultCommitMessage: true, Message: Some(gitdomain.CommitMessage("my message"))}, &opcodes.CommitAutoUndo{AuthorOverride: Some(gitdomain.Author("[email protected]")), FallbackToDefaultCommitMessage: true, Message: Some(gitdomain.CommitMessage("my message"))}, + &opcodes.CommitIfNeeded{AuthorOverride: Some(gitdomain.Author("[email protected]")), FallbackToDefaultCommitMessage: true, Message: Some(gitdomain.CommitMessage("my message"))}, &opcodes.CommitMessageCommentOut{}, &opcodes.CommitRemove{SHA: "123456"}, &opcodes.CommitRevert{SHA: "123456"}, @@ -369,6 +370,14 @@ "type": "CommitAutoUndo" }, { + "data": { + "AuthorOverride": "[email protected]", + "FallbackToDefaultCommitMessage": true, + "Message": "my message" + }, + "type": "CommitIfNeeded" + }, + { "data": {}, "type": "CommitMessageCommentOut" }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/test/commands/test_commands.go new/git-town-23.0.3/internal/test/commands/test_commands.go --- old/git-town-23.0.2/internal/test/commands/test_commands.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/test/commands/test_commands.go 2026-06-21 14:45:40.000000000 +0200 @@ -569,6 +569,18 @@ self.MustRun("git", "config", "init.defaultbranch", value.String()) } +// Installs a pre-commit hook that always fails. +func (self *TestCommands) SetFailingPrecommitHook() { + content := ` +#!/bin/sh +exit 1 +`[1:] + dirPath := filepath.Join(self.WorkingDir, ".git", "hooks") + asserts.NoError(os.MkdirAll(dirPath, 0o744)) + filePath := filepath.Join(dirPath, "pre-commit") + asserts.NoError(os.WriteFile(filePath, []byte(content), 0o744)) //nolint:gosec // Git hooks need to be executable +} + // StageFiles adds the file with the given name to the Git index. func (self *TestCommands) StageFiles(names ...string) { args := append([]string{"add"}, names...) @@ -591,7 +603,7 @@ return self.Run("git", "stash", "pop") } -// HasGitTownConfigNow indicates whether this repository contain Git Town specific configuration. +// VerifyNoGitTownConfiguration indicates whether this repository contain Git Town specific configuration. func (self *TestCommands) VerifyNoGitTownConfiguration() error { output, _ := self.Query("git", "config", "--get-regex", "git-town") if len(output) > 0 { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/test/cucumber/steps.go new/git-town-23.0.3/internal/test/cucumber/steps.go --- old/git-town-23.0.2/internal/test/cucumber/steps.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/test/cucumber/steps.go 2026-06-21 14:45:40.000000000 +0200 @@ -266,6 +266,12 @@ state.fixture.AddUpstream() }) + sc.Step(`^a pre-commit hook that always fails$`, func(ctx context.Context) { + state := ctx.Value(keyScenarioState).(*ScenarioState) + devRepo := state.fixture.DevRepo.GetOrPanic() + devRepo.SetFailingPrecommitHook() + }) + sc.Step(`^a rebase is (?:now|still) in progress$`, func(ctx context.Context) error { state := ctx.Value(keyScenarioState).(*ScenarioState) devRepo := state.fixture.DevRepo.GetOrPanic() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/vm/opcodes/all.go new/git-town-23.0.3/internal/vm/opcodes/all.go --- old/git-town-23.0.2/internal/vm/opcodes/all.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/vm/opcodes/all.go 2026-06-21 14:45:40.000000000 +0200 @@ -46,6 +46,7 @@ &CherryPickContinue{}, &CherryPick{}, &CommitAutoUndo{}, + &CommitIfNeeded{}, &CommitMessageCommentOut{}, &CommitRemove{}, &CommitRevertIfNeeded{}, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/vm/opcodes/commit.go new/git-town-23.0.3/internal/vm/opcodes/commit.go --- old/git-town-23.0.2/internal/vm/opcodes/commit.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/vm/opcodes/commit.go 2026-06-21 14:45:40.000000000 +0200 @@ -17,6 +17,14 @@ Message Option[gitdomain.CommitMessage] } +func (self *Commit) Continue() []shared.Opcode { + return []shared.Opcode{CommitIfNeeded{ + AuthorOverride: self.AuthorOverride, + FallbackToDefaultCommitMessage: self.FallbackToDefaultCommitMessage, + Message: self.Message, + }} +} + func (self *Commit) Run(args shared.RunArgs) error { return args.Git.Commit(args.Frontend, configdomain.UseMessageWithFallbackToDefault(self.Message, self.FallbackToDefaultCommitMessage), self.AuthorOverride, configdomain.CommitHookEnabled) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/vm/opcodes/commit_if_needed.go new/git-town-23.0.3/internal/vm/opcodes/commit_if_needed.go --- old/git-town-23.0.2/internal/vm/opcodes/commit_if_needed.go 1970-01-01 01:00:00.000000000 +0100 +++ new/git-town-23.0.3/internal/vm/opcodes/commit_if_needed.go 2026-06-21 14:45:40.000000000 +0200 @@ -0,0 +1,34 @@ +package opcodes + +import ( + "github.com/git-town/git-town/v23/internal/git/gitdomain" + "github.com/git-town/git-town/v23/internal/vm/shared" + . "github.com/git-town/git-town/v23/pkg/prelude" +) + +// CommitIfNeeded commits all open changes as a new commit, +// but only if there are changes to commit. +type CommitIfNeeded struct { + AuthorOverride Option[gitdomain.Author] + FallbackToDefaultCommitMessage bool + Message Option[gitdomain.CommitMessage] +} + +func (self *CommitIfNeeded) Run(args shared.RunArgs) error { + repoStatus, err := args.Git.RepoStatus(args.Backend) + if err != nil { + return err + } + hasOpenFiles := repoStatus.NeedsToCommit() + mergeInProgress := args.Git.HasMergeInProgress(args.Backend) + needsToCommit := hasOpenFiles || mergeInProgress + if !needsToCommit { + return nil + } + args.PrependOpcodes(&Commit{ + AuthorOverride: self.AuthorOverride, + FallbackToDefaultCommitMessage: self.FallbackToDefaultCommitMessage, + Message: self.Message, + }) + return nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/vm/opcodes/commit_message_comment_out.go new/git-town-23.0.3/internal/vm/opcodes/commit_message_comment_out.go --- old/git-town-23.0.2/internal/vm/opcodes/commit_message_comment_out.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/vm/opcodes/commit_message_comment_out.go 2026-06-21 14:45:40.000000000 +0200 @@ -12,7 +12,7 @@ type CommitMessageCommentOut struct{} func (self *CommitMessageCommentOut) Run(args shared.RunArgs) error { - if err := args.Git.CommentOutSquashCommitMessage(None[string]()); err != nil { + if err := args.Git.CommentOutSquashCommitMessage(args.Backend, None[string]()); err != nil { return fmt.Errorf(messages.SquashMessageProblem, err) } return nil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/vm/opcodes/connector_proposal_merge.go new/git-town-23.0.3/internal/vm/opcodes/connector_proposal_merge.go --- old/git-town-23.0.2/internal/vm/opcodes/connector_proposal_merge.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/vm/opcodes/connector_proposal_merge.go 2026-06-21 14:45:40.000000000 +0200 @@ -44,7 +44,7 @@ if err := args.Git.SquashMerge(args.Frontend, self.Branch); err != nil { return err } - if err := args.Git.CommentOutSquashCommitMessage(Some(forgedomain.CommitBody(proposalData, proposalData.Title.String()) + "\n\n")); err != nil { + if err := args.Git.CommentOutSquashCommitMessage(args.Backend, Some(forgedomain.CommitBody(proposalData, proposalData.Title.String())+"\n\n")); err != nil { return fmt.Errorf(messages.SquashMessageProblem, err) } if err := args.Git.CommitStart(args.Frontend); err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/internal/vm/shared/opcode.go new/git-town-23.0.3/internal/vm/shared/opcode.go --- old/git-town-23.0.2/internal/vm/shared/opcode.go 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/internal/vm/shared/opcode.go 2026-06-21 14:45:40.000000000 +0200 @@ -21,8 +21,8 @@ Abort() []Opcode } -// Continuable marks an opcode that can provide custom steps -// to safely continue after a failed Git command. +// Continuable marks an opcode that can provide the opcodes +// to run when continuing after a failed Git command. // By default, opcodes retry by running their Run method again. type Continuable interface { Continue() []Opcode diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/collector_addf/Makefile new/git-town-23.0.3/tools/collector_addf/Makefile --- old/git-town-23.0.2/tools/collector_addf/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/collector_addf/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/format_cmp_or/Makefile new/git-town-23.0.3/tools/format_cmp_or/Makefile --- old/git-town-23.0.2/tools/format_cmp_or/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/format_cmp_or/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/format_self/Makefile new/git-town-23.0.3/tools/format_self/Makefile --- old/git-town-23.0.2/tools/format_self/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/format_self/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/format_unittests/Makefile new/git-town-23.0.3/tools/format_unittests/Makefile --- old/git-town-23.0.2/tools/format_unittests/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/format_unittests/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/generate_json_schema/Makefile new/git-town-23.0.3/tools/generate_json_schema/Makefile --- old/git-town-23.0.2/tools/generate_json_schema/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/generate_json_schema/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/generate_json_schema/go.mod new/git-town-23.0.3/tools/generate_json_schema/go.mod --- old/git-town-23.0.2/tools/generate_json_schema/go.mod 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/generate_json_schema/go.mod 2026-06-21 14:45:40.000000000 +0200 @@ -3,7 +3,7 @@ go 1.26.1 require ( - github.com/git-town/git-town/v23 v23.0.2 + github.com/git-town/git-town/v23 v23.0.3 github.com/invopop/jsonschema v0.13.0 github.com/shoenig/test v1.12.2 ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/iterate_map/Makefile new/git-town-23.0.3/tools/iterate_map/Makefile --- old/git-town-23.0.2/tools/iterate_map/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/iterate_map/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/lint_cached_connectors/Makefile new/git-town-23.0.3/tools/lint_cached_connectors/Makefile --- old/git-town-23.0.2/tools/lint_cached_connectors/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/lint_cached_connectors/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/lint_steps/Makefile new/git-town-23.0.3/tools/lint_steps/Makefile --- old/git-town-23.0.2/tools/lint_steps/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/lint_steps/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/messages_sorted/Makefile new/git-town-23.0.3/tools/messages_sorted/Makefile --- old/git-town-23.0.2/tools/messages_sorted/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/messages_sorted/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/messy_output/Makefile new/git-town-23.0.3/tools/messy_output/Makefile --- old/git-town-23.0.2/tools/messy_output/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/messy_output/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/optioncompare/Makefile new/git-town-23.0.3/tools/optioncompare/Makefile --- old/git-town-23.0.2/tools/optioncompare/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/optioncompare/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/optioncompare_in_tests/Makefile new/git-town-23.0.3/tools/optioncompare_in_tests/Makefile --- old/git-town-23.0.2/tools/optioncompare_in_tests/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/optioncompare_in_tests/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/print_config_exhaustive/Makefile new/git-town-23.0.3/tools/print_config_exhaustive/Makefile --- old/git-town-23.0.2/tools/print_config_exhaustive/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/print_config_exhaustive/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/stats_release/Makefile new/git-town-23.0.3/tools/stats_release/Makefile --- old/git-town-23.0.2/tools/stats_release/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/stats_release/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/structs_sorted/Makefile new/git-town-23.0.3/tools/structs_sorted/Makefile --- old/git-town-23.0.2/tools/structs_sorted/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/structs_sorted/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/sync_rta_version/Makefile new/git-town-23.0.3/tools/sync_rta_version/Makefile --- old/git-town-23.0.2/tools/sync_rta_version/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/sync_rta_version/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/tests_sorted/Makefile new/git-town-23.0.3/tools/tests_sorted/Makefile --- old/git-town-23.0.2/tools/tests_sorted/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/tests_sorted/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/tools/use_equal/Makefile new/git-town-23.0.3/tools/use_equal/Makefile --- old/git-town-23.0.2/tools/use_equal/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/tools/use_equal/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/vendor/modules.txt new/git-town-23.0.3/vendor/modules.txt --- old/git-town-23.0.2/vendor/modules.txt 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/vendor/modules.txt 2026-06-21 14:45:40.000000000 +0200 @@ -97,7 +97,7 @@ # github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f ## explicit; go 1.16 github.com/erikgeiser/coninput -# github.com/git-town/git-town/v23 v23.0.2 => . +# github.com/git-town/git-town/v23 v23.0.3 => . ## explicit; go 1.26.1 # github.com/go-fed/httpsig v1.1.0 ## explicit; go 1.13 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/website/Makefile new/git-town-23.0.3/website/Makefile --- old/git-town-23.0.2/website/Makefile 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/website/Makefile 2026-06-21 14:45:40.000000000 +0200 @@ -1,4 +1,4 @@ -RTA_VERSION = 0.36.0 # run-that-app version to use +RTA_VERSION = 0.37.0 # run-that-app version to use .DEFAULT_GOAL := help diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-23.0.2/website/src/install.sh new/git-town-23.0.3/website/src/install.sh --- old/git-town-23.0.2/website/src/install.sh 2026-06-06 14:19:34.000000000 +0200 +++ new/git-town-23.0.3/website/src/install.sh 2026-06-21 14:45:40.000000000 +0200 @@ -3,7 +3,7 @@ # This script installs the Git Town executable in the user's HOME directory. -VERSION=23.0.2 # the version of Git Town to install +VERSION=23.0.3 # the version of Git Town to install DEST=$HOME/.local/bin # the folder into which to install the Git Town executable TMP_DIR=.git-town-download # temporary folder to use ++++++ git-town.obsinfo ++++++ --- /var/tmp/diff_new_pack.DI9aRG/_old 2026-06-22 17:35:50.935226581 +0200 +++ /var/tmp/diff_new_pack.DI9aRG/_new 2026-06-22 17:35:50.947227003 +0200 @@ -1,5 +1,5 @@ name: git-town -version: 23.0.2 -mtime: 1780748374 -commit: 16c982b8b9828afb4a00db4ff61d491fca221782 +version: 23.0.3 +mtime: 1782045940 +commit: 7d8dce35b3a1471a8d081d7837e06d3c9d15b976
