aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hahler <git@thequod.de>2019-07-30 07:45:59 +0200
committerGitHub <noreply@github.com>2019-07-30 07:45:59 +0200
commit213b6b5c28f069df3e37ddfb4692b22f26b831cb (patch)
treecbc0b95dbc960d06422a70274e6e3876bd16328e
parent35ec60f73a5d9f1ad9393bb1f645c624e67fdb26 (diff)
downloadrneovim-213b6b5c28f069df3e37ddfb4692b22f26b831cb.tar.gz
rneovim-213b6b5c28f069df3e37ddfb4692b22f26b831cb.tar.bz2
rneovim-213b6b5c28f069df3e37ddfb4692b22f26b831cb.zip
vim-patch: handle tags, pass through git-log options (#10140)
* scripts/vim-patch.sh: fall back to "origin" for remote Without this, it would fail e.g. with a locally cloned repo of Neovim. * scripts/vim-patch.sh: assign_commit_details: handle tags [ci skip] - Handle "v" prefix from Vim tags. - Exit in case of error therein already. * -l/-L: pass through git-log options [ci skip] This allows for only listing missing patches for a given Vim file: > scripts/vim-patch.sh -L src/edit.c
-rwxr-xr-xscripts/vim-patch.sh62
1 files changed, 40 insertions, 22 deletions
diff --git a/scripts/vim-patch.sh b/scripts/vim-patch.sh
index d16266dd36..6fcd93edbc 100755
--- a/scripts/vim-patch.sh
+++ b/scripts/vim-patch.sh
@@ -21,8 +21,8 @@ usage() {
echo
echo "Options:"
echo " -h Show this message and exit."
- echo " -l List missing Vim patches."
- echo " -L List missing Vim patches (for scripts)."
+ echo " -l [git-log opts] List missing Vim patches."
+ echo " -L [git-log opts] List missing Vim patches (for scripts)."
echo " -M List all merged patch-numbers (at current v:version)."
echo " -p {vim-revision} Download and generate a Vim patch. vim-revision"
echo " can be a Vim version (8.0.xxx) or a Git hash."
@@ -34,6 +34,11 @@ usage() {
echo
echo " \$VIM_SOURCE_DIR controls where Vim sources are found"
echo " (default: '${VIM_SOURCE_DIR_DEFAULT}')"
+ echo
+ echo "Examples:"
+ echo
+ echo " - List missing patches for a given file (in the Vim source):"
+ echo " $0 -l -- src/edit.c"
}
msg_ok() {
@@ -110,30 +115,44 @@ commit_message() {
}
find_git_remote() {
- git remote -v \
- | awk '$2 ~ /github.com[:\/]neovim\/neovim/ && $3 == "(fetch)" {print $1; exit}'
+ git_remote=$(git remote -v \
+ | awk '$2 ~ /github.com[:\/]neovim\/neovim/ && $3 == "(fetch)" {print $1; exit}')
+ if [[ -z "$git_remote" ]]; then
+ git_remote="origin"
+ fi
+ echo "$git_remote"
}
+# Assign variables for a given Vim tag, patch version, or commit.
+# Might exit in case it cannot be found.
assign_commit_details() {
- if [[ ${1} =~ [0-9]\.[0-9]\.[0-9]{3,4} ]]; then
+ local vim_commit_ref
+ if [[ ${1} =~ v?[0-9]\.[0-9]\.[0-9]{3,4} ]]; then
# Interpret parameter as version number (tag).
- vim_version="${1}"
- vim_tag="v${1}"
- vim_commit=$(cd "${VIM_SOURCE_DIR}" \
- && git log -1 --format="%H" "${vim_tag}")
+ if [[ "${1:0:1}" == v ]]; then
+ vim_version="${1:1}"
+ vim_tag="${1}"
+ else
+ vim_version="${1}"
+ vim_tag="v${1}"
+ fi
+ vim_commit_ref="$vim_tag"
local munge_commit_line=true
else
# Interpret parameter as commit hash.
vim_version="${1:0:12}"
vim_tag=
- vim_commit=$(cd "${VIM_SOURCE_DIR}" \
- && git log -1 --format="%H" "${vim_version}")
+ vim_commit_ref="$vim_version"
local munge_commit_line=false
fi
+ vim_commit=$(git -C "${VIM_SOURCE_DIR}" log -1 --format="%H" "${vim_commit_ref}" --) || {
+ >&2 msg_err "Couldn't find Vim revision '${vim_commit_ref}'."
+ exit 3
+ }
+
vim_commit_url="https://github.com/vim/vim/commit/${vim_commit}"
- vim_message="$(cd "${VIM_SOURCE_DIR}" \
- && git log -1 --pretty='format:%B' "${vim_commit}" \
+ vim_message="$(git -C "${VIM_SOURCE_DIR}" log -1 --pretty='format:%B' "${vim_commit}" \
| sed -e 's/\(#[0-9]\{1,\}\)/vim\/vim\1/g')"
if [[ ${munge_commit_line} == "true" ]]; then
# Remove first line of commit message.
@@ -198,10 +217,6 @@ get_vimpatch() {
assign_commit_details "${1}"
- git log -1 "${vim_commit}" -- >/dev/null 2>&1 || {
- >&2 msg_err "Couldn't find Vim revision '${vim_commit}'."
- exit 3
- }
msg_ok "Found Vim revision '${vim_commit}'."
local patch_content
@@ -357,7 +372,7 @@ submit_pr() {
# Gets all Vim commits since the "start" commit.
list_vim_commits() { (
- cd "${VIM_SOURCE_DIR}" && git log --reverse --format='%H' v8.0.0000..HEAD
+ cd "${VIM_SOURCE_DIR}" && git log --reverse --format='%H' v8.0.0000..HEAD "$@"
) }
# Prints all (sorted) "vim-patch:xxx" tokens found in the Nvim git log.
@@ -380,6 +395,7 @@ list_vimpatch_numbers() {
}
# Prints a newline-delimited list of Vim commits, for use by scripts.
+# "$@" is passed to list_vim_commits, as extra arguments to git-log.
list_missing_vimpatches() {
local token vim_commit vim_tag patch_number
declare -A tokens
@@ -404,7 +420,7 @@ list_missing_vimpatches() {
fi
# Get missing Vim commits
- for vim_commit in $(list_vim_commits); do
+ for vim_commit in $(list_vim_commits "$@"); do
# Check for vim-patch:<commit_hash> (usually runtime updates).
token="vim-patch:${vim_commit:0:7}"
if [[ "${tokens[$token]-}" ]]; then
@@ -435,7 +451,7 @@ show_vimpatches() {
runtime_commits[$commit]=1
done
- list_missing_vimpatches | while read -r vim_commit; do
+ list_missing_vimpatches "$@" | while read -r vim_commit; do
if [[ "${runtime_commits[$vim_commit]-}" ]]; then
printf ' • %s (+runtime)\n' "${vim_commit}"
else
@@ -561,11 +577,13 @@ while getopts "hlLMVp:P:g:r:s" opt; do
exit 0
;;
l)
- show_vimpatches
+ shift # remove opt
+ show_vimpatches "$@"
exit 0
;;
L)
- list_missing_vimpatches
+ shift # remove opt
+ list_missing_vimpatches "$@"
exit 0
;;
M)