@@ -29,6 +29,7 @@ import (
2929 "github.com/aws-controllers-k8s/dev-tools/pkg/config"
3030 ackdevgit "github.com/aws-controllers-k8s/dev-tools/pkg/git"
3131 "github.com/aws-controllers-k8s/dev-tools/pkg/github"
32+ "github.com/aws-controllers-k8s/dev-tools/pkg/util"
3233)
3334
3435const (
@@ -89,26 +90,42 @@ type Manager struct {
8990}
9091
9192// LoadRepository loads information about a single local repository
92- func (m * Manager ) LoadRepository (name string ) (* Repository , error ) {
93+ func (m * Manager ) LoadRepository (name string , t RepositoryType ) (* Repository , error ) {
9394 // check repo cache
9495 repo , err := m .getRepository (name )
9596 if err == nil {
9697 return repo , nil
9798 }
9899
99- repoName := name
100+ switch t {
101+ case RepositoryTypeCore :
102+ if ! util .InStrings (name , m .cfg .Repositories .Core ) {
103+ return nil , ErrUnconfiguredRepository
104+ }
105+ case RepositoryTypeController :
106+ if ! util .InStrings (name , m .cfg .Repositories .Services ) {
107+ return nil , ErrUnconfiguredRepository
108+ }
109+ }
110+
111+ return m .AddRepository (name , t )
112+ }
113+
114+ // AddRepository creates a new Repository object and adds it to the cache.
115+ func (m * Manager ) AddRepository (name string , t RepositoryType ) (* Repository , error ) {
116+ repo := NewRepository (name , t )
100117
101118 // set expected fork name
102- expectedForkName := repoName
119+ expectedForkName := repo . Name
103120 if m .cfg .Github .ForkPrefix != "" {
104- expectedForkName = fmt .Sprintf ("%s%s" , m .cfg .Github .ForkPrefix , repoName )
121+ expectedForkName = fmt .Sprintf ("%s%s" , m .cfg .Github .ForkPrefix , repo . Name )
105122 }
106123
107124 var gitHead string
108125 var gitRepo * git.Repository
109- fullPath := filepath .Join (m .cfg .RootDirectory , repoName )
126+ fullPath := filepath .Join (m .cfg .RootDirectory , repo . Name )
110127
111- gitRepo , err = m .git .Open (fullPath )
128+ gitRepo , err : = m .git .Open (fullPath )
112129 if err != nil && err != git .ErrRepositoryNotExists {
113130 return nil , err
114131 } else if err == nil {
@@ -120,20 +137,10 @@ func (m *Manager) LoadRepository(name string) (*Repository, error) {
120137 gitHead = head .Name ().Short ()
121138 }
122139
123- t := RepositoryTypeCore
124- if strings .HasSuffix (name , "-controller" ) {
125- t = RepositoryTypeController
126- }
127-
128- repo = & Repository {
129- Name : repoName ,
130- Type : t ,
131- gitRepo : gitRepo ,
132- GitHead : gitHead ,
133- FullPath : fullPath ,
134- ExpectedForkName : expectedForkName ,
135- }
136-
140+ repo .gitRepo = gitRepo
141+ repo .GitHead = gitHead
142+ repo .FullPath = fullPath
143+ repo .ExpectedForkName = expectedForkName
137144 // cache repository
138145 m .repoCache [name ] = repo
139146 return repo , nil
@@ -144,14 +151,14 @@ func (m *Manager) LoadRepository(name string) (*Repository, error) {
144151func (m * Manager ) LoadAll () error {
145152 // collect repositories from config
146153 for _ , coreRepo := range m .cfg .Repositories .Core {
147- _ , err := m .LoadRepository (coreRepo )
154+ _ , err := m .LoadRepository (coreRepo , RepositoryTypeCore )
148155 if err != nil {
149156 return err
150157 }
151158 }
152159 for _ , serviceName := range m .cfg .Repositories .Services {
153160 serviceRepoName := fmt .Sprintf ("%s-controller" , serviceName )
154- _ , err := m .LoadRepository (serviceRepoName )
161+ _ , err := m .LoadRepository (serviceRepoName , RepositoryTypeController )
155162 if err != nil {
156163 return err
157164 }
@@ -174,7 +181,7 @@ func (m *Manager) List(filters ...Filter) []*Repository {
174181 repoNames := append (m .cfg .Repositories .Core , m .cfg .Repositories .Services ... )
175182mainLoop:
176183 for _ , repoName := range repoNames {
177- repo , err := m .LoadRepository (repoName )
184+ repo , err := m .getRepository (repoName )
178185 if err != nil {
179186 continue
180187 }
@@ -190,7 +197,10 @@ mainLoop:
190197
191198// Clone clones a known repository to the config root directory
192199func (m * Manager ) clone (ctx context.Context , repoName string ) error {
193- repo , err := m .LoadRepository (repoName )
200+ // TODO(a-hilaly) ideally we need to store all repository names (service name, fork name,
201+ // local clone name etc...)
202+ repoName = strings .TrimSuffix (repoName , "-controller" )
203+ repo , err := m .getRepository (repoName )
194204 if err != nil {
195205 return fmt .Errorf ("cannot clone repository %s: %v" , repoName , err )
196206 }
@@ -277,7 +287,7 @@ func (m *Manager) EnsureClone(ctx context.Context, repo *Repository) error {
277287// EnsureRepository ensures the current user owns a fork of the given repository
278288// and has cloned it.
279289func (m * Manager ) EnsureRepository (ctx context.Context , name string ) error {
280- repo , err := m .LoadRepository (name )
290+ repo , err := m .getRepository (name )
281291 if err != nil && err != ErrRepositoryDoesntExist {
282292 return err
283293 }
0 commit comments