Commit graph

4506 commits

Author SHA1 Message Date
Jesse Duffield 3557bc44ad Use double dash for disambuating path in editor templates 2023-07-29 18:34:43 +10:00
Jesse Duffield 201ec5307f Fix flakey worktree tests
In the presentation layer, when showing branches, we'll show worktrees against branches if they're
associated. But there was a race condition: if the worktree model was refreshed after the branches model,
it wouldn't be used in the presentation layer when it came time to render the branches.

A better solution would be to have some way of signalling that a particular context needs to be refreshed
and after all the models are done being refreshed, we then refresh the contexts. This will prevent
double-renders
2023-07-29 17:36:18 +10:00
Jesse Duffield ab4f310ce9 rename files 2023-07-29 17:36:18 +10:00
Jesse Duffield 40753e916d Write unit tests with the help of afero
Afero is a package that lets you mock out a filesystem with an in-memory filesystem.
It allows us to easily create the files required for a given test without worrying about
a cleanup step or different tests tripping on eachother when run in parallel.

Later on I'll standardise on using afero over the vanilla os package
2023-07-29 17:36:18 +10:00
Jesse Duffield 72ec7922ac Fix bug where worktree view would take over window upon switching branches
When switching worktrees (which we can now do via the branch view) we re-layout the windows and their views.
We had the worktree view ahead of the file view based on the Flatten() method in context.go, because it used
to be associated with the branches panel.
2023-07-29 17:36:18 +10:00
Jesse Duffield c9a19f0fbc Use forward-slashes on windows
We want to be using forward slashes everywhere internally, so if we get a path from windows
we should immediately convert it to use forward slashes.

I'm leaving out the recent repos list because that would require a migration
2023-07-29 17:36:18 +10:00
Jesse Duffield 6d48c0ead3 Add section in integration readme about testing against old git versions 2023-07-29 17:36:18 +10:00
Jesse Duffield 0e91a2f16e Add more i18n for worktrees 2023-07-29 17:36:18 +10:00
Jesse Duffield 693048eb29 Use fields rather than methods on worktrees
I would prefer to use methods to keep things immutable but I'd rather be consistent with the other
models and update them all at once
2023-07-29 17:36:18 +10:00
Jesse Duffield 873a68949e Centralise logic for obtaining repo paths
There are quite a few paths you might want to get e.g. the repo's path, the worktree's path,
the repo's git dir path, the worktree's git dir path. I want these all obtained once and
then used when needed rather than having to have IO whenever we need them. This is not so
much about reducing time spent on IO as it is about not having to care about errors every time
we want a path.
2023-07-29 17:36:18 +10:00
Jesse Duffield f8c18d074a Remove IO logic from presentation code for worktrees
We're doing all the IO in our workers loader method so that we don't need to do any
in our presentation code
2023-07-29 17:36:18 +10:00
Jesse Duffield 9fb0fe1e35 Add test for opening lazygit in the worktree of a bare repo 2023-07-29 17:36:18 +10:00
Jesse Duffield d599511c14 Remove dead function 2023-07-29 17:36:18 +10:00
Jesse Duffield 180908d244 Fix test by making branches appear deterministically
This fixes pkg/integration/tests/worktree/rebase.go which was failing on old git versions due to a difference in
order of branches that don't have recency values
2023-07-29 17:36:18 +10:00
Jesse Duffield 30cf274874 Allow entering a submodule by pressing space 2023-07-29 17:36:18 +10:00
Jesse Duffield 10287c0dc3 Allow entering a worktree by pressing enter 2023-07-29 17:36:18 +10:00
Jesse Duffield 939c573907 Update repo switch logic
We now always re-use the state of the repo if we're returning to it, and we always reset the windows to their default tabs.

We reset to default tabs because it's easy to implement. If people want to:
* have tab states be retained when switching
* have tab states specific to the current repo retained when switching back

Then we'll need to revisit this
2023-07-29 17:36:18 +10:00
Jesse Duffield 30d24d0954 Add test for retained context focus when switching worktrees 2023-07-29 17:36:18 +10:00
Jesse Duffield 4a2c21bc10 Support fastforwarding worktree 2023-07-29 17:36:18 +10:00
Jesse Duffield df78ffd081 Add more worktree tests 2023-07-29 17:36:18 +10:00
Jesse Duffield 0eac6483ec Add worktree tests for removing/detaching 2023-07-29 17:36:18 +10:00
Jesse Duffield 71070827f2 Add worktree integration tests 2023-07-29 17:36:18 +10:00
Jesse Duffield fb73bb7e25 Update cheatsheets 2023-07-29 17:36:18 +10:00
Jesse Duffield e782b77475 Remove worktree version guards
Our min required git version is 2.20 so there's no need to add guards
for worktrees because they were added in 2.5
2023-07-29 17:36:18 +10:00
Jesse Duffield d764f35c5d Fix unit tests 2023-07-29 17:36:18 +10:00
Jesse Duffield b06f938e00 Show loader when switching worktrees 2023-07-29 17:36:18 +10:00
Jesse Duffield ca0b966f44 Support older versions of git when fetching worktrees
Older versions of git don't support the -z flag in `git worktree list`.
So we're using newlines.

Also, we're not raising an error upon error because that triggers another refresh,
which gets us into an infinite loop
2023-07-29 17:36:18 +10:00
Jesse Duffield 514c2f0897 Fix tests
Going and fixing up some submodule tests which were broken by bad assumptions with worktree code
2023-07-29 17:36:18 +10:00
Jesse Duffield cef0186b7d Fix tests
We now change directories to the repo on startup so we don't need to determine the test path in some special way
2023-07-29 17:36:18 +10:00
Jesse Duffield af5ec473f3 Safer fetching of linked worktree paths 2023-07-29 17:36:18 +10:00
Jesse Duffield faa3a612eb Move worktrees tab to files window 2023-07-29 17:36:18 +10:00
Jesse Duffield 47717802f8 Change directory to worktree if given as an argument
Previously we used an env var for this and it's not clear to me how that worked but
with this PR current directory = worktree directory
2023-07-29 17:36:18 +10:00
Jesse Duffield b79d19e0a7 Support opening worktree in editor 2023-07-29 17:36:18 +10:00
Jesse Duffield 0cef35324f Properly render worktrees in files panel 2023-07-29 17:36:18 +10:00
Jesse Duffield 1638354474 Better logic for knowing which repo we're in 2023-07-29 17:36:18 +10:00
Jesse Duffield 96e41fa985 Only show worktree in status panel if not the main worktree and worktrees are supported 2023-07-29 17:36:18 +10:00
Jesse Duffield 4c1d706a85 Hide worktree functionality on old git versions 2023-07-29 17:36:18 +10:00
Jesse Duffield b6d5542b35 Associate branches with worktrees even when mid-rebase 2023-07-29 17:36:18 +10:00
Jesse Duffield 72d7b91640 Assume that the base of a worktree can be checked out 2023-07-29 17:36:18 +10:00
Jesse Duffield 32ceeaa43f i18n for worktrees 2023-07-29 17:36:18 +10:00
Jesse Duffield 82da8d7586 Don't quit on error 2023-07-29 17:36:17 +10:00
Jesse Duffield 096b8a19c5 Allow opening worktree in editor
This does the job but I think we need yet another editor command for opening a directory in a new window.
2023-07-29 17:36:17 +10:00
Jesse Duffield 8f51c80d76 Show base ref suggestions when creating worktree 2023-07-29 17:36:17 +10:00
Jesse Duffield 33fc54d6e2 Refresh work trees when discarding file changes
We do this because we may be deleting a worktree folder so we'll need to show that in the worktrees view
2023-07-29 17:36:17 +10:00
Jesse Duffield c8dcd002e2 Checkout worktree when creating from worktree view 2023-07-29 17:36:17 +10:00
Jesse Duffield 49b8806cc4 Use 'M' for months in branches panel 2023-07-29 17:36:17 +10:00
Jesse Duffield e2cef55f94 Fix filtering logic in worktrees view 2023-07-29 17:36:17 +10:00
Jesse Duffield 500c0eafb9 Support creating worktrees from refs 2023-07-29 17:36:17 +10:00
Jesse Duffield e0c8a56db5 Fix wording 2023-07-29 17:36:17 +10:00
Jesse Duffield 002e4eedf5 Log when directory is changed 2023-07-29 17:36:17 +10:00