mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-01-12 03:21:33 +00:00
Only small amount of required checks is enabled, plan is to enable more linters as issues are fixed in the code.
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package deb
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/smira/aptly/utils"
|
|
)
|
|
|
|
var ppaRegexp = regexp.MustCompile("^ppa:([^/]+)/(.+)$")
|
|
|
|
// ParsePPA converts ppa URL like ppa:user/ppa-name to full HTTP url
|
|
func ParsePPA(ppaURL string, config *utils.ConfigStructure) (url string, distribution string, components []string, err error) {
|
|
matches := ppaRegexp.FindStringSubmatch(ppaURL)
|
|
if matches == nil {
|
|
err = fmt.Errorf("unable to parse ppa URL: %v", ppaURL)
|
|
return
|
|
}
|
|
|
|
distributorID := config.PpaDistributorID
|
|
if distributorID == "" {
|
|
distributorID, err = getDistributorID()
|
|
if err != nil {
|
|
err = fmt.Errorf("unable to figure out Distributor ID: %s, please set config option ppaDistributorID", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
codename := config.PpaCodename
|
|
if codename == "" {
|
|
codename, err = getCodename()
|
|
if err != nil {
|
|
err = fmt.Errorf("unable to figure out Codename: %s, please set config option ppaCodename", err)
|
|
return
|
|
}
|
|
}
|
|
|
|
distribution = codename
|
|
components = []string{"main"}
|
|
url = fmt.Sprintf("http://ppa.launchpad.net/%s/%s/%s", matches[1], matches[2], distributorID)
|
|
|
|
return
|
|
}
|
|
|
|
func getCodename() (string, error) {
|
|
out, err := exec.Command("lsb_release", "-sc").Output()
|
|
return strings.TrimSpace(string(out)), err
|
|
}
|
|
|
|
func getDistributorID() (string, error) {
|
|
out, err := exec.Command("lsb_release", "-si").Output()
|
|
return strings.ToLower(strings.TrimSpace(string(out))), err
|
|
}
|