feat: open website at file & line number or range

Ported from
f544dadf88/git/bin/git-browse

Closes #980
This commit is contained in:
Peter Benjamin 2022-06-09 19:26:55 -07:00
parent fdf89cd93f
commit 006549d661
No known key found for this signature in database
4 changed files with 146 additions and 38 deletions

View file

@ -1,54 +1,97 @@
#!/usr/bin/env bash
if [[ $1 == "" ]]
then
branch=$(git rev-parse --abbrev-ref HEAD 2&> /dev/null)
remote=${1:-""}
branch=""
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")
else
remote=$1
fi
if [[ $remote == "" ]]
then
if [[ $remote == "" ]]; then
echo "Remote not found"
exit 1
fi
# get remote url
remote_url=$(git remote get-url $remote)
if [[ $? -ne 0 ]]
then
if [[ $? -ne 0 ]]; then
exit $?
fi
if [[ $remote_url = git@* ]]
then
if [[ $remote_url = git@* ]]; then
url=$(echo $remote_url | sed -E -e 's/:/\//' -e 's/\.git$//' -e 's/.*@(.*)/http:\/\/\1/')
elif [[ $remote_url = http* ]]
then
elif [[ $remote_url = http* ]]; then
url=${remote_url%.git}
fi
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
# construct urls
commit_hash=$(git log -n1 --format=format:"%H" "${filename}" 2>/dev/null)
commit_or_branch=${commit_hash:-${branch}}
if [[ $remote_url =~ gitlab ]]; then
# construct gitlab urls
# https://gitlab.com/<user_or_group>/<repo>/-/blob/<commit_or_branch>/<filename>#L<line1>-<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}-${line2}"
fi
fi
;;
*)
# fall back to xdg-open for BSDs, etc.
fi
elif [[ $remote_url =~ github ]]; then
# 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
;;
fi
;;
*)
# fall back to xdg-open for BSDs, etc.
xdg-open $url
;;
esac

View file

@ -1,13 +1,13 @@
.\" generated with Ronn/v0.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"
\fBgit\-browse\fR \-
.
.SH "SYNOPSIS"
\fBgit\-browse\fR [remote_name]
\fBgit\-browse\fR [remote_name] [file_name] [line_1] [line_2]
.
.SH "DESCRIPTION"
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
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"
$ git browse
.
.P
$ 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"
Written by Mark Pitman <\fIhttps://github\.com/mapitman\fR>
.

View file

@ -76,7 +76,7 @@
<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>
@ -89,12 +89,31 @@
<p>The name of the remote you wish to browse to. Defaults to
the first remote if not specified.</p>
<p>&lt;file_name&gt;</p>
<p>The name of the file you wish to browse to.</p>
<p>&lt;line_1&gt;</p>
<p>The line number of the file you wish to browse to.</p>
<p>&lt;line_2&gt;</p>
<p>The line range (from &lt;line_1&gt; to &lt;line_2&gt;) of the file you wish to
browse to.</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
<p> $ git browse</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>
<p>Written by Mark Pitman &lt;<a href="https://github.com/mapitman" data-bare-link="true">https://github.com/mapitman</a>&gt;</p>
@ -110,7 +129,7 @@ the first remote if not specified.</p>
<ol class='man-decor man-foot man foot'>
<li class='tl'></li>
<li class='tc'>March 2020</li>
<li class='tc'>June 2022</li>
<li class='tr'>git-browse(1)</li>
</ol>

View file

@ -3,7 +3,7 @@ git-browse(1) -- <View the web page for the current repository>
## SYNOPSIS
`git-browse` [remote_name]
`git-browse` [remote_name] [file_name] [line_1] [line_2]
## 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 first remote if not specified.
&lt;file_name&gt;
The name of the file you wish to browse to.
&lt;line_1&gt;
The line number of the file you wish to browse to.
&lt;line_2&gt;
The line range (from &lt;line_1&gt; to &lt;line_2&gt;) of the file you wish to
browse to.
## EXAMPLES
$ git browse
$ 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
Written by Mark Pitman &lt;<https://github.com/mapitman>&gt;