Skip to content

Commit

Permalink
Merge pull request #981 from pbnj/feat/browse-file
Browse files Browse the repository at this point in the history
feat(bin/git-browse): open website at file & line number or range
  • Loading branch information
spacewander authored Jun 13, 2022
2 parents fdf89cd + 7acc1de commit d597f68
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 38 deletions.
109 changes: 76 additions & 33 deletions bin/git-browse
Original file line number Diff line number Diff line change
@@ -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 rev-parse HEAD 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_or_branch}/${filename}"
if [[ -n "${line1}" ]]; then
url="${url}#L${line1}"
if [[ -n "${line2}" ]]; then
url="${url}-${line2}"
fi
fi
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_or_branch}/${filename}"
if [[ -n "${line1}" ]]; then
url="${url}#L${line1}"
if [[ -n "${line2}" ]]; then
url="${url}-L${line2}"
fi
fi
;;
*)
# fall back to xdg-open for BSDs, etc.
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}/src/${commit_or_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
31 changes: 29 additions & 2 deletions man/git-browse.1
Original file line number Diff line number Diff line change
@@ -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\.
Expand All @@ -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>
.
Expand Down
23 changes: 21 additions & 2 deletions man/git-browse.html

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 20 additions & 1 deletion man/git-browse.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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;
Expand Down

0 comments on commit d597f68

Please sign in to comment.