| 116 | } |
| 117 | |
| 118 | func cleanAUR(ctx context.Context, run *runtime.Runtime, |
| 119 | keepInstalled, keepCurrent, removeAll bool, dbExecutor db.Executor, |
| 120 | ) error { |
| 121 | run.Logger.Println(gotext.Get("removing AUR packages from cache...")) |
| 122 | |
| 123 | installedBases := mapset.NewThreadUnsafeSet[string]() |
| 124 | inAURBases := mapset.NewThreadUnsafeSet[string]() |
| 125 | |
| 126 | remotePackages := dbExecutor.InstalledRemotePackages() |
| 127 | |
| 128 | files, err := os.ReadDir(run.Cfg.BuildDir) |
| 129 | if err != nil { |
| 130 | return err |
| 131 | } |
| 132 | |
| 133 | cachedPackages := make([]string, 0, len(files)) |
| 134 | |
| 135 | for _, file := range files { |
| 136 | if !file.IsDir() { |
| 137 | continue |
| 138 | } |
| 139 | |
| 140 | cachedPackages = append(cachedPackages, file.Name()) |
| 141 | } |
| 142 | |
| 143 | // Most people probably don't use keep current and that is the only |
| 144 | // case where this is needed. |
| 145 | // Querying the AUR is slow and needs internet so don't do it if we |
| 146 | // don't need to. |
| 147 | if keepCurrent { |
| 148 | info, errInfo := run.AURClient.Get(ctx, &aur.Query{ |
| 149 | Needles: cachedPackages, |
| 150 | }) |
| 151 | if errInfo != nil { |
| 152 | return errInfo |
| 153 | } |
| 154 | |
| 155 | for i := range info { |
| 156 | inAURBases.Add(info[i].PackageBase) |
| 157 | } |
| 158 | } |
| 159 | |
| 160 | for _, pkg := range remotePackages { |
| 161 | if pkg.Base() != "" { |
| 162 | installedBases.Add(pkg.Base()) |
| 163 | } else { |
| 164 | installedBases.Add(pkg.Name()) |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | for _, file := range files { |
| 169 | if !file.IsDir() { |
| 170 | continue |
| 171 | } |
| 172 | |
| 173 | if !removeAll { |
| 174 | if keepInstalled && installedBases.Contains(file.Name()) { |
| 175 | continue |