utils.go

 1package common
 2
 3import (
 4	"fmt"
 5	"net/url"
 6
 7	"github.com/charmbracelet/soft-serve/server/utils"
 8	"github.com/muesli/reflow/truncate"
 9)
10
11// TruncateString is a convenient wrapper around truncate.TruncateString.
12func TruncateString(s string, max int) string {
13	if max < 0 {
14		max = 0
15	}
16	return truncate.StringWithTail(s, uint(max), "…")
17}
18
19// RepoURL returns the URL of the repository.
20func RepoURL(publicURL, name string) string {
21	name = utils.SanitizeRepo(name) + ".git"
22	url, err := url.Parse(publicURL)
23	if err == nil {
24		switch url.Scheme {
25		case "ssh":
26			port := url.Port()
27			if port == "" || port == "22" {
28				return fmt.Sprintf("git@%s:%s", url.Hostname(), name)
29			}
30			return fmt.Sprintf("ssh://%s:%s/%s", url.Hostname(), url.Port(), name)
31		}
32	}
33
34	return fmt.Sprintf("%s/%s", publicURL, name)
35}
36
37// CloneCmd returns the URL of the repository.
38var CloneCmd = func(publicURL, name string) string {
39	return fmt.Sprintf("git clone %s", RepoURL(publicURL, name))
40}