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-11-06 19:58:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/git-town (Old) and /work/SRC/openSUSE:Factory/.git-town.new.3759290 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "git-town" Fri Nov 6 19:58:56 2026 rev:21 rq:1395862 version:24.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/git-town/git-town.changes 2026-09-28 10:49:12.903896817 +0200 +++ /work/SRC/openSUSE:Factory/.git-town.new.3759290/git-town.changes 2026-11-06 20:07:18.845721499 +0100 @@ -1,0 +2,8 @@ +Fri Nov 06 13:48:12 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 24.1.1: + * Bug Fixes + - set-parent: allow selecting a parent that is checked out in + another worktree (#6298). + +------------------------------------------------------------------- Old: ---- git-town-24.1.0.obscpio New: ---- git-town-24.1.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ git-town.spec ++++++ --- /var/tmp/diff_new_pack.6v3fVY/_old 2026-11-06 20:07:20.336783984 +0100 +++ /var/tmp/diff_new_pack.6v3fVY/_new 2026-11-06 20:07:20.341784194 +0100 @@ -17,7 +17,7 @@ Name: git-town -Version: 24.1.0 +Version: 24.1.1 Release: 0 Summary: Git branches made easy License: MIT @@ -25,7 +25,7 @@ Source0: %{name}-%{version}.tar.gz BuildRequires: bash-completion BuildRequires: fish -BuildRequires: go1.26 >= 1.26.1 +BuildRequires: go1.26 >= 1.26.10 BuildRequires: zsh Requires: git-core ++++++ _service ++++++ --- /var/tmp/diff_new_pack.6v3fVY/_old 2026-11-06 20:07:20.413787211 +0100 +++ /var/tmp/diff_new_pack.6v3fVY/_new 2026-11-06 20:07:20.422787588 +0100 @@ -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/v24.1.0</param> + <param name="revision">refs/tags/v24.1.1</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.6v3fVY/_old 2026-11-06 20:07:20.468789516 +0100 +++ /var/tmp/diff_new_pack.6v3fVY/_new 2026-11-06 20:07:20.477789893 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/git-town/git-town.git</param> - <param name="changesrevision">2fabf99bfd18f6ddc4e80e23f970df4ce3de9ff5</param></service></servicedata> + <param name="changesrevision">e66ec8b8b744bbe2ad5416dc4793e16b56a3e629</param></service></servicedata> (No newline at EOF) ++++++ git-town-24.1.0.obscpio -> git-town-24.1.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/.golangci.yml new/git-town-24.1.1/.golangci.yml --- old/git-town-24.1.0/.golangci.yml 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/.golangci.yml 2026-11-06 13:28:50.000000000 +0100 @@ -9,6 +9,7 @@ - dupl # too many false positives - err113 # this leads to lots of unnecessary allocations and boilerplate - exhaustruct # we call this separately from golangci-lint via "make lint-smoke" + - exhaustruct_v5 # we call this separately from golangci-lint via "make lint-smoke" - forbidigo # Git Town prints a lot to the CLI - forcetypeassert - funlen # we keep track of this via code reviews @@ -102,7 +103,7 @@ path: internal/gohacks/slice/first_element_or.go - linters: - predeclared - text: package name print has same name as predeclared identifier + text: 'print: shadows predeclared identifier' - linters: - revive text: receiver name should be a reflection of its identity diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/CHANGELOG.md new/git-town-24.1.1/CHANGELOG.md --- old/git-town-24.1.0/CHANGELOG.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/CHANGELOG.md 2026-11-06 13:28:50.000000000 +0100 @@ -1,5 +1,15 @@ # Git Town Changelog +## 24.1.1 (2026-11-06) + +#### Bug Fixes + +- set-parent: allow selecting a parent that is checked out in another worktree ([#6298](https://github.com/git-town/git-town/pull/6298)). + +#### Contributors + +Shoutout to @JaredSharplin, @WhosNickDoglio, @efim0v, @genx7up, @hamzahamidi, @kevgo, @mrmarufpro for contributing ideas, feedback, and code to 6 shipped pull requests and 3 resolved issues! + ## 24.1.0 (2026-09-26) #### New Features diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/Makefile new/git-town-24.1.1/Makefile --- old/git-town-24.1.0/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,8 +1,8 @@ -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 # internal data and state .DEFAULT_GOAL := help -RELEASE_VERSION := "24.1.0" +RELEASE_VERSION := "24.1.1" GO_TEST_ARGS = LANG=C GOGC=off RTA = tools/rta@$(RTA_VERSION) @@ -207,7 +207,7 @@ @(cd tools/optioncompare && go build) && ./tools/optioncompare/optioncompare github.com/git-town/git-town/v24/... lint-smoke: ${RTA} # runs only the essential linters - @$(EXHAUSTRUCT) -test=false "-i=github.com/git-town/git-town.*" github.com/git-town/git-town/... + @$(EXHAUSTRUCT) -test=false -explicit "-enforce-rx=github.com/git-town/git-town.*" github.com/git-town/git-town/... # @$(RTA) ireturn --reject="github.com/git-town/git-town/v24/pkg/prelude.Option" github.com/git-town/git-town/... lint-structs-sorted: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/docs/ARCHITECTURE.md new/git-town-24.1.1/docs/ARCHITECTURE.md --- old/git-town-24.1.0/docs/ARCHITECTURE.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/docs/ARCHITECTURE.md 2026-11-06 13:28:50.000000000 +0100 @@ -104,8 +104,8 @@ The [Go code review comments wiki page](https://go.dev/wiki/CodeReviewComments#receiver-names) -suggests using short, one or two-letter names for method receivers, -rather than generic names like `this` or `self`. +suggests using short, one or two-letter names for method receivers, rather than +generic names like `this` or `self`. After many years of following this guideline in the Git Town codebase, we found it to be impractical and cumbersome. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/docs/RELEASE.md new/git-town-24.1.1/docs/RELEASE.md --- old/git-town-24.1.0/docs/RELEASE.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/docs/RELEASE.md 2026-11-06 13:28:50.000000000 +0100 @@ -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: `24.1.0` + - triple-digits: `24.1.1` - double-digits: `24.1` - 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/v24` (without trailing slash) - update the changelog with links to the website - ship the branch -- `git sync --all && git checkout main && git tag v24.1.0 && git push --tags` +- `git sync --all && git checkout main && git tag v24.1.1 && 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-24.1.0/features/diff_parent/worktree/parent_in_other_worktree.feature new/git-town-24.1.1/features/diff_parent/worktree/parent_in_other_worktree.feature --- old/git-town-24.1.0/features/diff_parent/worktree/parent_in_other_worktree.feature 1970-01-01 01:00:00.000000000 +0100 +++ new/git-town-24.1.1/features/diff_parent/worktree/parent_in_other_worktree.feature 2026-11-06 13:28:50.000000000 +0100 @@ -0,0 +1,23 @@ +@messyoutput +Feature: select a branch that is active in another worktree as the missing parent + + Scenario: feature branch without parent + Given a Git repo with origin + And the branches + | NAME | TYPE | PARENT | LOCATIONS | + | branch-1 | feature | main | local | + | branch-2 | (none) | | local | + And the current branch is "branch-2" + And branch "branch-1" is active in another worktree + When I run "git-town diff-parent" and enter into the dialog: + | DIALOG | KEYS | + | parent branch for "branch-2" | down enter | + Then Git Town runs the commands + | BRANCH | COMMAND | + | branch-2 | git diff --merge-base branch-1 branch-2 | + And this lineage exists now + """ + main + branch-1 + branch-2 + """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/features/hack/beam/parent_in_other_worktree.feature new/git-town-24.1.1/features/hack/beam/parent_in_other_worktree.feature --- old/git-town-24.1.0/features/hack/beam/parent_in_other_worktree.feature 1970-01-01 01:00:00.000000000 +0100 +++ new/git-town-24.1.1/features/hack/beam/parent_in_other_worktree.feature 2026-11-06 13:28:50.000000000 +0100 @@ -0,0 +1,56 @@ +@messyoutput +Feature: beam commits from a branch whose new parent is active in another worktree + + Background: + Given a Git repo with origin + And the branches + | NAME | TYPE | PARENT | LOCATIONS | + | existing-1 | (none) | | local, origin | + | existing-2 | feature | main | local, origin | + And the commits + | BRANCH | LOCATION | MESSAGE | + | main | origin | main commit | + | existing-1 | local | commit 1a | + | existing-1 | local | commit 1b | + | existing-2 | local | commit 2 | + And the current branch is "existing-1" + And branch "existing-2" is active in another worktree + When I run "git-town hack new --beam" and enter into the dialog: + | DIALOG | KEYS | + | parent branch for "existing-1" | down enter | + | commits to beam | down space enter | + + Scenario: result + Then Git Town runs the commands + | BRANCH | COMMAND | + | existing-1 | git checkout -b new main | + | new | git cherry-pick {{ sha-initial 'commit 1b' }} | + | | git checkout existing-1 | + | existing-1 | git -c rebase.updateRefs=false rebase --onto {{ sha-initial 'commit 1b' }}^ {{ sha-initial 'commit 1b' }} | + | | git push --force-with-lease --force-if-includes | + | | git checkout new | + And no rebase is now in progress + And this lineage exists now + """ + main + existing-2 + existing-1 + new + """ + And these commits exist now + | BRANCH | LOCATION | MESSAGE | + | main | origin | main commit | + | existing-2 | worktree | commit 2 | + | existing-1 | local, origin, worktree | commit 1a | + | new | local | commit 1b | + + Scenario: undo + When I run "git-town undo" + Then Git Town runs the commands + | BRANCH | COMMAND | + | new | git checkout existing-1 | + | existing-1 | git reset --hard {{ sha-initial 'commit 1b' }} | + | | git push --force-with-lease origin {{ sha 'initial commit' }}:existing-1 | + | | git branch -D new | + 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-24.1.0/features/set_parent/worktree/new_parent_in_other_worktree.feature new/git-town-24.1.1/features/set_parent/worktree/new_parent_in_other_worktree.feature --- old/git-town-24.1.0/features/set_parent/worktree/new_parent_in_other_worktree.feature 1970-01-01 01:00:00.000000000 +0100 +++ new/git-town-24.1.1/features/set_parent/worktree/new_parent_in_other_worktree.feature 2026-11-06 13:28:50.000000000 +0100 @@ -0,0 +1,33 @@ +@messyoutput +Feature: select a branch that is active in another worktree as the new parent + + Background: + Given a Git repo with origin + And the branches + | NAME | TYPE | PARENT | LOCATIONS | + | branch-1 | feature | main | local, origin | + | branch-2 | feature | main | local, origin | + And the current branch is "branch-2" + And branch "branch-1" is active in another worktree + When I run "git-town set-parent" and enter into the dialog: + | DIALOG | KEYS | + | parent branch for "branch-2" | down enter | + + Scenario: result + Then Git Town runs no commands + And Git Town prints: + """ + branch branch-2 is now a child of branch-1 + """ + And this lineage exists now + """ + main + branch-1 + branch-2 + """ + + Scenario: undo + When I run "git-town undo" + Then Git Town runs no commands + 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-24.1.0/features/version/version.feature new/git-town-24.1.1/features/version/version.feature --- old/git-town-24.1.0/features/version/version.feature 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/features/version/version.feature 2026-11-06 13:28:50.000000000 +0100 @@ -6,5 +6,5 @@ When I run "git-town --version" Then Git Town prints: """ - Git Town 24.1.0 + Git Town 24.1.1 """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/go.mod new/git-town-24.1.1/go.mod --- old/git-town-24.1.0/go.mod 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/go.mod 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ module github.com/git-town/git-town/v24 -go 1.26.1 +go 1.26.9 require ( code.gitea.io/sdk/gitea v0.25.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/go.work new/git-town-24.1.1/go.work --- old/git-town-24.1.0/go.work 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/go.work 2026-11-06 13:28:50.000000000 +0100 @@ -1,4 +1,4 @@ -go 1.26.1 +go 1.26.9 use ( . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/cli/dialog/dialogcomponents/list/entry.go new/git-town-24.1.1/internal/cli/dialog/dialogcomponents/list/entry.go --- old/git-town-24.1.0/internal/cli/dialog/dialogcomponents/list/entry.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/cli/dialog/dialogcomponents/list/entry.go 2026-11-06 13:28:50.000000000 +0100 @@ -3,6 +3,6 @@ // Entry is an entry in a List instance. type Entry[S any] struct { Data S - Disabled bool `exhaustruct:"optional"` + Disabled bool //exhaustruct:optional Text string } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/cli/dialog/lineage.go new/git-town-24.1.1/internal/cli/dialog/lineage.go --- old/git-town-24.1.0/internal/cli/dialog/lineage.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/cli/dialog/lineage.go 2026-11-06 13:28:50.000000000 +0100 @@ -82,9 +82,10 @@ entriesArgs.ShowAllBranches = false entriesLocal := append(SwitchBranchEntries{noneEntry}, NewSwitchBranchEntries(entriesArgs)...) newParent, exit, err := SwitchBranch(SwitchBranchArgs{ - CurrentBranch: None[gitdomain.LocalBranchName](), - Cursor: 1, // select the "main branch" entry, below the "make perennial" entry - DisplayBranchTypes: args.Config.NormalConfig.DisplayTypes, + CurrentBranch: None[gitdomain.LocalBranchName](), + Cursor: 1, // select the "main branch" entry, below the "make perennial" entry + DisableBranchesInOtherWorktrees: false, + DisplayBranchTypes: args.Config.NormalConfig.DisplayTypes, EntryData: EntryData{ EntriesAll: entriesAll, EntriesLocal: entriesLocal, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/cli/dialog/switch_branch.go new/git-town-24.1.1/internal/cli/dialog/switch_branch.go --- old/git-town-24.1.0/internal/cli/dialog/switch_branch.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/cli/dialog/switch_branch.go 2026-11-06 13:28:50.000000000 +0100 @@ -72,11 +72,12 @@ type SwitchModel struct { list.List[SwitchBranchEntry] - DisplayBranchTypes configdomain.DisplayTypes - EntryData EntryData - InitialBranchPos Option[int] // position of the currently checked out branch in the list - Title Option[string] // optional title to display above the branch tree - UncommittedChanges bool // whether the workspace has uncommitted changes + DisableBranchesInOtherWorktrees bool // whether branches that are active in other worktrees cannot be selected + DisplayBranchTypes configdomain.DisplayTypes + EntryData EntryData + InitialBranchPos Option[int] // position of the currently checked out branch in the list + Title Option[string] // optional title to display above the branch tree + UncommittedChanges bool // whether the workspace has uncommitted changes } func (self SwitchModel) Init() tea.Cmd { @@ -101,7 +102,7 @@ } if keyMsg.String() == "a" { self.EntryData.toggle() - self.List = list.NewList(newSwitchBranchListEntries(self.EntryData.entries()), min(self.Cursor, len(self.EntryData.EntriesLocal)-1)) + self.List = list.NewList(newSwitchBranchListEntries(self.EntryData.entries(), self.DisableBranchesInOtherWorktrees), min(self.Cursor, len(self.EntryData.EntriesLocal)-1)) return self, nil } return self, nil @@ -286,12 +287,13 @@ initialBranchPos = Some(entries.IndexOf(currentBranch)) } dialogProgram := tea.NewProgram(SwitchModel{ - DisplayBranchTypes: args.DisplayBranchTypes, - EntryData: args.EntryData, - InitialBranchPos: initialBranchPos, - List: list.NewList(newSwitchBranchListEntries(entries), args.Cursor), - Title: args.Title, - UncommittedChanges: args.UncommittedChanges, + DisableBranchesInOtherWorktrees: args.DisableBranchesInOtherWorktrees, + DisplayBranchTypes: args.DisplayBranchTypes, + EntryData: args.EntryData, + InitialBranchPos: initialBranchPos, + List: list.NewList(newSwitchBranchListEntries(entries, args.DisableBranchesInOtherWorktrees), args.Cursor), + Title: args.Title, + UncommittedChanges: args.UncommittedChanges, }) dialogcomponents.SendInputs(args.InputName, args.Inputs.Next(), dialogProgram) dialogResult, err := dialogProgram.Run() @@ -301,15 +303,16 @@ } type SwitchBranchArgs struct { - CurrentBranch Option[gitdomain.LocalBranchName] - Cursor int - DisplayBranchTypes configdomain.DisplayTypes - EntryData EntryData - InputName string - Inputs dialogcomponents.Inputs - Interactive configdomain.Interactive - Title Option[string] - UncommittedChanges bool + CurrentBranch Option[gitdomain.LocalBranchName] + Cursor int + DisableBranchesInOtherWorktrees bool + DisplayBranchTypes configdomain.DisplayTypes + EntryData EntryData + InputName string + Inputs dialogcomponents.Inputs + Interactive configdomain.Interactive + Title Option[string] + UncommittedChanges bool } // layoutBranches adds entries for the given branch and its children to the given entry list. @@ -369,12 +372,12 @@ unknownBranchType configdomain.UnknownBranchType } -func newSwitchBranchListEntries(switchBranchEntries []SwitchBranchEntry) list.Entries[SwitchBranchEntry] { +func newSwitchBranchListEntries(switchBranchEntries []SwitchBranchEntry, disableBranchesInOtherWorktrees bool) list.Entries[SwitchBranchEntry] { result := make(list.Entries[SwitchBranchEntry], len(switchBranchEntries)) for e, entry := range switchBranchEntries { result[e] = list.Entry[SwitchBranchEntry]{ Data: entry, - Disabled: entry.OtherWorktree, + Disabled: disableBranchesInOtherWorktrees && entry.OtherWorktree, Text: entry.String(), } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/cli/dialog/switch_branch_test.go new/git-town-24.1.1/internal/cli/dialog/switch_branch_test.go --- old/git-town-24.1.0/internal/cli/dialog/switch_branch_test.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/cli/dialog/switch_branch_test.go 2026-11-06 13:28:50.000000000 +0100 @@ -4,6 +4,7 @@ "regexp" "testing" + tea "github.com/charmbracelet/bubbletea" "github.com/git-town/git-town/v24/internal/cli/dialog" "github.com/git-town/git-town/v24/internal/cli/dialog/dialogcomponents/list" "github.com/git-town/git-town/v24/internal/config/configdomain" @@ -458,6 +459,50 @@ }) }) + t.Run("Update", func(t *testing.T) { + t.Parallel() + t.Run("toggle all branches", func(t *testing.T) { + t.Parallel() + entries := dialog.SwitchBranchEntries{ + {Branch: "main", Indentation: "", OtherWorktree: false, Type: configdomain.BranchTypeMainBranch}, + {Branch: "alpha", Indentation: " ", OtherWorktree: true, Type: configdomain.BranchTypeFeatureBranch}, + {Branch: "beta", Indentation: " ", OtherWorktree: false, Type: configdomain.BranchTypeFeatureBranch}, + } + t.Run("allow branches in other worktrees", func(t *testing.T) { + t.Parallel() + model := dialog.SwitchModel{ + DisableBranchesInOtherWorktrees: false, + EntryData: dialog.EntryData{ + EntriesAll: entries, + EntriesLocal: entries, + ShowAllBranches: false, + }, + } + toggledModel, _ := model.Update(tea.KeyMsg{Runes: []rune{'a'}, Type: tea.KeyRunes}) + movedModel, _ := toggledModel.Update(tea.KeyMsg{Type: tea.KeyDown}) + have := movedModel.(dialog.SwitchModel).List.SelectedData().Branch + want := gitdomain.LocalBranchName("alpha") + must.EqOp(t, want, have) + }) + t.Run("disable branches in other worktrees", func(t *testing.T) { + t.Parallel() + model := dialog.SwitchModel{ + DisableBranchesInOtherWorktrees: true, + EntryData: dialog.EntryData{ + EntriesAll: entries, + EntriesLocal: entries, + ShowAllBranches: false, + }, + } + toggledModel, _ := model.Update(tea.KeyMsg{Runes: []rune{'a'}, Type: tea.KeyRunes}) + movedModel, _ := toggledModel.Update(tea.KeyMsg{Type: tea.KeyDown}) + have := movedModel.(dialog.SwitchModel).List.SelectedData().Branch + want := gitdomain.LocalBranchName("beta") + must.EqOp(t, want, have) + }) + }) + }) + t.Run("View", func(t *testing.T) { t.Parallel() t.Run("only the main branch exists", func(t *testing.T) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/cmd/hack.go new/git-town-24.1.1/internal/cmd/hack.go --- old/git-town-24.1.0/internal/cmd/hack.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/cmd/hack.go 2026-11-06 13:28:50.000000000 +0100 @@ -347,9 +347,10 @@ entriesArgs.ShowAllBranches = false entriesLocal := append(dialog.SwitchBranchEntries{noneEntry}, dialog.NewSwitchBranchEntries(entriesArgs)...) newParent, exit, err := dialog.SwitchBranch(dialog.SwitchBranchArgs{ - CurrentBranch: None[gitdomain.LocalBranchName](), - Cursor: 1, // select the "main branch" entry, below the "make perennial" entry - DisplayBranchTypes: validatedConfig.NormalConfig.DisplayTypes, + CurrentBranch: None[gitdomain.LocalBranchName](), + Cursor: 1, // select the "main branch" entry, below the "make perennial" entry + DisableBranchesInOtherWorktrees: false, + DisplayBranchTypes: validatedConfig.NormalConfig.DisplayTypes, EntryData: dialog.EntryData{ EntriesAll: entriesAll, EntriesLocal: entriesLocal, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/cmd/set_parent.go new/git-town-24.1.1/internal/cmd/set_parent.go --- old/git-town-24.1.0/internal/cmd/set_parent.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/cmd/set_parent.go 2026-11-06 13:28:50.000000000 +0100 @@ -166,9 +166,10 @@ args.ShowAllBranches = true entriesAll := append(dialog.SwitchBranchEntries{noneEntry}, dialog.NewSwitchBranchEntries(args)...) selectedParent, exit, err = dialog.SwitchBranch(dialog.SwitchBranchArgs{ - CurrentBranch: None[gitdomain.LocalBranchName](), - Cursor: entriesLocal.IndexOf(data.defaultChoice), - DisplayBranchTypes: data.config.NormalConfig.DisplayTypes, + CurrentBranch: None[gitdomain.LocalBranchName](), + Cursor: entriesLocal.IndexOf(data.defaultChoice), + DisableBranchesInOtherWorktrees: false, + DisplayBranchTypes: data.config.NormalConfig.DisplayTypes, EntryData: dialog.EntryData{ EntriesAll: entriesAll, EntriesLocal: entriesLocal, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/cmd/switch.go new/git-town-24.1.1/internal/cmd/switch.go --- old/git-town-24.1.0/internal/cmd/switch.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/cmd/switch.go 2026-11-06 13:28:50.000000000 +0100 @@ -142,9 +142,10 @@ } cursor := entriesLocal.IndexOf(data.initialBranch) branchToCheckout, exit, err := dialog.SwitchBranch(dialog.SwitchBranchArgs{ - CurrentBranch: Some(data.initialBranch), - Cursor: cursor, - DisplayBranchTypes: repo.UnvalidatedConfig.NormalConfig.DisplayTypes, + CurrentBranch: Some(data.initialBranch), + Cursor: cursor, + DisableBranchesInOtherWorktrees: true, + DisplayBranchTypes: repo.UnvalidatedConfig.NormalConfig.DisplayTypes, EntryData: dialog.EntryData{ EntriesAll: entriesAll, EntriesLocal: entriesLocal, @@ -164,8 +165,7 @@ } if err := performSwitch(branchToCheckout, args.cliConfig.Stash.GetOr(false), data.hasOpenChanges, args.merge, repo); err != nil { exitCode := 1 - var exitErr *exec.ExitError - if errors.As(err, &exitErr) { + if exitErr, ok := errors.AsType[*exec.ExitError](err); ok { exitCode = exitErr.ExitCode() } os.Exit(exitCode) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/config/configdomain/key.go new/git-town-24.1.1/internal/config/configdomain/key.go --- old/git-town-24.1.0/internal/config/configdomain/key.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/config/configdomain/key.go 2026-11-06 13:28:50.000000000 +0100 @@ -9,7 +9,7 @@ ) // Key contains all the keys used in Git Town's Git metadata configuration. -type Key string //nolint: recvcheck // MarshalJSON and UnmarshalJSON require different receiver types +type Key string // ConfigSetting contains a key-value pair for a configuration setting. type ConfigSetting struct { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/config/gitconfig/low_level.go new/git-town-24.1.1/internal/config/gitconfig/low_level.go --- old/git-town-24.1.0/internal/config/gitconfig/low_level.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/config/gitconfig/low_level.go 2026-11-06 13:28:50.000000000 +0100 @@ -99,8 +99,7 @@ // RemoveLocalGitConfiguration removes all Git Town configuration. func RemoveLocalGitConfiguration(runner subshelldomain.Runner, localSnapshot configdomain.SingleSnapshot) error { if err := runner.Run("git", "config", "--remove-section", "git-town"); err != nil { - var exitErr *exec.ExitError - if errors.As(err, &exitErr) { + if exitErr, ok := errors.AsType[*exec.ExitError](err); ok { if exitErr.ExitCode() == 128 { // Git returns exit code 128 when trying to delete a non-existing config section. // This is not an error condition in this workflow so we can ignore it here. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/config/version.go new/git-town-24.1.1/internal/config/version.go --- old/git-town-24.1.0/internal/config/version.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/config/version.go 2026-11-06 13:28:50.000000000 +0100 @@ -1,4 +1,4 @@ package config // GitTownVersion provides the current Git Town version. -const GitTownVersion = "24.1.0" +const GitTownVersion = "24.1.1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/gohacks/error_collector.go new/git-town-24.1.1/internal/gohacks/error_collector.go --- old/git-town-24.1.0/internal/gohacks/error_collector.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/gohacks/error_collector.go 2026-11-06 13:28:50.000000000 +0100 @@ -9,7 +9,7 @@ // Use with care and only if it's abundantly clear and obvious that there are no negative side effects. // This is an anti-pattern in code to work arount an anti-pattern in the language. type ErrorCollector struct { - Err error `exhaustruct:"optional"` + Err error //exhaustruct:optional } // Check registers the given error and indicates diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/state/runstate/runstate.go new/git-town-24.1.1/internal/state/runstate/runstate.go --- old/git-town-24.1.0/internal/state/runstate/runstate.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/state/runstate/runstate.go 2026-11-06 13:28:50.000000000 +0100 @@ -18,7 +18,7 @@ // including which operations are left to do, // and how to undo what has been done so far. type RunState struct { - AbortProgram program.Program `exhaustruct:"optional"` // opcodes to abort the currently pending Git operation + AbortProgram program.Program //exhaustruct:optional — opcodes to abort the currently pending Git operation BeginBranchesSnapshot gitdomain.BranchesSnapshot // snapshot of the Git branches before the Git Town command that this RunState is for ran BeginConfigSnapshot configdomain.BeginConfigSnapshot // snapshot of the Git configuration before the Git Town command that this RunState is for ran BeginStashSize gitdomain.StashSize // size of the Git stash before the Git Town command that this RunState is for ran @@ -28,12 +28,12 @@ EndBranchesSnapshot Option[gitdomain.BranchesSnapshot] // snapshot of the Git branches after the Git Town command that this RunState is for ran EndConfigSnapshot Option[configdomain.EndConfigSnapshot] // snapshot of the Git configuration after the Git Town command that this RunState is for ran EndStashSize Option[gitdomain.StashSize] // size of the Git stash after the Git Town command that this RunState is for ran - FinalUndoProgram program.Program `exhaustruct:"optional"` // additional opcodes to run after this RunState was undone + FinalUndoProgram program.Program //exhaustruct:optional — additional opcodes to run after this RunState was undone RunProgram program.Program // remaining opcodes of the Git Town command that this RunState is for TouchedBranches gitdomain.BranchNames // the branches that are touched by the Git Town command that this RunState is for UndoAPIProgram program.Program // opcodes to undo changes at external systems - UndoablePerennialCommits []gitdomain.SHA `exhaustruct:"optional"` // contains the SHAs of commits on perennial branches that can safely be undone - UnfinishedDetails OptionalMutable[UnfinishedRunStateDetails] `exhaustruct:"optional"` + UndoablePerennialCommits []gitdomain.SHA //exhaustruct:optional — contains the SHAs of commits on perennial branches that can safely be undone + UnfinishedDetails OptionalMutable[UnfinishedRunStateDetails] //exhaustruct:optional } func EmptyRunState() RunState { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/test/datatable/data_table.go new/git-town-24.1.1/internal/test/datatable/data_table.go --- old/git-town-24.1.0/internal/test/datatable/data_table.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/test/datatable/data_table.go 2026-11-06 13:28:50.000000000 +0100 @@ -16,7 +16,7 @@ // The zero value is an empty DataTable. type DataTable struct { // table data organized as rows and columns - Cells [][]string `exhaustruct:"optional"` + Cells [][]string //exhaustruct:optional } // FromGherkin provides a DataTable instance populated with data from the given Gherkin table. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/test/subshell/test_runner.go new/git-town-24.1.1/internal/test/subshell/test_runner.go --- old/git-town-24.1.0/internal/test/subshell/test_runner.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/test/subshell/test_runner.go 2026-11-06 13:28:50.000000000 +0100 @@ -254,8 +254,7 @@ } exitCode := 0 if err != nil { - var exitErr *exec.ExitError - if errors.As(err, &exitErr) { + if exitErr, ok := errors.AsType[*exec.ExitError](err); ok { exitCode = exitErr.ExitCode() err = nil } else { @@ -318,17 +317,17 @@ type Options struct { // Dir contains the directory in which to execute the command. // If empty, runs in the current directory. - Dir string `exhaustruct:"optional"` + Dir string //exhaustruct:optional // Env allows to override the environment variables to use in the subshell, in the format provided by os.Environ() // If empty, uses the environment variables of this process. - Env []string `exhaustruct:"optional"` + Env []string //exhaustruct:optional // when set, captures the output and returns it - IgnoreOutput bool `exhaustruct:"optional"` + IgnoreOutput bool //exhaustruct:optional // input to pipe into STDIN - Input Option[string] `exhaustruct:"optional"` + Input Option[string] //exhaustruct:optional // whether to provide a TTY to the subshell TTY bool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/test/testgit/commit.go new/git-town-24.1.1/internal/test/testgit/commit.go --- old/git-town-24.1.0/internal/test/testgit/commit.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/test/testgit/commit.go 2026-11-06 13:28:50.000000000 +0100 @@ -10,13 +10,13 @@ // Commit describes a Git commit. type Commit struct { - Author gitdomain.Author `exhaustruct:"optional"` + Author gitdomain.Author //exhaustruct:optional Branch gitdomain.LocalBranchName - FileContent string `exhaustruct:"optional"` - FileName string `exhaustruct:"optional"` - Locations Locations `exhaustruct:"optional"` + FileContent string //exhaustruct:optional + FileName string //exhaustruct:optional + Locations Locations //exhaustruct:optional Message gitdomain.CommitMessage - SHA gitdomain.SHA `exhaustruct:"optional"` + SHA gitdomain.SHA //exhaustruct:optional } var counter helpers.AtomicCounter diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/internal/vm/program/program.go new/git-town-24.1.1/internal/vm/program/program.go --- old/git-town-24.1.0/internal/vm/program/program.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/internal/vm/program/program.go 2026-11-06 13:28:50.000000000 +0100 @@ -13,7 +13,7 @@ ) // Program is a mutable collection of Opcodes. -type Program []shared.Opcode +type Program []shared.Opcode //nolint: recvcheck // MarshalJSON and UnmarshalJSON require different receiver types // Append adds the given opcode to the end of this program. func (self *Program) Add(opcode ...shared.Opcode) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/run-that-app new/git-town-24.1.1/run-that-app --- old/git-town-24.1.0/run-that-app 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/run-that-app 2026-11-06 13:28:50.000000000 +0100 @@ -2,30 +2,30 @@ actionlint 1.7.12 alphavet 0.1.0 -conc 0.6.1 +conc 0.10.2 contest 0.5.0 cucumber-sort 0.2.0 -deadcode 0.48.0 +deadcode 0.52.0 depth 1.2.1 -dprint 0.55.2 -exhaustruct 3.3.1 +dprint 0.64.3 +exhaustruct 5.2.0 ghokin 3.10.0 -gofumpt 0.10.0 -golangci-lint 2.12.2 +gofumpt 0.12.0 +golangci-lint 2.15.0 goreleaser 1.26.2 govulncheck 1.1.4 ireturn 0.4.1 -keep-sorted 0.9.1 -lefthook 2.1.10 -mdbook 0.4.51 +keep-sorted 0.10.0 +lefthook 2.2.2 +mdbook 0.4.52 mdbook-linkcheck 0.7.7 -node 26.5.0 -npm 26.5.0 -npx 26.5.0 +node 26.12.1 +npm 26.12.1 +npx 26.12.1 ripgrep 15.2.0 -rumdl 0.2.40 -scc 3.7.0 +rumdl 0.3.0 +scc 4.1.0 shellcheck system@* 0.11.0 -shfmt 3.13.1 -staticcheck 2026.1 +shfmt 3.14.1 +staticcheck 2026.2.2 taplo 0.10.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/collector_addf/Makefile new/git-town-24.1.1/tools/collector_addf/Makefile --- old/git-town-24.1.0/tools/collector_addf/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/collector_addf/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/format_cmp_or/Makefile new/git-town-24.1.1/tools/format_cmp_or/Makefile --- old/git-town-24.1.0/tools/format_cmp_or/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/format_cmp_or/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/format_self/Makefile new/git-town-24.1.1/tools/format_self/Makefile --- old/git-town-24.1.0/tools/format_self/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/format_self/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/format_unittests/Makefile new/git-town-24.1.1/tools/format_unittests/Makefile --- old/git-town-24.1.0/tools/format_unittests/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/format_unittests/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/generate_json_schema/Makefile new/git-town-24.1.1/tools/generate_json_schema/Makefile --- old/git-town-24.1.0/tools/generate_json_schema/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/generate_json_schema/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/generate_json_schema/go.mod new/git-town-24.1.1/tools/generate_json_schema/go.mod --- old/git-town-24.1.0/tools/generate_json_schema/go.mod 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/generate_json_schema/go.mod 2026-11-06 13:28:50.000000000 +0100 @@ -3,7 +3,7 @@ go 1.26.1 require ( - github.com/git-town/git-town/v24 v24.1.0 + github.com/git-town/git-town/v24 v24.1.1 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-24.1.0/tools/iterate_map/Makefile new/git-town-24.1.1/tools/iterate_map/Makefile --- old/git-town-24.1.0/tools/iterate_map/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/iterate_map/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/lint_cached_connectors/Makefile new/git-town-24.1.1/tools/lint_cached_connectors/Makefile --- old/git-town-24.1.0/tools/lint_cached_connectors/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/lint_cached_connectors/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/lint_steps/Makefile new/git-town-24.1.1/tools/lint_steps/Makefile --- old/git-town-24.1.0/tools/lint_steps/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/lint_steps/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/mdbook_preprocessor/mdbook_preprocessor.js new/git-town-24.1.1/tools/mdbook_preprocessor/mdbook_preprocessor.js --- old/git-town-24.1.0/tools/mdbook_preprocessor/mdbook_preprocessor.js 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/mdbook_preprocessor/mdbook_preprocessor.js 2026-11-06 13:28:50.000000000 +0100 @@ -160,7 +160,7 @@ }</div>` }) .join("") - }</pre></code>` + }</code></pre>` } /** @@ -217,5 +217,5 @@ }</div>` }) .join("") - }</pre></code>` + }</code></pre>` } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/messages_sorted/Makefile new/git-town-24.1.1/tools/messages_sorted/Makefile --- old/git-town-24.1.0/tools/messages_sorted/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/messages_sorted/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/messy_output/Makefile new/git-town-24.1.1/tools/messy_output/Makefile --- old/git-town-24.1.0/tools/messy_output/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/messy_output/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/messy_output/main.go new/git-town-24.1.1/tools/messy_output/main.go --- old/git-town-24.1.0/tools/messy_output/main.go 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/messy_output/main.go 2026-11-06 13:28:50.000000000 +0100 @@ -29,8 +29,8 @@ } feature := ReadGherkinFile(path) scenarios := FindScenarios(feature, dialogStepRegex) - for _, error := range AnalyzeScenarios(path, scenarios) { - fmt.Println(error) + for _, err2 := range AnalyzeScenarios(path, scenarios) { + fmt.Println(err2) errors += 1 } return nil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/optioncompare/Makefile new/git-town-24.1.1/tools/optioncompare/Makefile --- old/git-town-24.1.0/tools/optioncompare/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/optioncompare/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/optioncompare_in_tests/Makefile new/git-town-24.1.1/tools/optioncompare_in_tests/Makefile --- old/git-town-24.1.0/tools/optioncompare_in_tests/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/optioncompare_in_tests/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/print_config_exhaustive/Makefile new/git-town-24.1.1/tools/print_config_exhaustive/Makefile --- old/git-town-24.1.0/tools/print_config_exhaustive/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/print_config_exhaustive/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/stats_release/Makefile new/git-town-24.1.1/tools/stats_release/Makefile --- old/git-town-24.1.0/tools/stats_release/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/stats_release/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/structs_sorted/Makefile new/git-town-24.1.1/tools/structs_sorted/Makefile --- old/git-town-24.1.0/tools/structs_sorted/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/structs_sorted/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/sync_rta_version/Makefile new/git-town-24.1.1/tools/sync_rta_version/Makefile --- old/git-town-24.1.0/tools/sync_rta_version/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/sync_rta_version/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/tests_sorted/Makefile new/git-town-24.1.1/tools/tests_sorted/Makefile --- old/git-town-24.1.0/tools/tests_sorted/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/tests_sorted/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/tools/use_equal/Makefile new/git-town-24.1.1/tools/use_equal/Makefile --- old/git-town-24.1.0/tools/use_equal/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/tools/use_equal/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,6 +1,6 @@ .DEFAULT_GOAL := help -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 RTA = ../rta@$(RTA_VERSION) fix: # runs all linters and auto-fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/vendor/modules.txt new/git-town-24.1.1/vendor/modules.txt --- old/git-town-24.1.0/vendor/modules.txt 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/vendor/modules.txt 2026-11-06 13:28:50.000000000 +0100 @@ -95,8 +95,8 @@ # github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f ## explicit; go 1.16 github.com/erikgeiser/coninput -# github.com/git-town/git-town/v24 v24.1.0 => . -## explicit; go 1.26.1 +# github.com/git-town/git-town/v24 v24.1.1 => . +## explicit; go 1.26.9 # github.com/go-fed/httpsig v1.1.0 ## explicit; go 1.13 github.com/go-fed/httpsig diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/Makefile new/git-town-24.1.1/website/Makefile --- old/git-town-24.1.0/website/Makefile 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/Makefile 2026-11-06 13:28:50.000000000 +0100 @@ -1,4 +1,4 @@ -RTA_VERSION = 0.40.0 # run-that-app version to use +RTA_VERSION = 0.40.0 .DEFAULT_GOAL := help diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/src/commands/propose.md new/git-town-24.1.1/website/src/commands/propose.md --- old/git-town-24.1.0/website/src/commands/propose.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/src/commands/propose.md 2026-11-06 13:28:50.000000000 +0100 @@ -24,7 +24,8 @@ - [GitHub](https://github.com) - [GitLab](https://gitlab.com) -You can configure the browser which Git Town opens using the +You can configure the browser +which Git Town opens using the [BROWSER environment variable](../preferences/browser.md). ## Options diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/src/commands/repo.md new/git-town-24.1.1/website/src/commands/repo.md --- old/git-town-24.1.0/website/src/commands/repo.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/src/commands/repo.md 2026-11-06 13:28:50.000000000 +0100 @@ -12,12 +12,14 @@ [GitLab](https://gitlab.com), [Gitea](https://gitea.com), [Bitbucket](https://bitbucket.org), and [Forgejo](https://forgejo.org). -You can configure the browser which Git Town opens using the +You can configure the browser +which Git Town opens using the [BROWSER environment variable](../preferences/browser.md). ## Positional arguments -When called without arguments, the _repo_ command shows the repository at the +When called without arguments, +the _repo_ command shows the repository at the [development remote](../preferences/dev-remote.md). When called with an argument, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/src/install.md new/git-town-24.1.1/website/src/install.md --- old/git-town-24.1.0/website/src/install.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/src/install.md 2026-11-06 13:28:50.000000000 +0100 @@ -125,7 +125,7 @@ [tools] "github:git-town/git-town" = "latest" # or a specific version -"github:git-town/git-town" = "24.1.0" +"github:git-town/git-town" = "24.1.1" ``` ## Manual installation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/src/install.sh new/git-town-24.1.1/website/src/install.sh --- old/git-town-24.1.0/website/src/install.sh 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/src/install.sh 2026-11-06 13:28:50.000000000 +0100 @@ -3,7 +3,7 @@ # This script installs the Git Town executable in the user's HOME directory. -VERSION=24.1.0 # the version of Git Town to install +VERSION=24.1.1 # 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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/src/introduction.md new/git-town-24.1.1/website/src/introduction.md --- old/git-town-24.1.0/website/src/introduction.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/src/introduction.md 2026-11-06 13:28:50.000000000 +0100 @@ -34,8 +34,8 @@ [GitHub Flow](https://docs.github.com/en/get-started/quickstart/github-flow), [Git Flow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow), [GitLab Flow](https://docs.gitlab.com/ee/topics/gitlab_flow.html), -[trunk-based development](https://trunkbaseddevelopment.com) -and even committing straight into the main branch. +[trunk-based development](https://trunkbaseddevelopment.com) and even committing +straight into the main branch. Git Town has special support for mono-repos and stacked changes. See also this [external review](https://www.softpedia.com/get/Programming/Other-Programming-Files/Git-Town.shtml). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/src/preferences/bitbucket-api-token.md new/git-town-24.1.1/website/src/preferences/bitbucket-api-token.md --- old/git-town-24.1.0/website/src/preferences/bitbucket-api-token.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/src/preferences/bitbucket-api-token.md 2026-11-06 13:28:50.000000000 +0100 @@ -14,8 +14,8 @@ that external applications can interact with Bitbucket in your name. To create an API token, open the [security settings of your Atlassian account](https://id.atlassian.com/manage-profile/security/api-tokens), -click `Create API token with scopes`, choose `Bitbucket` as the app, -and select these scopes: +click `Create API token with scopes`, choose `Bitbucket` as the app, and select +these scopes: - `read:user:bitbucket` - `read:repository:bitbucket` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/git-town-24.1.0/website/src/preferences/gitlab-token.md new/git-town-24.1.1/website/src/preferences/gitlab-token.md --- old/git-town-24.1.0/website/src/preferences/gitlab-token.md 2026-09-26 15:40:51.000000000 +0200 +++ new/git-town-24.1.1/website/src/preferences/gitlab-token.md 2026-11-06 13:28:50.000000000 +0100 @@ -7,8 +7,8 @@ [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) with `api` scope. You can create one in your account settings. -[account settings](https://gitlab.com/-/user_settings/personal_access_tokens) -or get one created for you by using the +[account settings](https://gitlab.com/-/user_settings/personal_access_tokens) or +get one created for you by using the [api connector type for GitLab](gitlab-connector.md). ## config file ++++++ git-town.obsinfo ++++++ --- /var/tmp/diff_new_pack.6v3fVY/_old 2026-11-06 20:07:22.718883810 +0100 +++ /var/tmp/diff_new_pack.6v3fVY/_new 2026-11-06 20:07:22.729884271 +0100 @@ -1,5 +1,5 @@ name: git-town -version: 24.1.0 -mtime: 1790430051 -commit: 2fabf99bfd18f6ddc4e80e23f970df4ce3de9ff5 +version: 24.1.1 +mtime: 1793968130 +commit: e66ec8b8b744bbe2ad5416dc4793e16b56a3e629
