Skip to content

Commit 54e72c6

Browse files
author
atighineanu
committed
added cleanup option for storage + scc
1 parent 271fa8c commit 54e72c6

File tree

1 file changed

+70
-1
lines changed

1 file changed

+70
-1
lines changed

cmd/sync.go

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package cmd
22

33
import (
44
"fmt"
5+
"io/ioutil"
56
"log"
67
"net/url"
78
"os"
89
"path/filepath"
910
"strings"
1011

12+
"github.com/manifoldco/promptui"
1113
"github.com/spf13/cobra"
1214
"github.com/uyuni-project/minima/get"
1315
yaml "gopkg.in/yaml.v2"
@@ -138,6 +140,8 @@ func syncersFromConfig(configString string) (result []*get.Syncer, err error) {
138140
}
139141
}
140142

143+
144+
141145
for _, httpRepo := range config.HTTP {
142146
repoURL, err := url.Parse(httpRepo.URL)
143147
if err != nil {
@@ -166,7 +170,9 @@ func syncersFromConfig(configString string) (result []*get.Syncer, err error) {
166170
}
167171
result = append(result, get.NewSyncer(*repoURL, archs, storage))
168172
}
169-
173+
if cleanup {
174+
RemoveOldChannelsFromFileStorage(config)
175+
}
170176
return
171177
}
172178

@@ -176,3 +182,66 @@ func init() {
176182
RootCmd.PersistentFlags().StringVarP(&archs, "arch", "a", "", "flag that specifies covered archs in the given repo")
177183
RootCmd.PersistentFlags().BoolVarP(&syncLegacyPackages, "legacypackages", "l", false, "flag that triggers mirroring of i586 pkgs in x86_64 repos")
178184
}
185+
186+
func RemoveOldChannelsFromFileStorage (config Config) (err error) {
187+
// DO CLEANUP - TO BE IMPLEMENTED
188+
log.Println("searching for outdated repositories...")
189+
//fmt.Printf("List of Repos from config: %s ---> %s\n", config.SCC.RepoNames, config.HTTP)
190+
mappedRepos := make(map[string]bool)
191+
var urlink *url.URL
192+
for _, elem := range config.HTTP {
193+
urlink, err = url.Parse(elem.URL)
194+
if err != nil {
195+
panic(err)
196+
}
197+
mappedRepos[filepath.Join(config.Storage.Path, urlink.Path)] = true
198+
}
199+
//fmt.Printf("MAPPED REPOS: %v\n", mappedRepos)
200+
path := config.Storage.Path
201+
muChannelList := make(map[string]bool)
202+
filepath.Walk(path, func(path string, info os.FileInfo, err error) error {
203+
if info.IsDir() {
204+
if info.Name() == "repodata" {
205+
muChannelList[strings.Replace(path, "/repodata", "", 1)] = true
206+
return nil
207+
}
208+
if files, err := ioutil.ReadDir(path); len(files) == 0 && path != config.Storage.Path {
209+
if err != nil {
210+
log.Fatal(err)
211+
}
212+
log.Printf("Removing unused empty folders: %s\n", path)
213+
os.RemoveAll(path)
214+
}
215+
}
216+
return nil
217+
})
218+
//fmt.Printf("CHANNEL LIST: %v\n", muChannelList)
219+
for ind, _ := range muChannelList {
220+
if mappedRepos[ind] {
221+
log.Printf("Repo %s is registered...\n", ind)
222+
} else {
223+
log.Printf("Repo %s is not registered in the yaml file...", ind)
224+
if autoApprove {
225+
log.Printf("Removing repo %s ...\n", ind)
226+
os.RemoveAll(ind)
227+
} else {
228+
prompt := promptui.Select{
229+
Label: fmt.Sprintf("Delete repo: %s ??? [Yes/No]", ind),
230+
Items: []string{"Yes", "No"},
231+
}
232+
_, result, err := prompt.Run()
233+
if err != nil {
234+
log.Fatalf("Prompt failed %v\n", err)
235+
}
236+
if result == "Yes" {
237+
log.Printf("Removing repo: %s ...\n", ind)
238+
os.RemoveAll(ind)
239+
} else {
240+
log.Printf("Keeping repo: %s ...\n", ind)
241+
}
242+
}
243+
}
244+
}
245+
log.Println("...done!")
246+
return
247+
}

0 commit comments

Comments
 (0)