Merge branch 'gh/jump-auto-mode'
The 'git-jump' command (in contrib/) has been taught to automatically pick a mode (merge, diff, or ws) when invoked without arguments. * gh/jump-auto-mode: git-jump: pick a mode automatically when invoked without argumentsmain
commit
a58e51dddf
|
|
@ -75,8 +75,20 @@ git jump grep foo_bar
|
|||
# arbitrary grep options
|
||||
git jump grep -i foo_bar
|
||||
|
||||
# jump to places with conflict markers or whitespace errors
|
||||
# (as reported by `git diff --check`)
|
||||
git jump ws
|
||||
|
||||
# use the silver searcher for git jump grep
|
||||
git config jump.grepCmd "ag --column"
|
||||
|
||||
# pick a mode automatically: "merge" if there are unmerged paths,
|
||||
# "diff" if the worktree has unstaged changes, "ws" if there are
|
||||
# whitespace problems; otherwise show usage
|
||||
git jump auto
|
||||
|
||||
# with no explicit mode and no args, same as "auto"
|
||||
git jump
|
||||
--------------------------------------------------
|
||||
|
||||
You can use the optional argument '--stdout' to print the listing to
|
||||
|
|
|
|||
|
|
@ -3,9 +3,11 @@
|
|||
usage() {
|
||||
cat <<\EOF
|
||||
usage: git jump [--stdout] <mode> [<args>]
|
||||
or: git jump [--stdout]
|
||||
|
||||
Jump to interesting elements in an editor.
|
||||
The <mode> parameter is one of:
|
||||
The <mode> parameter is one of the following.
|
||||
With no <mode> and no <args>, it defaults to "auto".
|
||||
|
||||
diff: elements are diff hunks. Arguments are given to diff.
|
||||
|
||||
|
|
@ -16,6 +18,10 @@ grep: elements are grep hits. Arguments are given to git grep or, if
|
|||
|
||||
ws: elements are whitespace errors. Arguments are given to diff --check.
|
||||
|
||||
auto: select one of the other modes based on worktree state;
|
||||
"merge" if there are unmerged paths, "diff" if there are
|
||||
unstaged changes, "ws" if there are whitespace errors.
|
||||
|
||||
If the optional argument `--stdout` is given, print the quickfix
|
||||
lines to standard output instead of feeding it to the editor.
|
||||
EOF
|
||||
|
|
@ -82,6 +88,21 @@ mode_ws() {
|
|||
git diff --check "$@"
|
||||
}
|
||||
|
||||
mode_auto() {
|
||||
if test "$(git rev-parse --is-inside-work-tree 2>/dev/null)" != "true"; then
|
||||
usage >&2
|
||||
exit 1
|
||||
fi
|
||||
if test -n "$(git ls-files -u "$@")"; then
|
||||
mode_merge "$@"
|
||||
elif ! git diff --quiet "$@"; then
|
||||
mode_diff "$@"
|
||||
else
|
||||
usage >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
use_stdout=
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
|
|
@ -99,8 +120,7 @@ while test $# -gt 0; do
|
|||
shift
|
||||
done
|
||||
if test $# -lt 1; then
|
||||
usage >&2
|
||||
exit 1
|
||||
set -- auto
|
||||
fi
|
||||
mode=$1; shift
|
||||
type "mode_$mode" >/dev/null 2>&1 || { usage >&2; exit 1; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue