./devel/lazygit, Simple terminal UI for git commands

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]

Branch: CURRENT, Version: 0.37.0nb1, Package name: lazygit-0.37.0nb1, Maintainer: pkgsrc-users

lazygit is a CLI tool to handle git repositories, written in Go with the
gocui library. You can add files easily, resolve merge conflicts,
checkout recent branches easily, scroll through logs/diffs of
branches/commits.stash, push/pull quickly, squash down and rename
commits in CLI.

Master sites:

Filesize: 4114.605 KB

Version history: (Expand)

CVS history: (Expand)

   2023-03-08 14:39:00 by Benny Siegert | Files touched by this commit (131) | Package updated
Log message:
Revbump all Go packages after go119 security update
   2023-03-04 16:35:51 by pin | Files touched by this commit (3) | Package updated
Log message:
devel/lazygit: update to 0.37.0

 - (#2288) quote remoteName before compiling regex by @nils-a in #2290
 - Resolve the prompt just before using it by @mark2185 in #2296
 - [#2279] defaultFgColor entry in theme config by @arnaudperalta in #2284
 - bump gocui by @Ryooooooga in #2276
 - fix ignore file keybinding by @jesseduffield in #2303
 - Commit in staged/unstaged menu by @arnaudperalta in #2298
 - updated rebase confirmation message by @navazjm in #2315
 - migrate branch reset integration test by @jesseduffield in #2320
 - Add credential prompts for U2F-backed SSH keys by @bdach in #2239
 - migrate more tests by @jesseduffield in #2323
 - more integration test migrating by @jesseduffield in #2325
 - Yet more test migrations by @jesseduffield in #2329
 - fix diff scroll #2309 by @Ryooooooga in #2326
 - more integration test refactoring by @jesseduffield in #2330
 - more integration test refactoring by @jesseduffield in #2334
 - rename from asserter to driver by @jesseduffield in #2335
 - remove unused config by @Ryooooooga in #2331
 - Add the return alternative key to return in the input box by @wakaka6 in #2311
 - migrate some more tests by @jesseduffield in #2336
 - Add easter egg by @jesseduffield in #2338
 - add support for git push --force-if-includes by @Ryooooooga in #2333
 - more integration test migrations by @jesseduffield in #2339
 - support for older Git versions by @Ryooooooga in #2340
 - Add option to allow --verbose commit in editor commits by @knutwalker in #2341
 - fix goroutine leaks by @Ryooooooga in #2345
 - docs(Config.md): add missing keybindings by @Ryooooooga in #2356
 - change git.commit.verbose to accept "default" by @Ryooooooga in #2343
 - feat: create environment for every PR using Uffizzi by @daramayis in #2262
 - fix installation scripts for Ubuntu by @Ryooooooga in #2372
 - fix ReplacePlaceholderString by @Ryooooooga in #2376
 - remove unused texts by @Ryooooooga in #2388
 - Add option to disable the "reword in editor" prompt by \ 
@stefanhaller in #2384
 - allow to disable git.log.order by @Ryooooooga in #2401
 - fix RefName of detached HEAD to works in Chinese by @Ryooooooga in #2398
 - Ensure trailing LF when copying diff lines to clipboard by @stefanhaller in #2395
 - Added copy to clipboard option to the patch options by @phanithinks in #2373
 - Added new gui.screenMode key to config by @phanithinks in #2358

We've got a whole lot of stuff in this release: improvements to the editor,
better custom commands support, snappier staging of files, a tonne of bug
fixes, and lots more.

One particularly cool thing that we've added is Github codespaces support
(in the repo, not within the Lazygit program itself), so if you've got your eye
on an open issue and want to move things along, consider spinning up the lazygit
codebase in a code_space_ and having a go at adding a feature / fixing a bug all
from the comfort of your browser! See here for more info.

As you can see @Ryooooooga and @mark2185 continue to kick goals with a heap of
features and bug fixes in this release, but we also have a whole host of new
contributors too. If you want to get involved in contributing, you can peruse
the issues board for issues with the good-first-issue label, or jump into the
Fortress of Laziness, our new discord server
What's Changed
Editor stuff
 - add support for excluding files by @gozes in #2016
 - add support for emacs keybindings in editor by @Ryooooooga in #2183
 - allow emacs character navigation in the commit editor (jump word left/right).
   by @LiamKearn in #2104
 - navigate by word in the editor by @Ryooooooga in #2204

Custom commands stuff
 - Add showOutput option to custom commands (fixes #1163) by @sportshead in
 - Improve custom commands interface by @Mihai22125 in #2109
 - Allow OSCommand.Quote to be invoked within a custom command by @Ryooooooga
   in #2193
 - add SelectedPath to the list of placeholder values by @mark2185 in #2070

Other stuff
 - add stash option to include untracked files by @ajhynes7 in #1980
 - add optimistic rendering for staging and unstaging files by @jesseduffield
   in #2072
 - rename stash by @Ryooooooga in #2220
 - Show active branch for recent repo by @mark2185 in #2005
 - Support custom SSH usernames on BitBucket by @xxdavid in #2087
 - Preserve trailing newline setting when adding to gitignore by @mark2185 in
 - Add notARepository: quit config option to exit Lazygit if run from outside a
   git repo by @Ryooooooga in #2098
 - add stash icon by @Ryooooooga in #2219
 - allow null in keybindings by @Ryooooooga in #2222

Bug fixes:
 - Fix rewording a merge commit with editor by @mark2185 in #2065
 - Improved mouse behaviour with international text @mark2185 in #2064
 - No more 'unversioned' in the bottom right: add build info when building from
   source by @jesseduffield in #2076
 - fix initial origin of commit message panel by @Ryooooooga in #2221
 - fix issue caused by opening a menu over a prompt by @jesseduffield in #2079
 - fix hidden suggestions by @jesseduffield in #2093
 - Gracefully error on bare repositories by @nullishamy in #2067
 - Fix open commit in browser for some Gitlab repos by @jtraub in #2132
 - fix initial scroll position of edit box by @Ryooooooga in #2123
 - fix initial origin of editor box by @Ryooooooga in #2146
 - Validate --path argument when starting lazygit by @mark2185 in #2092
 - Ignore stderr when loading git status by @Ryooooooga in #2081
 - fix: read one line before resuming TUI to prevent unintentional operations
   by @kawaemon in #1636
 - allow amending merge commits by @mark2185 in #2164
 - various improvements to text rendering by @Ryooooooga in #2195
 - fix glitchy render of stale data by @jesseduffield in #2196
 - fix stash with empty message by @Ryooooooga in #2218
 - fix could-not-access error by @jesseduffield in #2260
 - use better colour defaults (note: theme.lightTheme is no longer a thing) by
   @jesseduffield in #2257
 - Update go-git to handle negative refspecs by @lukaspiatkowski in #2232
 - Fix/show loading state when bottomline disabled by @artvi in #2273
 - fix ambiguous branch name by @Ryooooooga in #2224

 - docs(readme): Added lazygit install method on ubuntu #2125 by @yofreee in
 - fix: document link by @eetann in #2108
 - fix typo in README.md by @luzpaz in #2086
 - fix: how to change the config dir for MacOS by @0123takaokeita in #2169

 - Fix github linter errors by @mark2185 in #2069
 - Add better support for OpensMenu option when creating a menu by
   @jesseduffield in #2071
 - Update bug_report.md by @mark2185 in #2062
 - refactor to use generics for file nodes by @jesseduffield in #2075
 - handle nil properly with file nodes by @jesseduffield in #2077
 - Refactor: one context per view by @jesseduffield in #2023
 - refactor merge conflicts code by @jesseduffield in #2088
 - allow rendering to main panels from anywhere by @jesseduffield in #2089
 - Add new integration test pattern by @jesseduffield in #2094
 - even better structure by @jesseduffield in #2113
 - give menu formatting to ignore-or-exclude keybinding option by @mark2185 in
 - add more integration tests by @jesseduffield in #2114
 - fail on vendor directory mismatch by @jesseduffield in #2116
 - improve integration test portability by @Ryooooooga in #2124
 - chore: remove duplicate word in comments by @Abirdcfly in #2143
 - Migrate some more integration tests by @jesseduffield in #2137
 - remove deprecated function calls by @xiaoliwang in #2167
 - strip NUL bytes instead of replacing with space by @jesseduffield in #2197
 - Replace regex for retrieving latest version by @TomBaxter in #2199
 - use boxlayout from lazycore by @jesseduffield in #2210
 - Use lazycore utils: Clamp and GetLazyRootDirectory by @gusandrioli in #2223
 - add devcontainer folder by @jesseduffield in #2266
 - disable underscores in vscode by @jesseduffield in #2269
 - use tempdir in tests to prevent polluting worktree by @jesseduffield in
 - stop switching focus to commits view when resetting by @jesseduffield in
 - added gitVersion to version flag by @nitinmewar in #2265
 - Merge loaders package into git_commands package by @sudoburt in #2261

 - Nerd fonts now supported! (@Ryooooooga)
 - Scrollbars! (non-interactive but cool nonetheless)
 - Diff hunks can now be edited directly (via a subprocess) (@Ryooooooga)
 - You can open lazygit to the panel that you care about e.g. run lazygit log
   to open lazygit to the commits panel. (@HiromasaNojima)
 - Most menus now have their own keybindings for each menu item, which should
   speed things up for power users.
 - You can now easily set/unset the upstream of a branch (@mark2185)
 - You can now select to stash exclusively unstaged/staged files (@mark2185)
 - Improved update flow (@moha-gh)
 - Fixed issue where we duplicated line breaks when parsing a commit message
   Don't duplicate line breaks when retrieving commit message (@moha-gh)
 - Some hard-to-reverse actions now have confirmation popups given it's easy to
   accidentally press the wrong key.
 - 'Gone' branches are now marked as such
 - More commit attributes can be copied with the 'y' key (@mark2185)
 - Custom commit author colours can now be specified with regular names (e.g.
   'red') instead of only hex codes. (@Ryooooooga)
 - Commit author can now be set to another author or reset to the current git
   user (thanks @JensPfeifle)
 - Auto-refresh of files can be disabled with the git.autoRefresh config option
 - We now (again) honour push.default config value. In general we want to err
   on the side of having git commands do the same thing that would happen if
   you ran them directly from the terminal.
 - Files can now be opened from the merge conflicts panel (thanks @Ryooooooga)
 - You can now configure to always show the unstaged and staged changes panels,
   regardless of whether the selected file has both unstaged and staged changes.
   This can be done via gui.splitDiff: 'always' (@HiromasaNojima)
 - Commit time format can now be customised via the gui.timeFormat config key
 - We now record the current directory on switch instead of exit (@davdroman)
 - We now support Bitbucket server PRs (thanks @TheBlob42)
 - Bottom line (containing some keybindings help) can now be hidden via
   gui.showBottomLine: false in your config.
 - You can now show the whole git graph in the commits panel by default via
   git.log.showWholeGitGraph: true
 - Some UI tweaks.

Bug fixes
 - Various fixes to bugs relating to double-width characters (@Ryooooooga)
 - Typo fixes (@casswedson)
 - LOTS of other bug fixes (thanks to the glorious @Ryooooooga and @mark2185)

Translation updates:
 - Chinese translated updated (@Crystal-RainSlide)
 - Japanese translation added (@Ryooooooga)
 - Korean translation added (@Shin-JaeHeon)

HUGE thankyou to all the contributors who've helped bring about this release.
As you can see @mark2185 and @Ryooooooga are behind many of the the changes so
a special thankyou to the both of you!

Maintenance stuff:
We've now on go1.18 meaning we can use generics. The lo package is our main
generics helper package. I've also rolled my own, called 'generics', but I'll
probably end up just committing to using lo only.

Integration tests in CI are now run in parallel, and windows builds are now
properly cached, so CI runs much faster and you'll sooner know if you've broken
a test.

Note from maintainer:

I'm working on some tricky features like the ability to filter the contents of
a list panel, some of which I've recorded on youtube. As part of that work I've
had to make a detour to do some yak shaving and refactoring (which is happening
in #2023)

I've also made a video showing how to add a basic feature to Lazygit for
aspiring contributors. If you would like to see similar videos/docs covering
other topics to make life easier for new/existing contributors, lemme know!

At some point I want to take time off work to go full-time on Lazygit (e.g. for
a few months). If you have any ideas how I could raise money to do that, let me
know! And of course for all those currently sponsoring, thankyou so much, it's
a big motivator for me finding the time to work on this project.

Some more rambling thoughts:

The integration test suite has some good coverage but the mechanism behind it
(recording a Lazygit session and having the test replay that session) is hard
to maintain. I want to switch to having integration tests be built by calling
a bunch of commands in sequence, similar to Cypress if anybody's used that.

I was holding off this release for the sake of a better in-app release notes
feature but that can wait for a future release.

 - You can now customise the colour of unstaged files via the
   gui.theme.unstagedChangesColor config key (thanks @snorrwe )
 - Editing a file will now open your editor at the currently selected line for
   most major editors (thanks @mark2185 )
 - Support for opening Azure DevOps repos (thanks @tiwood )
 - You can now skip the confirmation prompt after running a subprocess with the
   promptToReturnFromSubprocess config key (thanks @rambhosale )

Bug Fixes:
 - Fixed issue where mouse handling was not properly restored after leaving the
   application (thanks @tmatz )
 - Fixed bug where files could not be edited at particular lines for certain
   editors (thanks @fsmiamoto )

 - Some cleaning up of the docs (thanks @moha-gh )
 - NL translation fixups (thanks @Alpakash )
 - Fixed an issue with the cheatsheet generator that caused the user's own
   language to appear in each output translation file.

Note from maintainer:

I'm going to merge in quite a large refactor PR to the master branch. The
refactor is about 90% done but the 10% might take some time and it's tricky to
have to re-implement all PRs from contributors to the new branch. At any rate
this refactor should make the code easier to work with compared to the previous
god struct (the Gui struct) that was being used for everything. The new
structure no doubt will have its own flaws that I'll need to work through over
time. I've been using the refactor PR myself for a while and haven't run into
any bugs, and I've added some more integration tests to capture more of the
expected behaviour. Don't hesitate to raise an issue for any bug you find.

 - Git bisect support (press 'b' on a commit to start the process)
 - On windows we now set the window title to the name of the opened repo
   (thanks @birgersp)
 - You can now set custom branch colours in your config (see here)
   (thanks @matt-cles )

Bug Fixes:
 - We now always specify the upstream when pushing/pulling so you'll never
   accidentally push to an unexpected remote branch
 - Fixed bug that prevented quitting with a confirm popup
 - Fixed issue with scrolling in the merge panel
 - We no longer show the branch graph when filtering by path because it didn't
   make sense to show it
 - Fixed a bug where a custom git hosting service wasn't given precedent over a
   default hosting service (thanks @bin101)
 - Added Mouse support for crostini (thanks @tmatz)
 - Proper URL encoding for pull request URLs (thanks @MikaelElkiaer)

 - Performance improvements
 - We now ask for confirmation upon reverting a commit (thanks @glendsoza)
 - Resetting a submodule can now only be done from within the files panel
 - Documentation updates (thanks @jm33-m0, @mark2185)
 - Chinese translation update (thanks @bnoctis)

For Contributors:
 You can now run an integration test in 'sandbox' mode meaning you get to
 control what happens during the session but no snapshot is saved. It's a
 convenient way of testing a feature with a given pre-built example repo.
 I've replaced the contributor code of conduct with a very stripped down
 version that basically says 'be nice'. The original was a little intense and
 didn't reflect the natural level of charity and positivity in the issues board.
 If people have an issue with that let me know.
 I've added some extra sections to the contributing guide including:
        how the codebase (intentionally) diverges from some Go idioms

Note from maintainer:

Still working on this gui package refactor. I expect the health of the codebase
to increase quite a bit with the change. I regret not trying to slice it up
into smaller pieces but hopefully I'll have learnt my lesson next time.
We might need to rethink how integration tests are done. Right now it's a
direct recording which can make the tests difficult to update.

 - 8ca71ee add git bisect run script
 - d3a3c8d add integration test for merge conflicts resolved externally
 - ee622d0 add integration test for staging view
 - 2691477 allow sandbox mode with integration tests
 - 1c84f77 always specify upstream when pushing/pulling
 - 7a690f9 appease CI
 - 8d8bdb9 avoid deadlock in merge panel
 - ae98797 do not show branch graph when in filtering mode
 - befa356 fix bug which prevented quitting with confirm
 - 0092c9d fix bug with subprocess
 - 9903595 fix merge scroll bug
 - 595aca2 make integration test pass
 - dafac52 see if this fixes CI linting
 - cdcfeb3 stop refreshing the screen so much

 - f5b9ad8 add complex custom command integration test
 - 8263d15 fix issue where custom command would not open a menu

 - You can now press 'o' on a commit to open it in your browser
 - We now retain the commit message you typed in the event that the commit
   command failed (thanks @jakobkogler)
 - You can now reword old commits from within lazygit
 - You can now create annotated tags (press 'n' in the tags panel) (thanks
 - You can now add a signoff to your commits via the git.commit.signoff key in
   your config (thanks @sagikazarmark)
 - You can now specify a single colour to apply to all commit authors (thanks

Bug Fixes:
 - Better highlighting of lines for various terminals (thanks @Kavantix)
 - Fixed bug where we couldn't go to the bottom of the reflog panel (thanks
 - Better support for --path arg (thanks @TicClick)
 - Fixed a bug where you couldn't create a pull request when the repo's url
   scheme was ssh (thanks @kawaemon)
 - We now make fewer assumptions that your main remote is named 'origin'
   (thanks @mbrgm)
 - Fixed some copy inconsistencies (thanks @justinsb)
 - Fixed bug where branches would appear twice in the branches panel

 - Added installation instructions for funtoo linux (thanks @invakid404)

For Contributors:
CI now checks that the cheatsheet files are up-to-date. If it hasn't you'll
need to run go run scripts/cheatsheet/main.go generate

Note from maintainer:

The codebase has grown quite a bit since its inception and it's in need of some
refactoring to make future growth easier. I've wrapped up some refactoring to
the internal commands package so that we've got better namespacing and
separation of concerns, and I'll be shifting my gaze to the GUI package next.
Once I'm happy with the structure of the code I'll start producing some
documentation so that new contributors can easily get started on features and
bug fixes. Many changes to the app are trivial to make but it can take a new
contributor time to work out where everything lives in the code.
   2023-02-16 16:02:10 by Benny Siegert | Files touched by this commit (129) | Package updated
Log message:
Revbump all Go packages after go119 update
   2023-01-11 18:28:38 by Benny Siegert | Files touched by this commit (123) | Package updated
Log message:
Revbump all Go packages after go119 update
   2022-12-08 17:14:27 by Benny Siegert | Files touched by this commit (122) | Package updated
Log message:
Revbump all Go packages after go119 security update
   2022-11-02 20:39:58 by Benny Siegert | Files touched by this commit (115) | Package updated
Log message:
Revbump all Go packages after go119 security update
   2022-10-05 13:33:09 by Benny Siegert | Files touched by this commit (113) | Package updated
Log message:
Revbump all Go packages after go119 security update
   2022-09-26 20:40:24 by Benny Siegert | Files touched by this commit (113)
Log message:
Revbump all Go packages after 1.19 became default