2015-07-07 20:47:31 +00:00
|
|
|
#!/usr/bin/env zsh
|
|
|
|
#
|
|
|
|
# update-from-upstream.zsh
|
|
|
|
#
|
|
|
|
# This script updates the Oh My Zsh version of the zsh-history-substring-search
|
|
|
|
# plugin from the independent upstream repo. This is to be run by OMZ developers
|
|
|
|
# when they want to pull in new changes from upstream to OMZ. It is not run
|
|
|
|
# during normal use of the plugin.
|
|
|
|
#
|
|
|
|
# The official upstream repo is zsh-users/zsh-history-substring-search
|
|
|
|
# https://github.com/zsh-users/zsh-history-substring-search
|
|
|
|
#
|
|
|
|
# This is a zsh script, not a function. Call it with `zsh update-from-upstream.zsh`
|
|
|
|
# from the command line, running it from within the plugin directory.
|
|
|
|
#
|
|
|
|
# You can set the environment variable REPO_PATH to point it at an upstream
|
|
|
|
# repo you have already prepared. Otherwise, it will do a clean checkout of
|
|
|
|
# upstream's HEAD to a temporary local repo and use that.
|
|
|
|
|
|
|
|
|
|
|
|
# Just bail on any error so we don't have to do extra checking.
|
|
|
|
# This is a developer-use script, so terse output like that should
|
|
|
|
# be fine.
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
2015-07-07 20:48:05 +00:00
|
|
|
upstream_basename=zsh-history-substring-search
|
|
|
|
plugin_basename=history-substring-search
|
|
|
|
UPSTREAM_REPO=zsh-users/$upstream_basename
|
2015-07-07 20:47:31 +00:00
|
|
|
need_repo_cleanup=false
|
|
|
|
upstream_github_url="https://github.com/$UPSTREAM_REPO"
|
|
|
|
|
|
|
|
if [[ -z "$UPSTREAM_REPO_PATH" ]]; then
|
|
|
|
# Do a clean checkout
|
|
|
|
my_tempdir=$(mktemp -d -t omz-update-histsubstrsrch)
|
2015-07-07 20:48:05 +00:00
|
|
|
UPSTREAM_REPO_PATH="$my_tempdir/$upstream_basename"
|
2015-07-07 20:47:31 +00:00
|
|
|
git clone "$upstream_github_url" "$UPSTREAM_REPO_PATH"
|
|
|
|
need_repo_cleanup=true
|
|
|
|
print "Checked out upstream repo to $UPSTREAM_REPO_PATH"
|
|
|
|
else
|
2015-07-07 20:48:05 +00:00
|
|
|
print "Using existing $upstream_basename repo at $UPSTREAM_REPO_PATH"
|
2015-07-07 20:47:31 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
upstream="$UPSTREAM_REPO_PATH"
|
|
|
|
|
|
|
|
# Figure out what we're pulling in
|
|
|
|
upstream_sha=$(cd $upstream && git rev-parse HEAD)
|
|
|
|
upstream_commit_date=$(cd $upstream && git log -1 --pretty=format:%ci)
|
2015-07-07 20:48:05 +00:00
|
|
|
upstream_just_date=${${=upstream_commit_date}[1]}
|
2015-07-07 20:47:31 +00:00
|
|
|
print "upstream SHA: $upstream_sha"
|
2015-07-07 20:48:05 +00:00
|
|
|
print "upstream commit time: $upstream_commit_date"
|
|
|
|
print "upstream commit date: $upstream_just_date"
|
2015-07-07 20:47:31 +00:00
|
|
|
print
|
|
|
|
|
|
|
|
# Copy the files over, using the OMZ plugin's names where needed
|
|
|
|
cp -v "$upstream"/* .
|
2015-07-07 20:48:05 +00:00
|
|
|
mv -v zsh-history-substring-search.zsh $plugin_basename.zsh
|
|
|
|
mv -v zsh-history-substring-search.plugin.zsh $plugin_basename.plugin.zsh
|
2015-07-07 20:47:31 +00:00
|
|
|
|
|
|
|
if [[ $need_repo_cleanup == true ]]; then
|
|
|
|
print "Removing temporary repo at $my_tempdir"
|
|
|
|
rm -rf "$my_tempdir"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Do OMZ-specific edits
|
|
|
|
|
|
|
|
print
|
|
|
|
print "Updating files with OMZ-specific stuff"
|
2015-07-07 20:48:05 +00:00
|
|
|
print
|
|
|
|
|
|
|
|
# OMZ binds the keys as part of the plugin loading
|
|
|
|
|
|
|
|
cat >> $plugin_basename.plugin.zsh <<EOF
|
|
|
|
|
|
|
|
|
|
|
|
# Bind terminal-specific up and down keys
|
|
|
|
|
|
|
|
if [[ -n "\$terminfo[kcuu1]" ]]; then
|
2015-07-28 01:01:21 +00:00
|
|
|
bindkey -M emacs "\$terminfo[kcuu1]" history-substring-search-up
|
|
|
|
bindkey -M viins "\$terminfo[kcuu1]" history-substring-search-up
|
2015-07-07 20:48:05 +00:00
|
|
|
fi
|
|
|
|
if [[ -n "\$terminfo[kcud1]" ]]; then
|
2015-07-28 01:01:21 +00:00
|
|
|
bindkey -M emacs "\$terminfo[kcud1]" history-substring-search-down
|
|
|
|
bindkey -M viins "\$terminfo[kcud1]" history-substring-search-down
|
2015-07-07 20:48:05 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
EOF
|
2015-07-07 20:47:31 +00:00
|
|
|
|
|
|
|
# Tack OMZ-specific notes on to readme
|
2015-07-07 20:48:05 +00:00
|
|
|
|
2015-07-07 20:47:31 +00:00
|
|
|
thin_line="------------------------------------------------------------------------------"
|
|
|
|
cat >> README.md <<EOF
|
|
|
|
|
|
|
|
$thin_line
|
2015-07-07 20:48:05 +00:00
|
|
|
Oh My Zsh Distribution Notes
|
2015-07-07 20:47:31 +00:00
|
|
|
$thin_line
|
|
|
|
|
2015-07-07 20:48:05 +00:00
|
|
|
What you are looking at now is Oh My Zsh's repackaging of zsh-history-substring-search
|
|
|
|
as an OMZ module inside the Oh My Zsh distribution.
|
2015-07-07 20:47:31 +00:00
|
|
|
|
2015-07-07 20:48:05 +00:00
|
|
|
The upstream repo, $UPSTREAM_REPO, can be found on GitHub at
|
|
|
|
$upstream_github_url.
|
2015-07-07 20:47:31 +00:00
|
|
|
|
|
|
|
This downstream copy was last updated from the following upstream commit:
|
|
|
|
|
|
|
|
SHA: $upstream_sha
|
|
|
|
Commit date: $upstream_commit_date
|
|
|
|
|
|
|
|
Everything above this section is a copy of the original upstream's README, so things
|
|
|
|
may differ slightly when you're using this inside OMZ. In particular, you do not
|
2015-07-07 20:48:05 +00:00
|
|
|
need to set up key bindings for the up and down arrows yourself in \`~/.zshrc\`; the OMZ
|
|
|
|
plugin does that for you. You may still want to set up additional emacs- or vi-specific
|
|
|
|
bindings as mentioned above.
|
2015-07-07 20:47:31 +00:00
|
|
|
|
|
|
|
EOF
|
|
|
|
|
2015-07-07 20:48:05 +00:00
|
|
|
# Announce success and generate git commit messages
|
|
|
|
|
|
|
|
cat <<EOF
|
|
|
|
Done OK
|
|
|
|
|
|
|
|
Now you can check the results and commit like this:
|
|
|
|
|
|
|
|
git add *
|
|
|
|
git commit -m "history-substring-search: update to upstream version $upstream_just_date" \\
|
|
|
|
-m "Updates OMZ's copy to commit $upstream_sha from $UPSTREAM_REPO"
|
|
|
|
|
|
|
|
EOF
|
2015-07-07 20:47:31 +00:00
|
|
|
|