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