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
 | |
| }
 |