1
0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2025-12-12 15:34:50 +08:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Amaan Mujawar
3bd1679b8d
Merge 0c733b810a into f84341c574 2025-12-11 19:47:19 +01:00
tDwtp
f84341c574
fix(git): git_status_prompt should respect spaces in prefixes (#13478) 2025-12-11 15:05:23 +01:00
Tanzim Hossain Romel
92aed2e936
feat(extract): add unar as fallback for RAR extraction (#13472)
Add unar as a fallback when unrar is not available for extracting
RAR files. This addresses the issue where unrar has been removed
from Homebrew due to licensing issues.

The extraction now:
- Prefers unrar if available (backward compatible)
- Falls back to unar if unrar is not found
- Shows helpful error message if neither tool is installed
2025-12-09 20:14:31 +01:00
Amaan Mujawar
0c733b810a
Update Plugin functions for newer glab versions
Changes:
- Removed unsupported flag '--state opened' from glissue-list'
- Updated glreleases-create to use --name instead of -t
- Updated glrepo-list to remove unsupported --membership flag
2025-09-19 08:24:24 +01:00
Amaan Mujawar
316882dcc1
feat(glab-plugin): enhance GitLab CLI support with additional helpers and aliases
- Added merge request helpers:
  - `glmr-checkout`: checkout MR branch locally
  - `glmr-merge`: merge MR and optionally remove source branch
  - `glmr-list`: list MRs assigned to the current user

- Added issue helpers:
  - `glissue-close`: close an issue
  - `glissue-list`: list open issues assigned to the current user

- Added CI/CD helpers:
  - `glci-retry`: retry a failed pipeline
  - `glci-latest`: view the latest pipeline
  - `glci-status`: open pipeline in browser

- Added repository helpers:
  - `glrepo-clone`: clone a repository
  - `glrepo-list`: list repositories user is a member of
  - `glrepo-open`: open repository in browser
  - `glrepo-starred`: list starred repositories

- Added release helpers:
  - `glrelease-create`: create a release with title and tag

- Added search helper:
  - `glsearch`: search for merge requests and issues by keyword

- Updated README.md:
  - Documented new aliases and helper functions
  - Added usage examples and environment variable notes

This PR improves developer productivity by providing convenient shortcuts and web integrations for managing GitLab repositories, merge requests, issues, pipelines, and releases directly from the terminal.

Closes #13054
2025-09-16 20:02:48 +01:00
4 changed files with 248 additions and 2 deletions

View File

@ -117,7 +117,7 @@ function _omz_git_prompt_status() {
fi
# For each status prefix, do a regex comparison
for status_prefix in ${(k)prefix_constant_map}; do
for status_prefix in "${(@k)prefix_constant_map}"; do
local status_constant="${prefix_constant_map[$status_prefix]}"
local status_regex=$'(^|\n)'"$status_prefix"

View File

@ -77,7 +77,15 @@ EOF
(*.lzma) unlzma "$full_path" ;;
(*.z) uncompress "$full_path" ;;
(*.zip|*.war|*.jar|*.ear|*.sublime-package|*.ipa|*.ipsw|*.xpi|*.apk|*.aar|*.whl|*.vsix|*.crx|*.pk3|*.pk4) unzip "$full_path" ;;
(*.rar) unrar x -ad "$full_path" ;;
(*.rar)
if (( $+commands[unrar] )); then
unrar x -ad "$full_path"
elif (( $+commands[unar] )); then
unar -o . "$full_path"
else
echo "extract: cannot extract RAR files: install unrar or unar" >&2
success=1
fi ;;
(*.rpm)
rpm2cpio "$full_path" | cpio --quiet -id ;;
(*.7z | *.7z.[0-9]* | *.pk7) 7za x "$full_path" ;;

93
plugins/glab/README.md Normal file
View File

@ -0,0 +1,93 @@
# glab plugin
This plugin adds support for the [GitLab CLI (`glab`)](https://gitlab.com/gitlab-org/cli), a tool to interact with GitLab from the terminal.
## Features
- **Shell completion**: enables `zsh` completions for `glab` automatically if it is installed.
- **Environment setup**: loads `GITLAB_HOST` and `GITLAB_TOKEN` from `~/.netrc` if they are not already set.
- **Aliases**: provides convenient shortcuts for common GitLab CLI commands.
- **Helper functions**: adds extra functions for common GitLab workflows, including merge requests, issues, CI/CD pipelines, repositories, and releases.
## Aliases
| Alias | Command | Description |
|------------ |------------------ |-------------------------------- |
| `gl` | `glab` | Shortcut for `glab` |
| `glmr` | `glab mr` | Manage merge requests |
| `glissue` | `glab issue` | Manage issues |
| `glrepo` | `glab repo` | Manage repositories |
| `glci` | `glab ci` | Manage CI pipelines |
| `glprj` | `glab project` | Manage projects |
| `glrelease` | `glab release` | Manage releases |
## Helper functions
### Merge Requests
- `glmr-open [<MR>]`
Opens a merge request in the browser. If `<MR>` is not specified, opens the current branch MR.
- `glmr-checkout <MR>`
Checks out the merge request branch locally.
- `glmr-merge <MR>`
Merges a merge request and optionally removes the source branch.
- `glmr-list [<args>]`
Lists merge requests assigned to you. Additional `glab mr list` arguments can be passed.
### Issues
- `glissue-new [<title>]`
Creates a new issue. If a title is provided, it is used; otherwise an interactive prompt is opened.
- `glissue-close <issue>`
Closes the specified issue.
- `glissue-list [<args>]`
Lists open issues assigned to you. Additional `glab issue list` arguments can be passed.
### CI/CD
- `glci-status [<args>]`
Opens the current CI pipeline status in the browser.
- `glci-retry <pipeline>`
Retries the specified pipeline.
- `glci-latest`
Shows the latest pipeline.
### Repositories
- `glrepo-clone <project>`
Clones a repository.
- `glrepo-list [<args>]`
Lists all repositories you are a member of.
- `glrepo-open <project>`
Opens a repository in the browser.
- `glrepo-starred [<args>]`
Lists your starred repositories.
### Releases
- `glrelease-create "<title>" "<tag>"`
Creates a new release with the given title and tag.
### Search
- `glsearch <keyword>`
Searches for merge requests and issues matching the keyword.
## Environment variables
The plugin attempts to set the following variables if they are not already defined:
- `GITLAB_HOST` — taken from the first `machine` entry in `~/.netrc`.
- `GITLAB_TOKEN` — the corresponding `password` from `~/.netrc`.
## Usage
1. Install [`glab`](https://gitlab.com/gitlab-org/cli#installation).
2. Enable the plugin in your `.zshrc`:
```zsh
plugins=(git glab)

View File

@ -0,0 +1,145 @@
# Oh My Zsh plugin for GitLab CLI (glab)
# --- Environment setup ---
# Load GITLAB_HOST and GITLAB_TOKEN from ~/.netrc if not already set
if [ -z "$GITLAB_HOST" ] || [ -z "$GITLAB_TOKEN" ]; then
if [ -f "$HOME/.netrc" ]; then
__glab_machine=$(awk '/^machine/{print $2; exit}' "$HOME/.netrc")
__glab_pass=$(awk -v host="$__glab_machine" '$2==host{getline; getline; if($1=="password") print $2}' "$HOME/.netrc")
if [ -n "$__glab_machine" ] && [ -n "$__glab_pass" ]; then
export GITLAB_HOST="$__glab_machine"
export GITLAB_TOKEN="$__glab_pass"
fi
fi
fi
unset __glab_machine __glab_pass
# --- Completions ---
if command -v glab >/dev/null 2>&1; then
eval "$(glab completion -s zsh 2>/dev/null || true)"
fi
# --- Aliases ---
alias gl='glab'
alias glmr='glab mr'
alias glissue='glab issue'
alias glrepo='glab repo'
alias glci='glab ci'
alias glprj='glab project'
alias glrelease='glab release'
# --- Merge Request Helper Functions ---
# Open a merge request in browser
glmr-open() {
glab mr view --web "$@"
}
# Checkout a merge request branch locally
glmr-checkout() {
glab mr checkout "$1"
}
# Merge a merge request
glmr-merge() {
glab mr merge "$1" --remove-source-branch
}
# List merge requests assigned to me
glmr-list() {
glab mr list --assignee "@me" "$@"
}
# --- Issue Helper Functions ---
# Create a new issue with optional title
glissue-new() {
if [ $# -eq 0 ]; then
glab issue create
else
glab issue create -t "$*"
fi
}
# Close an issue
glissue-close() {
glab issue close "$1"
}
# List open issues assigned to me
glissue-list() {
glab issue list --assignee "@me" "$@"
}
# --- CI/CD Helper Functions ---
# Show current CI pipeline status in browser
glci-status() {
glab ci view --web "$@"
}
# Retry a pipeline
glci-retry() {
glab ci retry "$1"
}
# View the latest pipeline
glci-latest() {
latest_id=$(glab ci list --limit 1 --json id -q '.[0].id')
glab ci view "$latest_id"
}
# --- Repository Helper Functions ---
# Clone a project
glrepo-clone() {
glab repo clone "$1"
}
# List all projects Im a member of
glrepo-list() {
glab repo list "$@"
}
# Open a repository in browser
glrepo-open() {
glab repo view --web "$@"
}
# List starred projects
glrepo-starred() {
glab repo list --starred "$@"
}
# --- Release Helper Functions ---
# Create a release: glrelease-create "Title" "Tag"
glrelease-create() {
if [ -z "$1" ]; then
echo "Usage: glrelease-create <tag> [release name]"
return 1
fi
local tag="$1"
local name="${2:-$1}" # Use tag as name if no name provided
glab release create "$tag" --name "$name"
}
# --- Search Helper Function ---
# Search merge requests and issues
glsearch() {
echo "Merge Requests:"
glab mr list --search "$1"
echo ""
echo "Issues:"
glab issue list --search "$1"
}
# --- Optional Auto-completion for Custom Commands ---
# Example: completion for glmr-open
_glmr_open_completion() {
_arguments "1:merge-request ID:_glab_mr"
}
compdef _glmr_open_completion glmr-open