Release 2.3.1 -> Develop #171

Merged
sloum merged 14 commits from release-2.3.1 into develop 2020-05-30 16:51:05 +00:00
5 changed files with 32 additions and 51 deletions

View File

@ -14,7 +14,7 @@ test : GOCMD := go1.11.13
BUILD_TIME := ${shell date "+%Y-%m-%dT%H:%M%z"}
# If VERSION is empty or not defined use the contents of the VERSION file
VERSION := ${shell git describe --tags 2> /dev/null}
VERSION := ${shell git describe --exact-match 2> /dev/null}
Review

The previous --tags flag would always give the most recent tag, so would never use the file that was included. Using --exact-match means that if the exact commit that we are on does not have a tag an error will be returned on stderr (which we toss out) and we will read the version from the VERSION file. This is less buggy, if slightly more manual, and more inline with the intention from when jboverf set this par tof the makefile up.

The previous `--tags` flag would always give the most recent tag, so would never use the file that was included. Using `--exact-match` means that if the exact commit that we are on does not have a tag an error will be returned on stderr (which we toss out) and we will read the version from the VERSION file. This is less buggy, if slightly more manual, and more inline with the intention from when jboverf set this par tof the makefile up.
ifndef VERSION
VERSION := ${shell cat ./VERSION}
endif
@ -57,6 +57,7 @@ install-bin: build
clean:
${GOCMD} clean
rm -f ./bombadillo.1.gz 2> /dev/null
rm -f ./${BINARY}_* 2> /dev/null
.PHONY: uninstall
uninstall: clean
@ -66,6 +67,13 @@ uninstall: clean
rm -f ${DESTDIR}${DATAROOTDIR}/pixmaps/bombadillo-icon.png
-update-desktop-database 2> /dev/null
.PHONY: release
release:
GOOS=linux GOARCH=amd64 ${GOCMD} build ${LDFLAGS} -o ${BINARY}_linux_64
GOOS=linux GOARCH=arm ${GOCMD} build ${LDFLAGS} -o ${BINARY}_linux_arm
GOOS=linux GOARCH=386 ${GOCMD} build ${LDFLAGS} -o ${BINARY}_linux_32
GOOS=darwin GOARCH=amd64 ${GOCMD} build ${LDFLAGS} -o ${BINARY}_darwin_64
.PHONY: test
test: clean build

View File

@ -27,6 +27,7 @@ These instructions will get a copy of the project up and running on your local m
### Prerequisites
You will need to have [Go](https://golang.org/) version >= 1.11.
To use the Makefile you will need a make that is GNU Make compatible (sorry BSD folks)
### Building, Installing, Uninstalling

View File

@ -1 +1 @@
2.3.0
2.3.1

View File

@ -3,6 +3,7 @@ package main
import (
"fmt"
"io/ioutil"
"net/url"
"os"
"path/filepath"
"regexp"
@ -121,15 +122,11 @@ func (c *client) Draw() {
} else {
for i := 0; i < c.Height-3; i++ {
if i < len(pageContent) {
extra := 0
escapes := re.FindAllString(pageContent[i], -1)
for _, esc := range escapes {
extra += len(esc)
}
screen.WriteString(fmt.Sprintf("%-*.*s", c.Width+extra, c.Width+extra, pageContent[i]))
screen.WriteString(pageContent[i])
screen.WriteString("\033[0K")
screen.WriteString("\n")
} else {
screen.WriteString(fmt.Sprintf("%-*.*s", c.Width, c.Width, " "))
screen.WriteString("\033[0K")
screen.WriteString("\n")
}
}
@ -700,20 +697,20 @@ func (c *client) search(query, uri, question string) {
var rootUrl string
switch u.Scheme {
case "gopher":
if ind := strings.Index(entry, "\t"); ind >= 0 {
if ind := strings.Index(u.Full, "\t"); ind >= 0 {
rootUrl = u.Full[:ind]
} else {
rootUrl = u.Full
}
c.Visit(fmt.Sprintf("%s\t%s", rootUrl, entry))
case "gemini":
if ind := strings.Index(entry, "?"); ind >= 0 {
if ind := strings.Index(u.Full, "?"); ind >= 0 {
rootUrl = u.Full[:ind]
} else {
rootUrl = u.Full
}
// escapedEntry := url.QueryEscape(entry) // TODO confirm expected behavior re: escaping
c.Visit(fmt.Sprintf("%s?%s", rootUrl, entry))
escapedEntry := url.PathEscape(entry)
c.Visit(fmt.Sprintf("%s?%s", rootUrl, escapedEntry))
case "http", "https":
c.Visit(u.Full)
default:

View File

@ -6,6 +6,7 @@ import (
"crypto/tls"
"fmt"
"io/ioutil"
"net/url"
"strconv"
"strings"
"time"
@ -343,8 +344,7 @@ func Visit(host, port, resource string, td *TofuDigest) (Capsule, error) {
resource = "/"
}
currentUrl := fmt.Sprintf("gemini://%s:%s%s", host, port, resource)
rootUrl := fmt.Sprintf("gemini://%s:%s", host, port)
capsule.Content, capsule.Links = parseGemini(body, rootUrl, currentUrl)
capsule.Content, capsule.Links = parseGemini(body, currentUrl)
} else {
capsule.Content = body
}
@ -365,7 +365,7 @@ func Visit(host, port, resource string, td *TofuDigest) (Capsule, error) {
}
}
func parseGemini(b, rootUrl, currentUrl string) (string, []string) {
func parseGemini(b, currentUrl string) (string, []string) {
splitContent := strings.Split(b, "\n")
links := make([]string, 0, 10)
@ -399,7 +399,7 @@ func parseGemini(b, rootUrl, currentUrl string) (string, []string) {
}
if strings.Index(link, "://") < 0 {
link = handleRelativeUrl(link, rootUrl, currentUrl)
link, _ = handleRelativeUrl(link, currentUrl)
}
links = append(links, link)
@ -417,42 +417,17 @@ func parseGemini(b, rootUrl, currentUrl string) (string, []string) {
return strings.Join(splitContent[:outputIndex], "\n"), links
}
func handleRelativeUrl(u, root, current string) string {
if len(u) < 1 {
return u
// handleRelativeUrl provides link completion
func handleRelativeUrl(relLink, current string) (string, error) {
base, err := url.Parse(current)
if err != nil {
return relLink, err
}
currentIsDir := (current[len(current)-1] == '/')
if u[0] == '/' {
return fmt.Sprintf("%s%s", root, u)
} else if strings.HasPrefix(u, "../") {
currentDir := strings.LastIndex(current, "/")
if currentIsDir {
upOne := strings.LastIndex(current[:currentDir], "/")
dirRoot := current[:upOne]
return dirRoot + u[2:]
}
return current[:currentDir] + u[2:]
rel, err := url.Parse(relLink)
if err != nil {
return relLink, err
}
if strings.HasPrefix(u, "./") {
if len(u) == 2 {
return current
}
u = u[2:]
}
if currentIsDir {
indPrevDir := strings.LastIndex(current[:len(current)-1], "/")
if indPrevDir < 9 {
return current + u
}
return current[:indPrevDir+1] + u
}
ind := strings.LastIndex(current, "/")
current = current[:ind+1]
return current + u
return base.ResolveReference(rel).String(), nil
}
func hashCert(cert []byte) string {