()
| 91 | } |
| 92 | |
| 93 | func (p Port) doRemovePort() error { |
| 94 | var noError = true |
| 95 | if fileio.PathExists(p.traceFile) { |
| 96 | color.Printf(color.Title, "\n[remove installed %s]\n", p.NameVersion()) |
| 97 | |
| 98 | defer func() { |
| 99 | if noError { |
| 100 | color.Printf(color.Hint, "✔ %s is removed from %s\n", p.NameVersion(), p.InstalledDir) |
| 101 | } |
| 102 | }() |
| 103 | } |
| 104 | |
| 105 | if !fileio.PathExists(p.traceFile) { |
| 106 | return nil |
| 107 | } |
| 108 | |
| 109 | // Open install info file. |
| 110 | file, err := os.OpenFile(p.traceFile, os.O_RDONLY, os.ModePerm) |
| 111 | if err != nil { |
| 112 | noError = false |
| 113 | return fmt.Errorf("cannot open install info file: %s", err) |
| 114 | } |
| 115 | |
| 116 | // Read line by line to remove installed file. |
| 117 | scanner := bufio.NewScanner(file) |
| 118 | for scanner.Scan() { |
| 119 | // CMake project may generate a checksum file after install, |
| 120 | // it would be like "/home/phil/.cmake/packages/gflags/4fbe0d242b1c0f095b87a43a7aeaf0d6", |
| 121 | // We'll try to remove it also. |
| 122 | line := scanner.Text() |
| 123 | fileToRemove := line |
| 124 | if !fileio.PathExists(line) { |
| 125 | fileToRemove = filepath.Join(dirs.WorkspaceDir, "installed", line) |
| 126 | } |
| 127 | if err := p.removeFiles(fileToRemove); err != nil { |
| 128 | noError = false |
| 129 | return fmt.Errorf("cannot remove file -> %w", err) |
| 130 | } |
| 131 | |
| 132 | // Try remove parent folder if it's empty. |
| 133 | if err := fileio.RemoveFolderRecursively(filepath.Dir(fileToRemove)); err != nil { |
| 134 | noError = false |
| 135 | return fmt.Errorf("cannot remove parent folder -> %w", err) |
| 136 | } |
| 137 | |
| 138 | fmt.Printf("-- remove: %s\n", fileToRemove) |
| 139 | } |
| 140 | if err := scanner.Err(); err != nil { |
| 141 | return err |
| 142 | } |
| 143 | file.Close() |
| 144 | |
| 145 | // Remove generated cmake config if exist. |
| 146 | portName, _, _ := strings.Cut(p.NameVersion(), "@") |
| 147 | libraryDir := filepath.Join(p.ctx.Platform().GetName(), p.ctx.Project().GetName(), p.ctx.BuildType()) |
| 148 | cmakeConfigDir := filepath.Join(dirs.InstalledDir, libraryDir, "lib", "cmake", portName) |
| 149 | if err := os.RemoveAll(cmakeConfigDir); err != nil { |
| 150 | noError = false |
no test coverage detected