databricks-cli/libs/patchwheel/parse.go

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

59 lines
1.9 KiB
Go
Raw Normal View History

2025-03-03 20:00:50 +00:00
package patchwheel
import (
"fmt"
"strings"
2025-03-04 12:08:28 +00:00
"time"
2025-03-03 20:00:50 +00:00
)
// WheelInfo contains information extracted from a wheel filename
type WheelInfo struct {
Distribution string // Package distribution name
Version string // Package version
Tags []string // Python tags (python_tag, abi_tag, platform_tag)
}
// CalculateNewVersion generates a new version string and filename based on the wheel info and modification time.
// The version is updated according to the following rules:
// - if there is an existing part after + it is dropped
// - append +<mtime of the original wheel> to version
2025-03-04 17:07:01 +00:00
func CalculateNewVersion(info WheelInfo, mtime time.Time) (newVersion, newFilename string) {
baseVersion := strings.SplitN(info.Version, "+", 2)[0]
2025-03-04 12:08:28 +00:00
dt := strings.Replace(mtime.Format("20060102150405.00"), ".", "", 1)
dt = strings.Replace(dt, ".", "", 1)
newVersion = baseVersion + "+" + dt
2025-03-04 12:08:28 +00:00
newFilename = fmt.Sprintf("%s-%s-%s.whl",
info.Distribution,
newVersion,
strings.Join(info.Tags, "-"))
2025-03-04 12:08:28 +00:00
return newVersion, newFilename
}
2025-03-03 20:00:50 +00:00
// ParseWheelFilename parses a wheel filename and extracts its components.
// Wheel filenames follow the pattern: {distribution}-{version}(-{build tag})?-{python_tag}-{abi_tag}-{platform_tag}.whl
2025-03-04 17:07:01 +00:00
func ParseWheelFilename(filename string) (WheelInfo, error) {
parts := strings.Split(filename, "-")
if len(parts) < 5 {
2025-03-04 17:07:01 +00:00
return WheelInfo{}, fmt.Errorf("invalid wheel filename format: not enough parts in %s", filename)
}
2025-03-04 17:02:18 +00:00
if len(parts) > 6 {
2025-03-04 17:07:01 +00:00
return WheelInfo{}, fmt.Errorf("invalid wheel filename format: too many parts in %s", filename)
2025-03-04 17:02:18 +00:00
}
if !strings.HasSuffix(parts[len(parts)-1], ".whl") {
2025-03-04 17:07:01 +00:00
return WheelInfo{}, fmt.Errorf("invalid wheel filename format: missing .whl extension in %s", filename)
2025-03-03 20:00:50 +00:00
}
2025-03-04 17:02:18 +00:00
parts[len(parts)-1] = strings.TrimSuffix(parts[len(parts)-1], ".whl")
2025-03-04 16:48:57 +00:00
2025-03-04 17:07:01 +00:00
return WheelInfo{
2025-03-04 17:02:18 +00:00
Distribution: parts[0],
Version: parts[1],
Tags: parts[2:],
2025-03-03 20:00:50 +00:00
}, nil
}