1*105f6285SAndroid Build Coastguard Worker// Copyright 2020 Google LLC 2*105f6285SAndroid Build Coastguard Worker// 3*105f6285SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*105f6285SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*105f6285SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*105f6285SAndroid Build Coastguard Worker// 7*105f6285SAndroid Build Coastguard Worker// https://www.apache.org/licenses/LICENSE-2.0 8*105f6285SAndroid Build Coastguard Worker// 9*105f6285SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*105f6285SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*105f6285SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*105f6285SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*105f6285SAndroid Build Coastguard Worker// limitations under the License. 14*105f6285SAndroid Build Coastguard Worker 15*105f6285SAndroid Build Coastguard Worker// Package codebase let's you manage codebases 16*105f6285SAndroid Build Coastguard Workerpackage codebase 17*105f6285SAndroid Build Coastguard Worker 18*105f6285SAndroid Build Coastguard Workerimport ( 19*105f6285SAndroid Build Coastguard Worker "fmt" 20*105f6285SAndroid Build Coastguard Worker "os" 21*105f6285SAndroid Build Coastguard Worker "path/filepath" 22*105f6285SAndroid Build Coastguard Worker 23*105f6285SAndroid Build Coastguard Worker "android.googlesource.com/platform/tools/treble.git/hacksaw/config" 24*105f6285SAndroid Build Coastguard Worker) 25*105f6285SAndroid Build Coastguard Worker 26*105f6285SAndroid Build Coastguard Worker// Add a codebase to the list of supported codebases 27*105f6285SAndroid Build Coastguard Workerfunc Add(name string, path string) (*config.Config, error) { 28*105f6285SAndroid Build Coastguard Worker absPath, err := filepath.Abs(path) 29*105f6285SAndroid Build Coastguard Worker if err != nil { 30*105f6285SAndroid Build Coastguard Worker return nil, err 31*105f6285SAndroid Build Coastguard Worker } 32*105f6285SAndroid Build Coastguard Worker //check that the codebase path is valid before adding 33*105f6285SAndroid Build Coastguard Worker _, err = os.Stat(absPath) 34*105f6285SAndroid Build Coastguard Worker if err != nil { 35*105f6285SAndroid Build Coastguard Worker return nil, err 36*105f6285SAndroid Build Coastguard Worker } 37*105f6285SAndroid Build Coastguard Worker cfg := config.GetConfig() 38*105f6285SAndroid Build Coastguard Worker if _, ok := cfg.Codebases[name]; ok { 39*105f6285SAndroid Build Coastguard Worker return cfg, fmt.Errorf("Codebase %s already exists", name) 40*105f6285SAndroid Build Coastguard Worker } 41*105f6285SAndroid Build Coastguard Worker cfg.Codebases[name] = absPath 42*105f6285SAndroid Build Coastguard Worker return cfg, err 43*105f6285SAndroid Build Coastguard Worker} 44*105f6285SAndroid Build Coastguard Worker 45*105f6285SAndroid Build Coastguard Worker// Remove an existing codebase 46*105f6285SAndroid Build Coastguard Workerfunc Remove(remove string) (*config.Config, error) { 47*105f6285SAndroid Build Coastguard Worker cfg := config.GetConfig() 48*105f6285SAndroid Build Coastguard Worker _, ok := cfg.Codebases[remove] 49*105f6285SAndroid Build Coastguard Worker if !ok { 50*105f6285SAndroid Build Coastguard Worker return nil, fmt.Errorf("Codebase %s not found", remove) 51*105f6285SAndroid Build Coastguard Worker } 52*105f6285SAndroid Build Coastguard Worker delete(cfg.Codebases, remove) 53*105f6285SAndroid Build Coastguard Worker if cfg.DefaultCodebase == remove { 54*105f6285SAndroid Build Coastguard Worker cfg.DefaultCodebase = "" 55*105f6285SAndroid Build Coastguard Worker } 56*105f6285SAndroid Build Coastguard Worker return cfg, nil 57*105f6285SAndroid Build Coastguard Worker} 58*105f6285SAndroid Build Coastguard Worker 59*105f6285SAndroid Build Coastguard Worker// Default gets the default codebase 60*105f6285SAndroid Build Coastguard Workerfunc Default() string { 61*105f6285SAndroid Build Coastguard Worker cfg := config.GetConfig() 62*105f6285SAndroid Build Coastguard Worker def := cfg.DefaultCodebase 63*105f6285SAndroid Build Coastguard Worker return def 64*105f6285SAndroid Build Coastguard Worker} 65*105f6285SAndroid Build Coastguard Worker 66*105f6285SAndroid Build Coastguard Worker// SetDefault sets the default codebase 67*105f6285SAndroid Build Coastguard Workerfunc SetDefault(def string) error { 68*105f6285SAndroid Build Coastguard Worker cfg := config.GetConfig() 69*105f6285SAndroid Build Coastguard Worker _, ok := cfg.Codebases[def] 70*105f6285SAndroid Build Coastguard Worker if !ok { 71*105f6285SAndroid Build Coastguard Worker return fmt.Errorf("Codebase %s not found", def) 72*105f6285SAndroid Build Coastguard Worker } 73*105f6285SAndroid Build Coastguard Worker cfg.DefaultCodebase = def 74*105f6285SAndroid Build Coastguard Worker return nil 75*105f6285SAndroid Build Coastguard Worker} 76*105f6285SAndroid Build Coastguard Worker 77*105f6285SAndroid Build Coastguard Worker// List all supported codebases 78*105f6285SAndroid Build Coastguard Workerfunc List() map[string]string { 79*105f6285SAndroid Build Coastguard Worker cfg := config.GetConfig() 80*105f6285SAndroid Build Coastguard Worker return cfg.Codebases 81*105f6285SAndroid Build Coastguard Worker} 82*105f6285SAndroid Build Coastguard Worker 83*105f6285SAndroid Build Coastguard Worker// GetDir retrieves the directory of a specific workspace 84*105f6285SAndroid Build Coastguard Workerfunc GetDir(codebase string) (string, error) { 85*105f6285SAndroid Build Coastguard Worker cfg := config.GetConfig() 86*105f6285SAndroid Build Coastguard Worker dir, ok := cfg.Codebases[codebase] 87*105f6285SAndroid Build Coastguard Worker if !ok { 88*105f6285SAndroid Build Coastguard Worker return dir, fmt.Errorf("Codebase %s not found", 89*105f6285SAndroid Build Coastguard Worker codebase) 90*105f6285SAndroid Build Coastguard Worker } 91*105f6285SAndroid Build Coastguard Worker return dir, nil 92*105f6285SAndroid Build Coastguard Worker} 93