summaryrefslogtreecommitdiffstats
path: root/pkg/commands
AgeCommit message (Collapse)Author
8 daysSpecifying branch name source from refs/heads for fast forwardingNeko Box Coder
8 daysRe-determine existing main branches if mainBranches config changedStefan Haller
8 daysStore Common instead of just the list of configured main branches in ↵Stefan Haller
MainBranches This will make it possible to change the configured main branches at runtime. We'll support this in the next commit.
8 daysChange direct access to Common.UserConfig to a getterStefan Haller
This will allow us to turn the field into an atomic.Value for safe concurrent access.
8 daysUse filepath instead of path for file path operationsStefan Haller
In practice, using path seems to work too, since Windows seems to be capable of dealing with a path like C:/x/y instead of C:\x\y; but it's cleaner to do this properly.
9 daysUse an interactive shell for running custom commandsStefan Haller
Also, use the user's shell (from the SHELL env variable) instead of bash. Both of these together allow users to use their shell aliases or shell functions in the interactive command prompt.
9 daysExtract helper function quotedCommandStringStefan Haller
Will be reused in the next commit.
10 daysAllow rewording for last commit using GPGNeko Box Coder
11 daysAdding guard to not do reword under git_commands when using gpgNeko Box Coder
2024-07-13Support setting the similarity threshold for detecting renamesIstván Donkó
2024-07-06Optimize number of early calls to GetRepoPathsJohn Whitley
This change reduces the number of calls during application startup to one, calling GetRepoPaths() earlier than previously and plumbing the repoPaths struct around to achieve this end.
2024-07-06Allow cycling between multiple log commandsMartin Kock
- Introduced a new optional user config command, allBranchesLogCmds - When pressing 'a' in the Status view, cycle between non-empty, non-identical log commands - There will always be at least one command to run, since allBranhesLogCmd has a default - Update documentation & write an integration test - Update translation string
2024-07-06Add Token credential request handlingAleksei Larkov
Asking for 2FA Token prompt when an additional authentication is configured for git over SSH
2024-07-04Update tracking behaviour for branches created from remote branchesT.
The current behaviour when creating a new branch off of a remote branch is to always track the branch it was created from. For example, if a branch 'my_branch' is created off of the remote branch 'fix_crash_13', then 'my_branch' will be tracking the remote 'fix_crash_13' branch. It is common practice to have both the local and remote branches named the same when the local is tracking the remote one. Therefore, it is reasonable to expect that 'my_branch' should not track the remote 'fix_crash_13' branch. The new behaviour when creating a new branch off of a remote branch is to track the branch it was created from only if the branch names match. If the branch names DO NOT match then the newly created branch will not track the remote branch it was created from. For example, if a user creates a new branch 'fix_crash_13' off of the remote branch 'fix_crash_13', then the local 'fix_crash_13' branch will track the remote 'fix_crash_13' branch. However, if the user creates a new branch called 'other_branch_name' off of the remote branch 'fix_crash_13', then the local 'other_branch_name' branch will NOT track the remote 'fix_crash_13' branch.
2024-06-30feat: squash mergeNoah
2024-06-26Add function os.PasteFromClipboardStefan Haller
And a user config to override it with a custom command.
2024-06-23Remove non-English translation sets, read them from JSON insteadStefan Haller
2024-06-23Fix custom patch operations on added filesStefan Haller
Several custom patch commands on parts of an added file would fail with the confusing error message "error: new file XXX depends on old contents". These were dropping the custom patch from the original commit, moving the patch to a new commit, moving it to a later commit, or moving it to the index. We fix this by converting the patch header from an added file to a diff against an empty file. We do this not just for the purpose of applying the patch, but also for rendering it and copying it to the clip board. I'm not sure it matters much in these cases, but it does feel more correct for a filtered patch to be presented this way.
2024-06-23Introduce options struct for RenderPatchForFileStefan Haller
We're going to add another argument in the next commit, and that's getting a bit much, especially when most of the arguments are bool and you only see true and false at the call sites without knowing what they mean.
2024-06-12Show "exec" todos in the list of rebase todosStefan Haller
Unfortunately it isn't possible to delete them. This would often be useful, but our todo rewriting mechanisms rely on being able to find todos by some identifier (hash for pick, ref for update-ref), and exec todos don't have a unique identifier.
2024-06-07feat: support range selection for commit attributes amendAzraelSec
2024-06-03Show divergence from base branch in branches listStefan Haller
2024-06-03Add GetBaseBranch functionStefan Haller
2024-06-03Make GetMergeBase a method of ExistingMainBranchesStefan Haller
2024-06-03Factor out CommitLoader.mainBranches into its own class, and store it in ModelStefan Haller
2024-06-03Remove the cache invalidation logic from getMergeBaseStefan Haller
It is a valid case for a branch to share no history with any of the main branches, in which case git merge-base returns an error (and an empty string). Since we can't distinguish this from one of the main branches having been deleted, we shouldn't invalidate the cache in that case.
2024-06-02Add HEAD: when referencing upstream branchJordan
Update unit tests
2024-06-01Use --force instead of --force-with-lease when remote is not stored locallyStefan Haller
--force-with-lease simply doesn't work in this case, it will always return a "stale info" error.
2024-06-01Rename Force to ForceWithLeaseStefan Haller
This describes better what it is, and we're going to add the regular --force in the next commit. No change in behavior in this commit.
2024-06-01Don't force-push if the remote branch is not stored locallyStefan Haller
This broke with #3528. If the remote branch is not stored locally, we only see question marks in the branch status. In this case we can't tell whether we need to force-push, so it's best to assume that we don't, and see if the server rejects the push, and react to that by asking to force push. This second part is also broken right now, we'll fix this in the next commit.
2024-05-19Correctly request force-pushing in triangular workflowsStefan Haller
To determine whether we need to ask for force pushing, we need to query the push branch rather than the upstream branch, in case they are not the same.
2024-05-19Add ahead/behind information for @{push}Stefan Haller
In a triangular workflow the branch that you're pulling from is not the same as the one that you are pushing to. For example, some people find it useful to set the upstream branch to origin/master so that pulling effectively rebases onto master, and set the push.default git config to "current" so that "feature" pushes to origin/feature. Another example is a fork-based workflow where "feature" has upstream set to upstream/main, and the repo has remote.pushDefault set to "origin", so pushing on "feature" pushes to origin/feature. This commit adds new fields to models.Branch that store the ahead/behind information against the push branch; for the "normal" workflow where you pull and push from/to the upstream branch, AheadForPush/BehindForPush will be the same as AheadForPull/BehindForPull.
2024-05-19Rename Pushables/Pullables to AheadForPull/BehindForPullStefan Haller
In preparation for adding AheadForPush/BehindForPush in the next commit.
2024-05-19Remove redundant variable dedeclarationsJesse Duffield
In go 1.22, loop variables are redeclared with each iteration of the loop, rather than simple updated on each iteration. This means that we no longer need to manually redeclare variables when they're closed over by a function.
2024-05-18Fix stashing partialy staged files for git version >= 2.35.0dsolerhww
Use `git stash push --staged` git feature available on git version > 2.35.0.
2024-05-15Use ScanLinesAndTruncateWhenLongerThanBuffer instead of bufio.ScanLinesStefan Haller
2024-05-15Put subject last in git log's prettyFormatStefan Haller
We are going to truncate overly long lines returned from git log, and the most likely field that is going to make the line too long is the subject; so we must put it last, otherwise we'd end up with not enough fields to split when it's too long. It might not be obvious from the diff what's happening to the mock command output in the test: it didn't have the divergence field (">") at all, which was kind of a bug. It didn't matter for these tests though, because we are not testing the divergence here, and our production code happens to be resilient against it missing. But now we must add the ">" field before the subject.
2024-05-15Handle scanner error in RunAndProcessLinesStefan Haller
Scanners can return errors (e.g. ErrTooLong), and if we don't handle it, the cmd.Wait() call below will block forever because nobody drains the command's output. This happens for CommitLoader.GetCommits when there's a commit whose subject line is longer than approx. 65500 characters; in that case, lazygit would lock up completely. With this fix it remains usable, but the commit list is truncated before the bad commit, which is not good enough. We'll improve that in the remaining commits of this branch.
2024-04-28chore: fix some comments and typosknowmost
Signed-off-by: knowmost <knowmost@outlook.com>
2024-04-25Support external diff command in diffing modeStefan Haller
2024-04-25Use git.paging.colorArg in diffing mode diffStefan Haller
2024-04-25Cleanup: use separate Arg calls for unrelated argumentsStefan Haller
2024-04-24chore: use errors.New to replace fmt.Errorf with no parameters.ChengenH
2024-04-22Drop update-ref commands at the top of the rebase-todo fileStefan Haller
The rebase.updateRefs feature of git is very useful to rebase a stack of branches and keep everything nicely stacked; however, it is usually in the way when you make a copy of a branch and want to rebase it "away" from the original branch in some way or other. For example, the original branch might sit on main, and you want to rebase the copy onto devel to see if things still compile there. Or you want to do some heavy history rewriting experiments on the copy, but keep the original branch in case the experiments fail. Or you want to split a branch in two because it contains two unrelated sets of changes; so you make a copy, and drop half of the commits from the copy, then check out the original branch and drop the other half of the commits from it. In all these cases, git's updateRefs feature insists on moving the original branch along with the copy in the first rebase that you make on the copy. I think this is a bug in git, it should create update-ref todos only for branches that point into the middle of your branch (because only then do they form a stack), not when they point at the head (because then it's a copy). I had a long discussion about this on the git mailing list [1], but people either don't agree or don't care enough. So we fix this on our side: whenever we start a rebase for whatever reason, be it interactive, non-interactive, or behind-the-scenes, we drop any update-ref todos that are at the very top of the todo list, which fixes all the above-mentioned scenarios nicely. I will admit that there's one scenario where git's behavior is the desired one, and the fix in this PR makes it worse: when you create a new branch off of an existing one, with the intention of creating a stack of branches, but before you make the first commit on the new branch you realize some problem with the first branch (e.g. a commit that needs to be reworded or dropped). It this case you do want both branches to be affected by the change. In my experience this scenario is much rarer than the other ones that I described above, and it's also much easier to recover from: just check out the other branch again and hard-reset it to the rebased one. [1] https://public-inbox.org/git/354f9fed-567f-42c8-9da9-148a5e223022@haller-berlin.de/
2024-04-22Switch git-todo-parser from fsmiamoto original repo to stefanhaller's forkStefan Haller
Sometimes it takes a while to get PRs accepted upstream, and this blocks our progress. Since I'm pretty much the only one making changes there anyway, it makes sense to point to my fork directly.
2024-04-12rename sha to hash 10, last remaining sha (hopefully)pikomonde
2024-04-12rename sha to hash 9, case: Shapikomonde
2024-04-12rename sha to hash 8, update some log and commentpikomonde
2024-04-12rename sha to hash 6, update short hashpikomonde
2024-04-12rename sha to hash 5pikomonde