v.io/jiri@v0.0.0-20160715023856-abfb8b131290/profiles/profilescmdline/internal/example/eg.go (about) 1 // Copyright 2015 The Vanadium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package example 6 7 import ( 8 "flag" 9 "fmt" 10 "path/filepath" 11 12 "v.io/jiri" 13 "v.io/jiri/profiles" 14 "v.io/jiri/profiles/profilesutil" 15 ) 16 17 type exampleManager struct { 18 installer, name, root string 19 versionInfo *profiles.VersionInfo 20 profile *profiles.Profile 21 } 22 23 func newExampleMgr(installer, name string) *exampleManager { 24 supported := map[string]interface{}{ 25 "2": nil, 26 "4": nil, 27 "3": nil, 28 } 29 return &exampleManager{ 30 installer: installer, 31 name: name, 32 versionInfo: profiles.NewVersionInfo("example", supported, "3"), 33 } 34 } 35 36 func New(installer, name string) profiles.Manager { 37 return newExampleMgr(installer, name) 38 } 39 40 func (eg *exampleManager) Name() string { 41 return eg.name 42 } 43 44 func (eg *exampleManager) Installer() string { 45 return eg.installer 46 } 47 48 func (eg *exampleManager) Info() string { 49 return ` 50 The example profile is for testing/example purposes only 51 ` 52 } 53 54 func (eg *exampleManager) VersionInfo() *profiles.VersionInfo { 55 return eg.versionInfo 56 } 57 58 func (eg *exampleManager) String() string { 59 return fmt.Sprintf("Profile: %s installed by %s: %s\n", eg.name, eg.installer, eg.versionInfo) 60 } 61 62 func (eg *exampleManager) OSPackages(jirix *jiri.X, pdb *profiles.DB, root jiri.RelPath, target profiles.Target) ([]string, error) { 63 return nil, nil 64 } 65 66 func (eg *exampleManager) AddFlags(*flag.FlagSet, profiles.Action) { 67 } 68 69 func (eg *exampleManager) filename(root jiri.RelPath, target profiles.Target) jiri.RelPath { 70 r := root.Join("eg") 71 dir := target.TargetSpecificDirname() 72 return r.Join(dir) 73 } 74 75 func (eg *exampleManager) Install(jirix *jiri.X, pdb *profiles.DB, root jiri.RelPath, target profiles.Target) error { 76 version, err := eg.versionInfo.Select(target.Version()) 77 if err != nil { 78 return err 79 } 80 target.SetVersion(version) 81 dir := eg.filename(root, target).Abs(jirix) 82 if err := jirix.NewSeq(). 83 MkdirAll(dir, profilesutil.DefaultDirPerm). 84 WriteFile(filepath.Join(dir, "version"), []byte(version), profilesutil.DefaultFilePerm). 85 WriteFile(filepath.Join(dir, version), []byte(version), profilesutil.DefaultFilePerm). 86 Done(); err != nil { 87 return err 88 } 89 eg.profile = pdb.InstallProfile(eg.installer, eg.name, string(root)) 90 target.InstallationDir = string(root) 91 return pdb.AddProfileTarget(eg.installer, eg.name, target) 92 } 93 94 func (eg *exampleManager) Uninstall(jirix *jiri.X, pdb *profiles.DB, root jiri.RelPath, target profiles.Target) error { 95 version, err := eg.versionInfo.Select(target.Version()) 96 if err != nil { 97 return err 98 } 99 dir := eg.filename(root, target).Abs(jirix) 100 if err := jirix.NewSeq().WriteFile(filepath.Join(dir, "version"), []byte(version), profilesutil.DefaultFilePerm). 101 WriteFile(filepath.Join(dir, version), []byte(version), profilesutil.DefaultFilePerm). 102 Remove(filepath.Join(dir, version)). 103 Done(); err != nil { 104 return err 105 } 106 if pdb.RemoveProfileTarget(eg.installer, eg.name, target) { 107 eg.profile = nil 108 } 109 return nil 110 }