Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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