mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 07:26:17 -04:00
feat: open website at file & line number or range
Ported from
f544dadf88/git/bin/git-browse
Closes #980
This commit is contained in:
parent
fdf89cd93f
commit
006549d661
109
bin/git-browse
109
bin/git-browse
|
|
@ -1,54 +1,97 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
if [[ $1 == "" ]]
|
remote=${1:-""}
|
||||||
then
|
branch=""
|
||||||
branch=$(git rev-parse --abbrev-ref HEAD 2&> /dev/null)
|
filename=${2:-""}
|
||||||
|
line1=${3:-""}
|
||||||
|
line2=${4:-""}
|
||||||
|
|
||||||
|
# get remote name
|
||||||
|
if [[ $remote == "" ]]; then
|
||||||
|
branch=$(git rev-parse --abbrev-ref HEAD 2 &>/dev/null)
|
||||||
remote=$(git config branch."${branch}".remote || echo "origin")
|
remote=$(git config branch."${branch}".remote || echo "origin")
|
||||||
else
|
|
||||||
remote=$1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $remote == "" ]]
|
if [[ $remote == "" ]]; then
|
||||||
then
|
|
||||||
echo "Remote not found"
|
echo "Remote not found"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# get remote url
|
||||||
remote_url=$(git remote get-url $remote)
|
remote_url=$(git remote get-url $remote)
|
||||||
|
|
||||||
if [[ $? -ne 0 ]]
|
if [[ $? -ne 0 ]]; then
|
||||||
then
|
|
||||||
exit $?
|
exit $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $remote_url = git@* ]]
|
if [[ $remote_url = git@* ]]; then
|
||||||
then
|
|
||||||
url=$(echo $remote_url | sed -E -e 's/:/\//' -e 's/\.git$//' -e 's/.*@(.*)/http:\/\/\1/')
|
url=$(echo $remote_url | sed -E -e 's/:/\//' -e 's/\.git$//' -e 's/.*@(.*)/http:\/\/\1/')
|
||||||
elif [[ $remote_url = http* ]]
|
elif [[ $remote_url = http* ]]; then
|
||||||
then
|
|
||||||
url=${remote_url%.git}
|
url=${remote_url%.git}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$OSTYPE" in
|
# construct urls
|
||||||
darwin*)
|
commit_hash=$(git log -n1 --format=format:"%H" "${filename}" 2>/dev/null)
|
||||||
# MacOS
|
commit_or_branch=${commit_hash:-${branch}}
|
||||||
open $url
|
|
||||||
;;
|
if [[ $remote_url =~ gitlab ]]; then
|
||||||
msys)
|
# construct gitlab urls
|
||||||
# Git-Bash on Windows
|
# https://gitlab.com/<user_or_group>/<repo>/-/blob/<commit_or_branch>/<filename>#L<line1>-<line2>
|
||||||
start $url
|
if [[ -n ${filename} ]]; then
|
||||||
;;
|
url="${url}/-/blob/${commit_hash:-${branch}}/${filename}"
|
||||||
linux*)
|
if [[ -n "${line1}" ]]; then
|
||||||
# Handle WSL on Windows
|
url="${url}#L${line1}"
|
||||||
if uname -a | grep -i -q Microsoft && command -v powershell.exe
|
if [[ -n "${line2}" ]]; then
|
||||||
then
|
url="${url}-${line2}"
|
||||||
powershell.exe -NoProfile start $url
|
fi
|
||||||
else
|
|
||||||
xdg-open $url
|
|
||||||
fi
|
fi
|
||||||
;;
|
fi
|
||||||
*)
|
elif [[ $remote_url =~ github ]]; then
|
||||||
# fall back to xdg-open for BSDs, etc.
|
# construct github urls
|
||||||
|
# https://github.com/<user_or_org>/<repo>/blob/<commit_or_branch>/<filename>#L<line1>-L<line2>
|
||||||
|
if [[ -n "${filename}" ]]; then
|
||||||
|
url="${url}/blob/${commit_hash:-${branch}}/${filename}"
|
||||||
|
if [[ -n "${line1}" ]]; then
|
||||||
|
url="${url}#L${line1}"
|
||||||
|
if [[ -n "${line2}" ]]; then
|
||||||
|
url="${url}-L${line2}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif [[ $remote_url =~ bitbucket ]]; then
|
||||||
|
# construct bitbucket urls
|
||||||
|
# https://bitbucket.org/<user_or_org>/<repo>/src/<commit_or_branch>/<filename>#lines-<line1>:<line2>
|
||||||
|
if [[ -n ${filename} ]]; then
|
||||||
|
url=${url}/blob/${commit_hash:-${branch}}/${filename}
|
||||||
|
if [[ -n "${line1}" ]]; then
|
||||||
|
url="${url}#lines-${line1}"
|
||||||
|
if [[ -n "${line2}" ]]; then
|
||||||
|
url="${url}:${line2}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# open url
|
||||||
|
case "$OSTYPE" in
|
||||||
|
darwin*)
|
||||||
|
# MacOS
|
||||||
|
open $url
|
||||||
|
;;
|
||||||
|
msys)
|
||||||
|
# Git-Bash on Windows
|
||||||
|
start $url
|
||||||
|
;;
|
||||||
|
linux*)
|
||||||
|
# Handle WSL on Windows
|
||||||
|
if uname -a | grep -i -q Microsoft && command -v powershell.exe; then
|
||||||
|
powershell.exe -NoProfile start $url
|
||||||
|
else
|
||||||
xdg-open $url
|
xdg-open $url
|
||||||
;;
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# fall back to xdg-open for BSDs, etc.
|
||||||
|
xdg-open $url
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
.\" generated with Ronn/v0.7.3
|
.\" generated with Ronn/v0.7.3
|
||||||
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
||||||
.
|
.
|
||||||
.TH "GIT\-BROWSE" "1" "March 2020" "" "Git Extras"
|
.TH "GIT\-BROWSE" "1" "June 2022" "" "Git Extras"
|
||||||
.
|
.
|
||||||
.SH "NAME"
|
.SH "NAME"
|
||||||
\fBgit\-browse\fR \-
|
\fBgit\-browse\fR \-
|
||||||
.
|
.
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
\fBgit\-browse\fR [remote_name]
|
\fBgit\-browse\fR [remote_name] [file_name] [line_1] [line_2]
|
||||||
.
|
.
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
Opens the current git repository website in your default web browser\.
|
Opens the current git repository website in your default web browser\.
|
||||||
|
|
@ -18,12 +18,39 @@ Opens the current git repository website in your default web browser\.
|
||||||
.P
|
.P
|
||||||
The name of the remote you wish to browse to\. Defaults to the first remote if not specified\.
|
The name of the remote you wish to browse to\. Defaults to the first remote if not specified\.
|
||||||
.
|
.
|
||||||
|
.P
|
||||||
|
<file_name>
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
The name of the file you wish to browse to\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
<line_1>
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
The line number of the file you wish to browse to\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
<line_2>
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
The line range (from <line_1> to <line_2>) of the file you wish to browse to\.
|
||||||
|
.
|
||||||
.SH "EXAMPLES"
|
.SH "EXAMPLES"
|
||||||
$ git browse
|
$ git browse
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
$ git browse upstream
|
$ git browse upstream
|
||||||
.
|
.
|
||||||
|
.P
|
||||||
|
$ git browse upstream bin/git\-browse
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
$ git browse upstream bin/git\-browse 42
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
$ git browse upstream bin/git\-browse 1 42
|
||||||
|
.
|
||||||
.SH "AUTHOR"
|
.SH "AUTHOR"
|
||||||
Written by Mark Pitman <\fIhttps://github\.com/mapitman\fR>
|
Written by Mark Pitman <\fIhttps://github\.com/mapitman\fR>
|
||||||
.
|
.
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
|
|
||||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||||
|
|
||||||
<p><code>git-browse</code> [remote_name]</p>
|
<p><code>git-browse</code> [remote_name] [file_name] [line_1] [line_2]</p>
|
||||||
|
|
||||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||||
|
|
||||||
|
|
@ -89,12 +89,31 @@
|
||||||
<p>The name of the remote you wish to browse to. Defaults to
|
<p>The name of the remote you wish to browse to. Defaults to
|
||||||
the first remote if not specified.</p>
|
the first remote if not specified.</p>
|
||||||
|
|
||||||
|
<p><file_name></p>
|
||||||
|
|
||||||
|
<p>The name of the file you wish to browse to.</p>
|
||||||
|
|
||||||
|
<p><line_1></p>
|
||||||
|
|
||||||
|
<p>The line number of the file you wish to browse to.</p>
|
||||||
|
|
||||||
|
<p><line_2></p>
|
||||||
|
|
||||||
|
<p>The line range (from <line_1> to <line_2>) of the file you wish to
|
||||||
|
browse to.</p>
|
||||||
|
|
||||||
<h2 id="EXAMPLES">EXAMPLES</h2>
|
<h2 id="EXAMPLES">EXAMPLES</h2>
|
||||||
|
|
||||||
<p> $ git browse</p>
|
<p> $ git browse</p>
|
||||||
|
|
||||||
<p> $ git browse upstream</p>
|
<p> $ git browse upstream</p>
|
||||||
|
|
||||||
|
<p> $ git browse upstream bin/git-browse</p>
|
||||||
|
|
||||||
|
<p> $ git browse upstream bin/git-browse 42</p>
|
||||||
|
|
||||||
|
<p> $ git browse upstream bin/git-browse 1 42</p>
|
||||||
|
|
||||||
<h2 id="AUTHOR">AUTHOR</h2>
|
<h2 id="AUTHOR">AUTHOR</h2>
|
||||||
|
|
||||||
<p>Written by Mark Pitman <<a href="https://github.com/mapitman" data-bare-link="true">https://github.com/mapitman</a>></p>
|
<p>Written by Mark Pitman <<a href="https://github.com/mapitman" data-bare-link="true">https://github.com/mapitman</a>></p>
|
||||||
|
|
@ -110,7 +129,7 @@ the first remote if not specified.</p>
|
||||||
|
|
||||||
<ol class='man-decor man-foot man foot'>
|
<ol class='man-decor man-foot man foot'>
|
||||||
<li class='tl'></li>
|
<li class='tl'></li>
|
||||||
<li class='tc'>March 2020</li>
|
<li class='tc'>June 2022</li>
|
||||||
<li class='tr'>git-browse(1)</li>
|
<li class='tr'>git-browse(1)</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ git-browse(1) -- <View the web page for the current repository>
|
||||||
|
|
||||||
## SYNOPSIS
|
## SYNOPSIS
|
||||||
|
|
||||||
`git-browse` [remote_name]
|
`git-browse` [remote_name] [file_name] [line_1] [line_2]
|
||||||
|
|
||||||
## DESCRIPTION
|
## DESCRIPTION
|
||||||
|
|
||||||
|
|
@ -16,12 +16,31 @@ Opens the current git repository website in your default web browser.
|
||||||
The name of the remote you wish to browse to. Defaults to
|
The name of the remote you wish to browse to. Defaults to
|
||||||
the first remote if not specified.
|
the first remote if not specified.
|
||||||
|
|
||||||
|
<file_name>
|
||||||
|
|
||||||
|
The name of the file you wish to browse to.
|
||||||
|
|
||||||
|
<line_1>
|
||||||
|
|
||||||
|
The line number of the file you wish to browse to.
|
||||||
|
|
||||||
|
<line_2>
|
||||||
|
|
||||||
|
The line range (from <line_1> to <line_2>) of the file you wish to
|
||||||
|
browse to.
|
||||||
|
|
||||||
## EXAMPLES
|
## EXAMPLES
|
||||||
|
|
||||||
$ git browse
|
$ git browse
|
||||||
|
|
||||||
$ git browse upstream
|
$ git browse upstream
|
||||||
|
|
||||||
|
$ git browse upstream bin/git-browse
|
||||||
|
|
||||||
|
$ git browse upstream bin/git-browse 42
|
||||||
|
|
||||||
|
$ git browse upstream bin/git-browse 1 42
|
||||||
|
|
||||||
## AUTHOR
|
## AUTHOR
|
||||||
|
|
||||||
Written by Mark Pitman <<https://github.com/mapitman>>
|
Written by Mark Pitman <<https://github.com/mapitman>>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue