All checks were successful
Test / Create distribution (push) Successful in 34s
Test / Sandbox (push) Successful in 2m9s
Test / Hpkg (push) Successful in 3m58s
Test / Sandbox (race detector) (push) Successful in 4m31s
Test / Hakurei (race detector) (push) Successful in 5m19s
Test / Hakurei (push) Successful in 2m12s
Test / Flake checks (push) Successful in 1m31s
This corrects minor mistakes in doc comments and adds them for undocumented constants. Signed-off-by: Ophestra <cat@gensokyo.uk>
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package hst
|
|
|
|
import (
|
|
"encoding/gob"
|
|
"path"
|
|
|
|
"hakurei.app/container/check"
|
|
)
|
|
|
|
func init() { gob.Register(new(FSLink)) }
|
|
|
|
// FilesystemLink is the type string of a symbolic link.
|
|
const FilesystemLink = "link"
|
|
|
|
// FSLink represents a symlink in the container filesystem.
|
|
type FSLink struct {
|
|
// Pathname in the container mount namespace.
|
|
Target *check.Absolute `json:"dst"`
|
|
// Arbitrary linkname value store in the symlink.
|
|
Linkname string `json:"linkname"`
|
|
// Whether to treat Linkname as an absolute pathname and dereference before creating the link.
|
|
Dereference bool `json:"dereference,omitempty"`
|
|
}
|
|
|
|
func (l *FSLink) Valid() bool {
|
|
if l == nil || l.Target == nil || l.Linkname == "" {
|
|
return false
|
|
}
|
|
return !l.Dereference || path.IsAbs(l.Linkname)
|
|
}
|
|
|
|
func (l *FSLink) Path() *check.Absolute {
|
|
if !l.Valid() {
|
|
return nil
|
|
}
|
|
return l.Target
|
|
}
|
|
|
|
func (l *FSLink) Host() []*check.Absolute { return nil }
|
|
|
|
func (l *FSLink) Apply(z *ApplyState) {
|
|
if !l.Valid() {
|
|
return
|
|
}
|
|
z.Link(l.Target, l.Linkname, l.Dereference)
|
|
}
|
|
|
|
func (l *FSLink) String() string {
|
|
if !l.Valid() {
|
|
return "<invalid>"
|
|
}
|
|
|
|
var dereference string
|
|
if l.Dereference {
|
|
if l.Target.String() == l.Linkname {
|
|
return l.Target.String() + "@"
|
|
}
|
|
dereference = "*"
|
|
}
|
|
return l.Target.String() + " -> " + dereference + l.Linkname
|
|
}
|