Commit graph

658 commits

Author SHA1 Message Date
Tim 450615d48f
Fix git options (#296)
Adding options to a command in a quoted variable as introduced in #292
causes problems in several cases unfortunately (e.g. git rebase
interpreting an empty string argument as a remote, which leads to an
error "unknown upstream ''").

Change the implementation in a way that each git command is stored in a
shell variable, including the options, which is then evaluated.
This also makes the code more DRY because each git options variable is
evaluated only once.

Furthermore, fix temporary IFS settings. When setting the IFS for a
certain command only, the command must not be an assignment, otherwise
both assignments are evaluated permanently
(see https://unix.stackexchange.com/a/458901/317320).
2023-03-18 16:18:11 +01:00
Tim 2a2ee36d56
Add git options for each forgit command (#292)
The git behavior within forgit can now be customized with a dedicated
variable for each forgit command, e.g. `FORGIT_ADD_GIT_OPTS` is passed
to the `git add` call within `ga`.

Also renaming `FORGIT_STASH_PUSH_OPTS` to `FORGIT_STASH_PUSH_FZF_OPTS`
and `FORGIT_REVERT_COMMIT_OPTS` to `FORGIT_REVERT_COMMIT_FZF_OPTS`
for consistency.
2023-03-18 12:25:20 +01:00
Tim f32fd305dc
Fix broken cherry picking (#294)
With the changes of #261 and #266 we accidentally broke the return value
of `_forgit_cherry_pick`, which led to the loop in
`_forgit_cherry_pick_from_branch` being terminated in the wrong cases.
Fix this by moving all the post processing after fzf to a later call.

Also simplify the array population using a single line instead of a
loop.

This should also fix #286 ("fatal: bad revision ''").
2023-03-18 12:19:39 +01:00
Tim 4b8234a9ff
Only show available cherry picks in preview (#293)
This is a follow-up to #266, which already switched to showing only
available commits during cherry-picking. This patch does the same for
the branch preview in _forgit_cherry_pick_from_branch.
2023-03-18 12:10:26 +01:00
Anshuman Medhi 9bb53dc455
Detect unexported variables in fish correctly (#290)
Fixes #289
2023-03-16 09:55:52 -07:00
Tim 8012396587
Fix empty diff preview on renames (#282)
This had been fixed before in #189, but obviously the patch broke
support for whitespaces in file names. That was fixed in #204, which
in turn broke support for renames again.

Prepare the list of file names with the null-character \0 as a delimiter,
so that we can use "xargs -0" to read it. This makes renames as well
as filenames with spaces work correctly.
2023-02-28 22:57:51 +01:00
Christian Fratta 065f7841f3
Meta: Include oh-my-zsh install instructions in README (#283) 2023-02-10 10:26:59 +01:00
Tim aa85792ec4
Add bash completions for forgit functions and aliases (#275)
When using forgit via the shell plugin, source 'git-forgit.bash'
explicitly after 'forgit.plugin.zsh' to enable tab completion for forgit
shell functions and aliases.
2023-01-30 17:46:52 +01:00
ZenLian 8502ae2cc5
fix: glo can not match files (#249)
Fixed "glo -- <files>" behavior to show specified files only instead of
showing all changed files.
2023-01-30 17:43:17 +01:00
sandr01d c098bf2fb1
Modify multiple files at once in ga & gcf (#279)
Checkout/Add files in a single command in _forgit_add and _forgit_checkout_file() instead of processing each file individually with xargs. This has the following benefits:

    It's faster
    Prevents git from spamming "Updated 1 path from the index" for each file when checking out files
2023-01-20 11:49:55 -08:00
sandr01d be8c306c18
Add alias gct for forgit::checkout::tag in fish (#278)
Noticed there was another alias missing for fish. This is the last one :)
2023-01-13 14:59:52 -08:00
Chris Apple 98637db1b0
Only show available cherry picks (#266)
Only shows changes that are eligible for cherry-pick to the branch, not every commit. Also adds nice color to the output
2023-01-11 10:50:41 -08:00
Tim 73aea65778
Add bash completions for git-forgit (#235)
When using forgit as a subcommand of git, put 'git-forgit.bash' in one
of the following places and it will be loaded automatically on tab
completion of 'git forgit' or any configured git aliases of it:

- /usr/share/bash-completion/completions
- ~/.local/share/bash-completion/completions
2023-01-11 10:57:16 +01:00
Tim 548af731f0
Fix command list in help output (#274)
'rebase' and 'fixup' were accidentally displayed on the same line.
2023-01-11 10:22:53 +01:00
sandr01d 329523bd0d
Fixed: Untracked files with spaces in the path do not show a preview in 'ga' (#271) 2023-01-11 08:47:40 +01:00
sandr01d d1a5530042
Add alias gbl for forgit::blame in fish (#273)
Added the alias gbl for forgit::blame to the fish wrapper, so the behavior in fish is the same as in bash/zsh. I've also deleted an empty line where there were two in a row.
2023-01-10 13:37:35 -08:00
sandr01d 92ce3007c0
Fish: assume forgit in vendor_conf.d in case it can not be found in conf.d (#272)
In the fish wrapper, assume forgit-git to be in vendor_conf.d/bin in case it can not be found in conf.d/bin. This fixes forgit not working with fish when located in /usr/share/fish/vendor_conf.d, as is the case with the forgit and forgit-git AUR packages. The location at conf.d is kept (and stays the default), so forgit does not break compatibility with fish plugin managers, such as fisher.

Closes #270
2023-01-10 11:41:32 -08:00
Chris Apple ffda73bac3
Adding the ability to grh from a subdirectory (#262)
grh didn't work if you were in a subdirectory. See #254 for more details
2022-12-19 10:57:58 -08:00
Chris Apple 5a117b63cd
Ensure that grc and gcp always have the correct ordering, regardless of how they were input (#261) (#253)
Closes #253. Essentially the idea is this:

    When cherry picking a group of commits, most of the time you want to cherry pick oldest to newest. This means you have the lowest chance of having a conflict or error
    when reverting a commit. You most often want to revert from newest to oldest. Similarly prevents errors

This commit does that, based on the wonderful suggestion on how to do that from @carlfriedrich in the linked ticket (#253).
2022-12-16 06:50:28 -08:00
Changsheng Wu 8ca463b5c6
Do not hardcode $SHELL path for bash (#260)
Some systems do not have /bin/bash. e.g., Alpine and NixOS. This change reads
the path dynamically via `which`. It solves the error `fork/exec /bin/bash`.
2022-12-15 09:34:11 +01:00
sandr01d f8c0edfc17
Added git stash push selector 'gsp' (#251)
A message can be passed via named argument (-m or --message). All other
arguments (e.g. file paths) will cause git stash push to be run directly without
invoking fzf.
2022-12-14 15:53:52 +01:00
Chris Apple 62cc8abde1
Provide an input branch with gcp again (#252)
Noticed there was a change recently that broke the ability to pass in an input branch to gcp.

This change is the following:

    Fix faulty logic that just led to a git checkout -b being called when you pass in an argument to gcp
    If an argument was passed in, check if it is a valid branch, if so, set the input_branch var
    If input_branch is set, use it to do the cherry pick, as opposed to the first FZF selection.
2022-12-13 16:42:07 -07:00
Markus Meier bfea8cf485
fix: compatibility check not working in bash (#258)
Fix: backwards compatibility check not working reliably in bash
2022-12-09 09:54:58 +01:00
Tim 4b251aab22
Meta: GitHub tag action: add commit key (#248)
The COMMIT_KEY secret contains a private SSH key. The associated public
key has been added as a deploy key in the GitHub project. See:
https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys

This is necessary to make commits done by github-actions able to trigger
further github-actions. See:
https://stackoverflow.com/q/60418323/3018229.
2022-12-06 11:14:32 +08:00
Tim 59dd63be77
Fix forgit diff displaying renames on MacOS (#250)
MacOS's 'sed' variant obviously does not parse '\t' as a tabstop per
default. Replacing it with a literal tabstop to make this work.
2022-12-02 08:33:07 +01:00
Chris Apple d0959eb001
Adding a wraps to get fish to autopopulate branches (#255) 2022-11-29 11:01:33 -08:00
Tim 42c8e005fe
glo: use forgit::diff when entering a commit (#219)
When using glo (forgit log) we can press Enter to show the changeset of
the selected commit. The presentation, however, was rendered using the
basic git diff command. We have a much more user friendly diff command
gd (forgit diff) right in forgit, though. Use this instead.
2022-11-26 13:28:25 +01:00
Tim 43f5f1c58e
Merge pull request #241 from carlfriedrich/move-implementation-to-standalone-forgit
Move implementation to standalone forgit
2022-11-26 13:10:26 +01:00
Tim 98321ef05a
Merge pull request #247 from carlfriedrich/improve-release-actions
Improve release actions
2022-11-24 15:31:01 +01:00
carlfriedrich 402de02eea Meta: GitHub release: update to checkout@v3
checkout@v2 uses deprecated Node.js 12. See:
https://discourse.julialang.org/t/node-js-12-actions-deprecation-warning-on-github/88718
2022-11-24 15:08:30 +01:00
carlfriedrich e6e3ba4ce5 Meta: GitHub tag action: add git log to output for debugging purposes 2022-11-24 15:00:59 +01:00
carlfriedrich 8e292f710b Meta: GitHub tag action: improve regex for version matching 2022-11-24 15:00:12 +01:00
carlfriedrich fb0b22890d Meta: GitHub tag action: fix getting of HEAD tag 2022-11-24 14:59:06 +01:00
carlfriedrich f3d9d62776 Meta: GitHub tag action: pass GitLab URL as an env variable
GitHub action variables are not available in called shell scripts. They
have to be explicitly passed from the YAML file. See:
https://github.com/orgs/community/discussions/27027
2022-11-24 14:55:49 +01:00
carlfriedrich 37f21753ae Meta: change line-endings from CRLF to LF 2022-11-24 14:54:00 +01:00
Wenxuan a1d1d990ec
Merge pull request #246 from carlfriedrich/add-release-action
Automatic releases
2022-11-24 09:05:51 +08:00
carlfriedrich f0e9e4f748 Meta: Add GitHub tag action
The action is executed on every first day of a month. It checks whether
the current master is already tagged and, if not, creates a new release
tag.
2022-11-23 19:02:01 +01:00
carlfriedrich eedf3ae890 Meta: Add GitHub release action
The action is executed on every tag and creates a GitHub release. The
release contains a .tar.gz asset and a changelog consisting of all
commit messages since the previous tag. Commits with a commit message
starting with "Meta" are excluded from the changelog.
2022-11-23 17:42:42 +01:00
carlfriedrich 785c3f9774 Display useful error message if no or wrong command given 2022-11-21 10:56:58 +01:00
carlfriedrich da9210e972 Meta: update documentation 2022-11-17 10:19:32 +01:00
carlfriedrich 372239fd37 Export user-defined FORGIT variables for backwards compatibility
Before forgit became a standalone script, users defined their FORGIT
variables (e.g. FORGIT_FZF_DEFAULT_OPTS) in the shell environment before
sourcing the forgit shell plugin. This worked because the forgit code
was executed within the currently running shell.
With forgit being an executable script, these variables are only
available to forgit when being exported. This patch adds an automatism
for this so that users do not have to change their configuration.
A warning is issued in this case so that users get notified to update
their configuration.
2022-11-17 10:19:32 +01:00
carlfriedrich 49def1fe91 Fish plugin: do not quote passing of $argv
Fish stores command line arguments in $argv, which is an array. Unlike
in bash, when passing this array to a function, we must not enclose it
in double-quotes. This made an empty argument list (i.e. no arguments
passed) to an actual empty string argument (i.e. one argument passed),
which is not what we want.

See https://stackoverflow.com/a/42379014/3018229
2022-11-17 10:19:32 +01:00
carlfriedrich 26f0f5c1e1 Ensure that fzf preview commands are executed in bash
All preview commands are written in bash now. fzf, however, uses the
shell defined in $SHELL to run the preview commands. We have to force
this to bash within forgit in order to not get any errors on different
default shells.
2022-11-17 10:19:29 +01:00
Wenxuan Zhang fe4ac0f9f2
ci: update stale config
Signed-off-by: Wenxuan Zhang <wenxuangm@gmail.com>
2022-11-15 15:46:34 +08:00
carlfriedrich 0820811862 Add variable for forgit binary 2022-11-14 17:53:00 +01:00
carlfriedrich b2d24138df zsh plugin: exit with an error if bin path cannot be determined 2022-11-14 17:53:00 +01:00
carlfriedrich 58882fd6ba fish plugin: move function order to match zsh version
Also add checkout::tag and blame, which were missing.
2022-11-14 17:53:00 +01:00
carlfriedrich 9471f292bb zsh plugin: use standardized $0 handling
See https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html#zero-handling
2022-11-14 17:53:00 +01:00
carlfriedrich 4995c614e4 Move implementation to standalone forgit
Previously we had two different forgit implementations: one for zsh/bash
and one for fish. In this commit we move the bash implementation of the
forgit functions to the git-forgit script in order to have them in the
form of an executable script. This makes using forgit possible without
any shell plugin at all and furthermore removes the need to maintain a
separate implementation for the fish shell.

The simplest way of using forgit from now on is to put git-forgit
somewhere in your PATH and call it via "git forgit", without the need
for any other files.

We keep the shell plugins, though, and maintain backwards compatibility
by retaining the plugin functions as simple wrappers around the
git-forgit script, making the plugins mainly a collection of aliases
only.
2022-11-14 17:52:58 +01:00
Tim 2872548075
GitHub actions: update to Ubuntu 22.04 (#240)
The Ubuntu 18.04 CI image is deprecated:
https://github.com/actions/runner-images/issues/6002

Switch to the new 22.04 image instead.
2022-10-14 16:05:53 +02:00