37 lines
775 B
Go
37 lines
775 B
Go
|
package getter
|
||
|
|
||
|
import (
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// SourceDirSubdir takes a source and returns a tuple of the URL without
|
||
|
// the subdir and the URL with the subdir.
|
||
|
func SourceDirSubdir(src string) (string, string) {
|
||
|
// Calcaulate an offset to avoid accidentally marking the scheme
|
||
|
// as the dir.
|
||
|
var offset int
|
||
|
if idx := strings.Index(src, "://"); idx > -1 {
|
||
|
offset = idx + 3
|
||
|
}
|
||
|
|
||
|
// First see if we even have an explicit subdir
|
||
|
idx := strings.Index(src[offset:], "//")
|
||
|
if idx == -1 {
|
||
|
return src, ""
|
||
|
}
|
||
|
|
||
|
idx += offset
|
||
|
subdir := src[idx+2:]
|
||
|
src = src[:idx]
|
||
|
|
||
|
// Next, check if we have query parameters and push them onto the
|
||
|
// URL.
|
||
|
if idx = strings.Index(subdir, "?"); idx > -1 {
|
||
|
query := subdir[idx:]
|
||
|
subdir = subdir[:idx]
|
||
|
src += query
|
||
|
}
|
||
|
|
||
|
return src, subdir
|
||
|
}
|