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
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
.
|
||||
|
|
|
|||
|
|
@ -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><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>
|
||||
|
||||
<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 <<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'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>March 2020</li>
|
||||
<li class='tc'>June 2022</li>
|
||||
<li class='tr'>git-browse(1)</li>
|
||||
</ol>
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
<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
|
||||
|
||||
$ 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 <<https://github.com/mapitman>>
|
||||
|
|
|
|||
Loading…
Reference in a new issue