Documentation

Overview

    Package updater is an update registry that manages updates and versions.

    Index

    Constants

    This section is empty.

    Variables

    View Source
    var (
    	ErrNotFound            = errors.New("the requested file could not be found")
    	ErrNotAvailableLocally = errors.New("the requested file is not available locally")
    )

      Errors

      Functions

      func GetIdentifierAndVersion

      func GetIdentifierAndVersion(versionedPath string) (identifier, version string, ok bool)

        GetIdentifierAndVersion splits the given file path into its identifier and version.

        func GetVersionedPath

        func GetVersionedPath(identifier, version string) (versionedPath string)

          GetVersionedPath combines the identifier and version and returns it as a file path.

          func UnpackGZIP

          func UnpackGZIP(r io.Reader) (io.Reader, error)

            UnpackGZIP unpacks a GZIP compressed reader r and returns a new reader. It's suitable to be used with registry.GetPackedFile.

            Types

            type File

            type File struct {
            	// contains filtered or unexported fields
            }

              File represents a file from the update system.

              func (*File) Blacklist

              func (file *File) Blacklist() error

                Blacklist notifies the update system that this file is somehow broken, and should be ignored from now on, until restarted.

                func (*File) Identifier

                func (file *File) Identifier() string

                  Identifier returns the identifier of the file.

                  func (*File) Path

                  func (file *File) Path() string

                    Path returns the absolute filepath of the file.

                    func (*File) Unpack

                    func (file *File) Unpack(suffix string, unpacker Unpacker) (string, error)

                      Unpack returns the path to the unpacked version of file and unpacks it on demand using unpacker.

                      func (*File) UpgradeAvailable

                      func (file *File) UpgradeAvailable() bool

                        UpgradeAvailable returns whether an upgrade is available for this file.

                        func (*File) Version

                        func (file *File) Version() string

                          Version returns the version of the file.

                          func (*File) WaitForAvailableUpgrade

                          func (file *File) WaitForAvailableUpgrade() <-chan struct{}

                            WaitForAvailableUpgrade blocks (selectable) until an upgrade for this file is available.

                            type Index

                            type Index struct {
                            	// Path is the path to the index file
                            	// on the update server.
                            	Path string
                            
                            	// Stable is set if the index file contains only stable
                            	// releases.
                            	Stable bool
                            
                            	// Beta is set if the index file contains beta
                            	// releases.
                            	Beta bool
                            }

                              Index describes an index file pulled by the updater.

                              type Resource

                              type Resource struct {
                              	sync.Mutex
                              
                              	// Identifier is the unique identifier for that resource.
                              	// It forms a file path using a forward-slash as the
                              	// path separator.
                              	Identifier string
                              
                              	// Versions holds all available resource versions.
                              	Versions []*ResourceVersion
                              
                              	// ActiveVersion is the last version of the resource
                              	// that someone requested using GetFile().
                              	ActiveVersion *ResourceVersion
                              
                              	// SelectedVersion is newest, selectable version of
                              	// that resource that is available. A version
                              	// is selectable if it's not blacklisted by the user.
                              	// Note that it's not guaranteed that the selected version
                              	// is available locally. In that case, GetFile will attempt
                              	// to download the latest version from the updates servers
                              	// specified in the resource registry.
                              	SelectedVersion *ResourceVersion
                              	// contains filtered or unexported fields
                              }

                                Resource represents a resource (via an identifier) and multiple file versions.

                                func (*Resource) AddVersion

                                func (res *Resource) AddVersion(version string, available, stableRelease, betaRelease bool) error

                                  AddVersion adds a resource version to a resource.

                                  func (*Resource) AnyVersionAvailable

                                  func (res *Resource) AnyVersionAvailable() bool

                                    AnyVersionAvailable returns true if any version of res is locally available.

                                    func (*Resource) Blacklist

                                    func (res *Resource) Blacklist(version string) error

                                      Blacklist blacklists the specified version and selects a new version.

                                      func (*Resource) GetFile

                                      func (res *Resource) GetFile() *File

                                        GetFile returns the selected version as a *File.

                                        func (*Resource) Len

                                        func (res *Resource) Len() int

                                          Len is the number of elements in the collection. It implements sort.Interface for ResourceVersion.

                                          func (*Resource) Less

                                          func (res *Resource) Less(i, j int) bool

                                            Less reports whether the element with index i should sort before the element with index j. It implements sort.Interface for ResourceVersions.

                                            func (*Resource) Purge

                                            func (res *Resource) Purge(keepExtra int)

                                              Purge deletes old updates, retaining a certain amount, specified by the keep parameter. Purge will always keep at least 2 versions so specifying a smaller keep value will have no effect.

                                              func (*Resource) Swap

                                              func (res *Resource) Swap(i, j int)

                                                Swap swaps the elements with indexes i and j. It implements sort.Interface for ResourceVersions.

                                                func (*Resource) UnpackArchive

                                                func (res *Resource) UnpackArchive() error

                                                  UnpackArchive unpacks the archive the resource refers to. The contents are unpacked into a directory with the same name as the file, excluding the suffix. If the destination folder already exists, it is assumed that the contents have already been correctly unpacked.

                                                  type ResourceRegistry

                                                  type ResourceRegistry struct {
                                                  	sync.RWMutex
                                                  
                                                  	Name string
                                                  
                                                  	UpdateURLs       []string
                                                  	UserAgent        string
                                                  	MandatoryUpdates []string
                                                  	AutoUnpack       []string
                                                  
                                                  	Beta    bool
                                                  	DevMode bool
                                                  	Online  bool
                                                  	// contains filtered or unexported fields
                                                  }

                                                    ResourceRegistry is a registry for managing update resources.

                                                    func (*ResourceRegistry) AddIndex

                                                    func (reg *ResourceRegistry) AddIndex(idx Index)

                                                      AddIndex adds a new index to the resource registry.

                                                      func (*ResourceRegistry) AddResource

                                                      func (reg *ResourceRegistry) AddResource(identifier, version string, available, stableRelease, betaRelease bool) error

                                                        AddResource adds a resource to the registry. Does _not_ select new version.

                                                        func (*ResourceRegistry) AddResources

                                                        func (reg *ResourceRegistry) AddResources(versions map[string]string, available, stableRelease, betaRelease bool) error

                                                          AddResources adds resources to the registry. Errors are logged, the last one is returned. Despite errors, non-failing resources are still added. Does _not_ select new versions.

                                                          func (*ResourceRegistry) Cleanup

                                                          func (reg *ResourceRegistry) Cleanup() error

                                                            Cleanup removes temporary files.

                                                            func (reg *ResourceRegistry) CreateSymlinks(symlinkRoot *utils.DirStructure) error

                                                              CreateSymlinks creates a directory structure with unversioned symlinks to the given updates list.

                                                              func (*ResourceRegistry) DownloadUpdates

                                                              func (reg *ResourceRegistry) DownloadUpdates(ctx context.Context) error

                                                                DownloadUpdates checks if updates are available and downloads updates of used components.

                                                                func (*ResourceRegistry) Export

                                                                func (reg *ResourceRegistry) Export() map[string]*Resource

                                                                  Export exports the list of resources. All resources must be locked when accessed.

                                                                  func (*ResourceRegistry) GetFile

                                                                  func (reg *ResourceRegistry) GetFile(identifier string) (*File, error)

                                                                    GetFile returns the selected (mostly newest) file with the given identifier or an error, if it fails.

                                                                    func (*ResourceRegistry) GetSelectedVersions

                                                                    func (reg *ResourceRegistry) GetSelectedVersions() (versions map[string]string)

                                                                      GetSelectedVersions returns a list of the currently selected versions.

                                                                      func (*ResourceRegistry) Initialize

                                                                      func (reg *ResourceRegistry) Initialize(storageDir *utils.DirStructure) error

                                                                        Initialize initializes a raw registry struct and makes it ready for usage.

                                                                        func (*ResourceRegistry) LoadIndexes

                                                                        func (reg *ResourceRegistry) LoadIndexes(ctx context.Context) error

                                                                          LoadIndexes loads the current release indexes from disk or will fetch a new version if not available and the registry is marked as online.

                                                                          func (*ResourceRegistry) Purge

                                                                          func (reg *ResourceRegistry) Purge(keep int)

                                                                            Purge deletes old updates, retaining a certain amount, specified by the keep parameter. Will at least keep 2 updates per resource.

                                                                            func (*ResourceRegistry) Reset

                                                                            func (reg *ResourceRegistry) Reset()

                                                                              Reset resets the internal state of the registry, removing all added resources.

                                                                              func (*ResourceRegistry) ScanStorage

                                                                              func (reg *ResourceRegistry) ScanStorage(root string) error

                                                                                ScanStorage scans root within the storage dir and adds found resources to the registry. If an error occurred, it is logged and the last error is returned. Everything that was found despite errors is added to the registry anyway. Leave root empty to scan the full storage dir.

                                                                                func (*ResourceRegistry) SelectVersions

                                                                                func (reg *ResourceRegistry) SelectVersions()

                                                                                  SelectVersions selects new resource versions depending on the current registry state.

                                                                                  func (*ResourceRegistry) SetBeta

                                                                                  func (reg *ResourceRegistry) SetBeta(on bool)

                                                                                    SetBeta sets the beta flag.

                                                                                    func (*ResourceRegistry) SetDevMode

                                                                                    func (reg *ResourceRegistry) SetDevMode(on bool)

                                                                                      SetDevMode sets the development mode flag.

                                                                                      func (*ResourceRegistry) StorageDir

                                                                                      func (reg *ResourceRegistry) StorageDir() *utils.DirStructure

                                                                                        StorageDir returns the main storage dir of the resource registry.

                                                                                        func (*ResourceRegistry) TmpDir

                                                                                        func (reg *ResourceRegistry) TmpDir() *utils.DirStructure

                                                                                          TmpDir returns the temporary working dir of the resource registry.

                                                                                          func (*ResourceRegistry) UnpackResources

                                                                                          func (reg *ResourceRegistry) UnpackResources() error

                                                                                            UnpackResources unpacks all resources defined in the AutoUnpack list.

                                                                                            func (*ResourceRegistry) UpdateIndexes

                                                                                            func (reg *ResourceRegistry) UpdateIndexes(ctx context.Context) error

                                                                                              UpdateIndexes downloads all indexes and returns the first error encountered.

                                                                                              type ResourceVersion

                                                                                              type ResourceVersion struct {
                                                                                              
                                                                                              	// VersionNumber is the string representation of the resource
                                                                                              	// version.
                                                                                              	VersionNumber string
                                                                                              
                                                                                              	// Available indicates if this version is available locally.
                                                                                              	Available bool
                                                                                              
                                                                                              	// StableRelease indicates that this version is part of
                                                                                              	// a stable release index file.
                                                                                              	StableRelease bool
                                                                                              
                                                                                              	// BetaRelease indicates that this version is part of
                                                                                              	// a beta release index file.
                                                                                              	BetaRelease bool
                                                                                              
                                                                                              	// Blacklisted may be set to true if this version should
                                                                                              	// be skipped and not used. This is useful if the version
                                                                                              	// is known to be broken.
                                                                                              	Blacklisted bool
                                                                                              	// contains filtered or unexported fields
                                                                                              }

                                                                                                ResourceVersion represents a single version of a resource.

                                                                                                func (*ResourceVersion) String

                                                                                                func (rv *ResourceVersion) String() string

                                                                                                type Unpacker

                                                                                                type Unpacker func(io.Reader) (io.Reader, error)

                                                                                                  Unpacker describes the function that is passed to File.Unpack. It receives a reader to the compressed/packed file and should return a reader that provides unpacked file contents. If the returned reader implements io.Closer it's close method is invoked when an error or io.EOF is returned from Read().

                                                                                                  Directories

                                                                                                  Path Synopsis