update-from-upstream.zsh 3.92 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/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


27
28
29
upstream_basename=zsh-history-substring-search
plugin_basename=history-substring-search
UPSTREAM_REPO=zsh-users/$upstream_basename
30
31
32
33
34
35
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)
36
  UPSTREAM_REPO_PATH="$my_tempdir/$upstream_basename"
37
38
39
40
  git clone "$upstream_github_url" "$UPSTREAM_REPO_PATH"
  need_repo_cleanup=true
  print "Checked out upstream repo to $UPSTREAM_REPO_PATH"
else
41
	print "Using existing $upstream_basename repo at $UPSTREAM_REPO_PATH"
42
43
44
45
46
47
48
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)
49
upstream_just_date=${${=upstream_commit_date}[1]}
50
print "upstream SHA:         $upstream_sha"
51
52
print "upstream commit time: $upstream_commit_date"
print "upstream commit date: $upstream_just_date"
53
54
55
56
print

# Copy the files over, using the OMZ plugin's names where needed
cp -v "$upstream"/* .
57
58
mv -v zsh-history-substring-search.zsh $plugin_basename.zsh
mv -v zsh-history-substring-search.plugin.zsh $plugin_basename.plugin.zsh
59
60
61
62
63
64
65
66
67
68

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"
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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
  bindkey "\$terminfo[kcuu1]" history-substring-search-up
fi
if [[ -n "\$terminfo[kcud1]" ]]; then
  bindkey "\$terminfo[kcud1]" history-substring-search-down
fi

EOF
86
87

# Tack OMZ-specific notes on to readme
88

89
90
91
92
thin_line="------------------------------------------------------------------------------"
cat >> README.md <<EOF

$thin_line
93
Oh My Zsh Distribution Notes
94
95
$thin_line

96
97
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.
98

99
100
The upstream repo, $UPSTREAM_REPO, can be found on GitHub at 
$upstream_github_url.
101
102
103
104
105
106
107
108

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
109
110
111
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.
112
113
114

EOF

115
116
117
118
119
120
121
122
123
124
125
126
# 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
127