xref: /aosp_15_r20/tools/treble/hacksaw/codebase/codebase.go (revision 105f628577ac4ba0e277a494fbb614ed8c12a994)
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