Compare commits

...
Author SHA1 Message Date
Robby Russell acc11bc5f4 fix(github): quote deprecation notice safely 2026-09-10 05:36:16 -07:00
Robby Russell d03d367f82 fix(gh): preserve valid completion cache on failure 2026-09-10 05:33:39 -07:00
Robby Russell eccb32c94c refactor(github)!: deprecate legacy hub plugin
BREAKING CHANGE: the github plugin is deprecated and will be removed in a future release. Use the gh plugin for GitHub CLI completion.
2026-09-10 05:33:32 -07:00
4 changed files with 55 additions and 51 deletions
+3 -6
View File
@@ -15,9 +15,6 @@ This plugin does not add any aliases.
This plugin caches the completion script and is automatically updated when the This plugin caches the completion script and is automatically updated when the
plugin is loaded, which is usually when you start up a new terminal emulator. plugin is loaded, which is usually when you start up a new terminal emulator.
The cache is stored at: The completion script is stored at `$ZSH_CACHE_DIR/completions/_gh`. If an
update fails, the plugin keeps the last successfully generated completion
- `$ZSH/plugins/gh/_gh` completions script script.
- `$ZSH_CACHE_DIR/gh_version` version of GitHub CLI, used to invalidate
the cache.
+8 -2
View File
@@ -13,6 +13,12 @@ fi
zmodload -F zsh/files b:zf_mv zmodload -F zsh/files b:zf_mv
() { () {
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gh" local completion_file="$ZSH_CACHE_DIR/completions/_gh"
zf_mv -f -- =( gh completion --shell zsh ) "$TMPPREFIX" local completion_tmp="${completion_file}.$$.${RANDOM}"
if gh completion --shell zsh >| "$completion_tmp" && [[ -s "$completion_tmp" ]]; then
zf_mv -f -- "$completion_tmp" "$completion_file"
fi
command rm -f -- "$completion_tmp"
} &| } &|
+34 -36
View File
@@ -1,45 +1,43 @@
# github plugin # github plugin
This plugin supports working with GitHub from the command line. It provides a few things: > [!WARNING]
> This plugin is deprecated and will be removed in a future release. It supports
> the legacy [`hub`](https://github.com/mislav/hub) CLI, not the current GitHub
> CLI. For `gh` completion, use the [`gh` plugin](../gh) instead.
* Sets up the `hub` wrapper and completions for the `git` command if you have [`hub`](https://github.com/github/hub) installed. The plugin provides compatibility for existing `hub` users by:
* Completion for the [`github` Ruby gem](https://github.com/defunkt/github-gem).
* Convenience functions for working with repos and URLs.
### Functions - aliasing `git` to `hub` when `hub` is installed;
- adding completion for `hub`; and
- defining convenience functions for creating repositories.
* `empty_gh` - Creates a new empty repo (with a `README.md`) and pushes it to GitHub ## Migrating to GitHub CLI
* `new_gh` - Initializes an existing directory as a repo and pushes it to GitHub
* `exist_gh` - Takes an existing repo and pushes it to GitHub
Install [GitHub CLI](https://cli.github.com/), replace `github` with `gh` in
## Installation your plugin list, and restart your shell:
[Hub](https://github.com/github/hub) needs to be installed if you want to use it. On OS X with Homebrew, this can be done with `brew install hub`. The `hub` completion definition needs to be added to your `$FPATH` before initializing OMZ.
The [`github` Ruby gem](https://github.com/defunkt/github-gem) needs to be installed if you want to use it.
### Configuration
These settings affect `github`'s behavior.
#### Environment variables
* `$GITHUB_USER`
* `$GITHUB_PASSWORD`
#### Git configuration options
* `github.user` - GitHub username for repo operations
See `man hub` for more details.
### Homebrew installation note
If you have installed `hub` using Homebrew, its completions may not be on your `$FPATH` if you are using the system `zsh`. Homebrew installs `zsh` completion definitions to `/usr/local/share/zsh/site-functions`, which will be on `$FPATH` for the Homebrew-installed `zsh`, but not for the system `zsh`. If you want it to work with the system `zsh`, add this to your `~/.zshrc` before it sources `oh-my-zsh.sh`.
```zsh ```zsh
if (( ! ${fpath[(I)/usr/local/share/zsh/site-functions]} )); then plugins=(... gh)
FPATH=/usr/local/share/zsh/site-functions:$FPATH
fi
``` ```
The `gh` plugin supplies completion for the installed GitHub CLI. It does not
alias `git`, because `gh` is not a Git wrapper.
The closest replacement for creating a GitHub repository from an existing
local repository is:
```zsh
gh repo create --source=. --push
```
## Deprecated functions
- `empty_gh` - creates a new repository with a `README.md` and pushes it to GitHub
- `new_gh` - initializes an existing directory and pushes it to GitHub
- `exist_gh` - pushes an existing Git repository to GitHub
These functions remain available during the deprecation period and require
`hub`. They will be removed with the plugin.
If you continue using `hub`, see its documentation for authentication and
configuration details.
+10 -7
View File
@@ -1,3 +1,6 @@
print -Pru2 -- '%F{yellow}[oh-my-zsh] The %Bgithub%b plugin is deprecated and will be removed in a future release.'
print -Pru2 -- 'It supports the legacy %Bhub%b CLI. Use the %Bgh%b plugin for GitHub CLI completion.%f'
# Set up hub wrapper for git, if it is available; https://github.com/github/hub # Set up hub wrapper for git, if it is available; https://github.com/github/hub
if (( $+commands[hub] )); then if (( $+commands[hub] )); then
alias git=hub alias git=hub
@@ -26,7 +29,7 @@ empty_gh() { # [NAME_OF_REPO]
# This function will add all non-hidden files to git. # This function will add all non-hidden files to git.
new_gh() { # [DIRECTORY] new_gh() { # [DIRECTORY]
emulate -L zsh emulate -L zsh
local repo="$1" local repo="${1:-.}"
cd "$repo" \ cd "$repo" \
|| return || return
@@ -42,7 +45,7 @@ new_gh() { # [DIRECTORY]
|| return || return
hub create \ hub create \
|| return || return
git push -u origin master \ git push -u origin HEAD \
|| return || return
} }
@@ -52,18 +55,19 @@ new_gh() { # [DIRECTORY]
# to your GitHub. # to your GitHub.
exist_gh() { # [DIRECTORY] exist_gh() { # [DIRECTORY]
emulate -L zsh emulate -L zsh
local repo=$1 local repo="${1:-.}"
cd "$repo" cd "$repo" \
|| return
hub create \ hub create \
|| return || return
git push -u origin master git push -u origin HEAD
} }
# git.io "GitHub URL" # git.io "GitHub URL"
# #
# Shorten GitHub url, example: # Shorten GitHub url, example:
# https://github.com/nvogel/dotzsh > https://git.io/8nU25w # https://github.com/nvogel/dotzsh > https://git.io/8nU25w
# source: https://github.com/nvogel/dotzsh # source: https://github.com/nvogel/dotzsh
# documentation: https://github.com/blog/985-git-io-github-url-shortener # documentation: https://github.com/blog/985-git-io-github-url-shortener
# #
@@ -74,4 +78,3 @@ git.io() {
} }
# End Functions ############################################################# # End Functions #############################################################