// DownloadSnap downloads the snap with the given name and optionally revision using the provided store and options. It returns the final full path of the snap inside the opts.TargetDir and a snap.Info for the snap. func DownloadSnap(sto Store, name string, revision snap.Revision, opts *DownloadOptions) (targetFn string, info *snap.Info, err error) { if opts == nil { opts = &DownloadOptions{} } targetDir := opts.TargetDir if targetDir == "" { pwd, err := os.Getwd() if err != nil { return "", nil, err } targetDir = pwd } snap, err := sto.Snap(name, opts.Channel, opts.DevMode, revision, opts.User) if err != nil { return "", nil, fmt.Errorf("cannot find snap %q: %v", name, err) } baseName := filepath.Base(snap.MountFile()) targetFn = filepath.Join(targetDir, baseName) pb := progress.NewTextProgress() if err = sto.Download(context.TODO(), name, targetFn, &snap.DownloadInfo, pb, opts.User); err != nil { return "", nil, err } return targetFn, snap, nil }
// InUse checks if the given name/revision is used in the // boot environment func InUse(name string, rev snap.Revision) bool { bootloader, err := partition.FindBootloader() if err != nil { logger.Noticef("cannot get boot settings: %s", err) return false } bootVars, err := bootloader.GetBootVars("snap_kernel", "snap_try_kernel", "snap_core", "snap_try_core") if err != nil { logger.Noticef("cannot get boot vars: %s", err) return false } snapFile := filepath.Base(snap.MountFile(name, rev)) for _, bootVar := range bootVars { if bootVar == snapFile { return true } } return false }
func (snapsup *SnapSetup) MountFile() string { return snap.MountFile(snapsup.Name(), snapsup.Revision()) }
func (ss *SnapSetup) MountFile() string { return snap.MountFile(ss.Name(), ss.Revision()) }