Add git-browse command

Handles git@server and https://server remotes.
Allows specification of the remote to open
Closes #666
This commit is contained in:
Mark Pitman 2020-02-27 08:19:28 -08:00
parent be50c2f3f5
commit 362a0c29ae
9 changed files with 257 additions and 0 deletions

View file

@ -3,6 +3,7 @@
- [`git archive-file`](#git-archive-file)
- [`git authors`](#git-authors)
- [`git back`](#git-back)
- [`git browse`](#git-browse)
- [`git bug`](#git-featurerefactorbugchore)
- [`git bulk`](#git-bulk)
- [`git brv`](#git-brv)
@ -1480,3 +1481,11 @@ Sync local branch with origin/master
```bash
$ git sync origin master
```
## git browse
Opens the current git repository website in your default web browser.
```bash
$ git browse
```

53
bin/git-browse Executable file
View file

@ -0,0 +1,53 @@
#!/usr/bin/env bash
if [[ $1 == "" ]]
then
remote=$(git remote | head -n 1)
else
remote=$1
fi
if [[ $remote == "" ]]
then
echo "Remote not found"
exit 1
fi
remote_url=$(git remote get-url $remote)
if [[ $? -ne 0 ]]
then
exit $?
fi
if [[ $remote_url = git@* ]]
then
url=$(echo $remote_url | sed -E -e 's/:/\//' -e 's/\.git$//' -e 's/\w*@(.*)/https:\/\/\1/')
elif [[ $remote_url = https* ]]
then
url=$(echo $remote_url | sed -E -e 's/\.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
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

@ -150,3 +150,7 @@ _git_squash(){
_git_undo(){
__gitcomp "--hard --soft -h -s"
}
_git_browse(){
__git_complete_remote_or_refspec
}

View file

@ -454,6 +454,7 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
archive-file:'export the current head of the git repository to an archive' \
authors:'generate authors report' \
back:'undo and stage latest commits' \
browse:'open repo website in browser' \
bug:'create bug branch' \
bulk:'run bulk commands' \
brv:'list branches sorted by their last commit date'\

34
man/git-browse.1 Normal file
View file

@ -0,0 +1,34 @@
.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GIT\-BROWSE" "1" "March 2020" "" "Git Extras"
.
.SH "NAME"
\fBgit\-browse\fR \-
.
.SH "SYNOPSIS"
\fBgit\-browse\fR [remote_name]
.
.SH "DESCRIPTION"
Opens the current git repository website in your default web browser\.
.
.SH "OPTIONS"
<remote_name>
.
.P
The name of the remote you wish to browse to\. Defaults to the first remote if not specified\.
.
.SH "EXAMPLES"
$ git open
.
.P
$ git open upstream
.
.SH "AUTHOR"
Written by Mark Pitman <\fIhttps://github\.com/mapitman\fR>
.
.SH "REPORTING BUGS"
<\fIhttps://github\.com/tj/git\-extras/issues\fR>
.
.SH "SEE ALSO"
<\fIhttps://github\.com/tj/git\-extras\fR>

119
man/git-browse.html Normal file
View file

@ -0,0 +1,119 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='content-type' value='text/html;charset=utf8'>
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
<title>git-browse(1) - &lt;View the web page for the current repository&gt;</title>
<style type='text/css' media='all'>
/* style: man */
body#manpage {margin:0}
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
.mp h2 {margin:10px 0 0 0}
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
.mp h3 {margin:0 0 0 4ex}
.mp dt {margin:0;clear:left}
.mp dt.flush {float:left;width:8ex}
.mp dd {margin:0 0 0 9ex}
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
.mp pre {margin-bottom:20px}
.mp pre+h2,.mp pre+h3 {margin-top:22px}
.mp h2+pre,.mp h3+pre {margin-top:5px}
.mp img {display:block;margin:auto}
.mp h1.man-title {display:none}
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
.mp h2 {font-size:16px;line-height:1.25}
.mp h1 {font-size:20px;line-height:2}
.mp {text-align:justify;background:#fff}
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
.mp u {text-decoration:underline}
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
.mp b.man-ref {font-weight:normal;color:#434241}
.mp pre {padding:0 4ex}
.mp pre code {font-weight:normal;color:#434241}
.mp h2+pre,h3+pre {padding-left:0}
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
ol.man-decor {width:100%}
ol.man-decor li.tl {text-align:left}
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
ol.man-decor li.tr {text-align:right;float:right}
</style>
</head>
<!--
The following styles are deprecated and will be removed at some point:
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
.man-navigation should be used instead.
-->
<body id='manpage'>
<div class='mp' id='man'>
<div class='man-navigation' style='display:none'>
<a href="#NAME">NAME</a>
<a href="#SYNOPSIS">SYNOPSIS</a>
<a href="#DESCRIPTION">DESCRIPTION</a>
<a href="#OPTIONS">OPTIONS</a>
<a href="#EXAMPLES">EXAMPLES</a>
<a href="#AUTHOR">AUTHOR</a>
<a href="#REPORTING-BUGS">REPORTING BUGS</a>
<a href="#SEE-ALSO">SEE ALSO</a>
</div>
<ol class='man-decor man-head man head'>
<li class='tl'>git-browse(1)</li>
<li class='tc'>Git Extras</li>
<li class='tr'>git-browse(1)</li>
</ol>
<h2 id="NAME">NAME</h2>
<p class="man-name">
<code>git-browse</code> - <span class="man-whatis"><view the web page for current repository /></span>
</p>
<h2 id="SYNOPSIS">SYNOPSIS</h2>
<p><code>git-browse</code> [remote_name]</p>
<h2 id="DESCRIPTION">DESCRIPTION</h2>
<p>Opens the current git repository website in your default web browser.</p>
<h2 id="OPTIONS">OPTIONS</h2>
<p>&lt;remote_name&gt;</p>
<p>The name of the remote you wish to browse to. Defaults to
the first remote if not specified.</p>
<h2 id="EXAMPLES">EXAMPLES</h2>
<p> $ git open</p>
<p> $ git open upstream</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>
<h2 id="REPORTING-BUGS">REPORTING BUGS</h2>
<p>&lt;<a href="https://github.com/tj/git-extras/issues" data-bare-link="true">https://github.com/tj/git-extras/issues</a>&gt;</p>
<h2 id="SEE-ALSO">SEE ALSO</h2>
<p>&lt;<a href="https://github.com/tj/git-extras" data-bare-link="true">https://github.com/tj/git-extras</a>&gt;</p>
<ol class='man-decor man-foot man foot'>
<li class='tl'></li>
<li class='tc'>March 2020</li>
<li class='tr'>git-browse(1)</li>
</ol>
</div>
</body>
</html>

35
man/git-browse.md Normal file
View file

@ -0,0 +1,35 @@
git-browse(1) -- <View the web page for the current repository>
================================
## SYNOPSIS
`git-browse` [remote_name]
## DESCRIPTION
Opens the current git repository website in your default web browser.
## OPTIONS
&lt;remote_name&gt;
The name of the remote you wish to browse to. Defaults to
the first remote if not specified.
## EXAMPLES
$ git open
$ git open upstream
## AUTHOR
Written by Mark Pitman &lt;<https://github.com/mapitman>&gt;
## REPORTING BUGS
&lt;<https://github.com/tj/git-extras/issues>&gt;
## SEE ALSO
&lt;<https://github.com/tj/git-extras>&gt;

View file

@ -25,6 +25,7 @@ git-extras(1) -- Awesome GIT utilities
- **git-archive-file(1)** Export the current HEAD of the git repository to an archive
- **git-authors(1)** Generate authors report
- **git-back(1)** Undo and Stage latest commits
- **git-browse(1)** <View the web page for the current repository>
- **git-brv(1)** List branches sorted by their last commit date
- **git-bug(1)** Create bug branch
- **git-bulk(1)** Run git commands on multiple repositories

View file

@ -3,6 +3,7 @@ git-alias(1) git-alias
git-archive-file(1) git-archive-file
git-authors(1) git-authors
git-back(1) git-back
git-browse(1) git-browse
git-brv(1) git-brv
git-bug(1) git-bug
git-bulk(1) git-bulk