1// Copyright (c) Microsoft Corporation. All rights reserved. 2// Licensed under the MIT License. See License.txt in the project root for license information. 3 4package automation 5 6import ( 7 "fmt" 8 "io/ioutil" 9 "log" 10 "os" 11 "path/filepath" 12) 13 14func clean(sdkRoot string, packages packagesForReadme) ([]existingGenerationMetadata, error) { 15 var removedPackages []existingGenerationMetadata 16 17 for _, metadata := range packages { 18 log.Printf("Cleaning up pakcage '%s'...", metadata.packageName) 19 packageFullPath := filepath.Join(sdkRoot, metadata.packageName) 20 if err := os.RemoveAll(packageFullPath); err != nil { 21 return nil, fmt.Errorf("cannot remove package '%s': %+v", metadata.packageName, err) 22 } 23 24 removedPackages = append(removedPackages, metadata) 25 26 // recursively remove all its parent if this directory is empty after the deletion 27 if err := removeEmptyParents(filepath.Dir(packageFullPath)); err != nil { 28 return nil, err 29 } 30 } 31 32 return removedPackages, nil 33} 34 35func removeEmptyParents(parent string) error { 36 fi, err := ioutil.ReadDir(parent) 37 if err != nil { 38 return err 39 } 40 if len(fi) == 0 { 41 if err := os.RemoveAll(parent); err != nil { 42 return err 43 } 44 return removeEmptyParents(filepath.Dir(parent)) 45 } 46 return nil 47} 48