diff options
Diffstat (limited to 'src/feature')
-rw-r--r-- | src/feature/syncinfo.nim | 36 | ||||
-rw-r--r-- | src/feature/syncinstall.nim | 183 | ||||
-rw-r--r-- | src/feature/syncsource.nim | 7 |
3 files changed, 116 insertions, 110 deletions
diff --git a/src/feature/syncinfo.nim b/src/feature/syncinfo.nim index 83f900b..39d682a 100644 --- a/src/feature/syncinfo.nim +++ b/src/feature/syncinfo.nim @@ -1,5 +1,5 @@ import - future, options, posix, sequtils, strutils, times, + future, options, posix, sequtils, strutils, tables, times, "../args", "../aur", "../common", "../config", "../format", "../package", "../pacman", "../utils", "../wrapper/alpm" @@ -57,16 +57,16 @@ proc formatDate(date: int64): Option[string] = if res > 0: some(buffer.toString(none(int))) else: none(string) proc handleTarget(config: Config, padding: int, args: seq[Argument], - target: FullPackageTarget[PackageInfo]): int = + target: FullPackageTarget, pkgInfoOption: Option[PackageInfo]): int = if target.foundInfos.len > 0: - if isAurTargetFull[PackageInfo](target, config.aurRepo): - let pkgInfo = target.pkgInfo.unsafeGet + if isAurTargetFull(target, config.aurRepo): + let pkgInfo = pkgInfoOption.get printPackageInfo(padding, config.color, (trp"Repository", @[config.aurRepo], false), - (trp"Name", @[pkgInfo.name], false), - (trp"Version", @[pkgInfo.version], false), - (trp"Description", toSeq(pkgInfo.description.items), false), + (trp"Name", @[pkgInfo.rpc.name], false), + (trp"Version", @[pkgInfo.rpc.version], false), + (trp"Description", toSeq(pkgInfo.rpc.description.items), false), (trp"Architecture", pkgInfo.archs, false), (trp"URL", toSeq(pkgInfo.url.items), false), (trp"Licenses", pkgInfo.licenses, false), @@ -76,11 +76,14 @@ proc handleTarget(config: Config, padding: int, args: seq[Argument], formatDeps(trp"Optional Deps", config, pkgInfo.optional), formatDeps(trp"Conflicts With", config, pkgInfo.conflicts), formatDeps(trp"Replaces", config, pkgInfo.replaces), - (tr"Maintainer", toSeq(pkgInfo.maintainer.items()), false), - (tr"First Submitted", toSeq(pkgInfo.firstSubmitted.map(formatDate).flatten.items()), false), - (tr"Last Modified", toSeq(pkgInfo.lastModified.map(formatDate).flatten.items()), false), - (tr"Out Of Date", toSeq(pkgInfo.outOfDate.map(formatDate).flatten.items()), false), - (tr"Rating", @[formatPkgRating(pkgInfo.votes, pkgInfo.popularity)], false)) + (tr"Maintainer", toSeq(pkgInfo.rpc.maintainer.items()), false), + (tr"First Submitted", toSeq(pkgInfo.rpc.firstSubmitted + .map(formatDate).flatten.items()), false), + (tr"Last Modified", toSeq(pkgInfo.rpc.lastModified + .map(formatDate).flatten.items()), false), + (tr"Out Of Date", toSeq(pkgInfo.rpc.outOfDate + .map(formatDate).flatten.items()), false), + (tr"Rating", @[formatPkgRating(pkgInfo.rpc.votes, pkgInfo.rpc.popularity)], false)) 0 elif target.reference.constraint.isSome: @@ -112,10 +115,10 @@ proc handleSyncInfo*(args: seq[Argument], config: Config): int = config.aurRepo, config.common.arch, config.common.downloadTimeout) for e in aerrors: printError(config.color, e) - let fullTargets = mapAurTargets[PackageInfo](syncTargets, pkgInfos, config.aurRepo) + let fullTargets = mapAurTargets(syncTargets, pkgInfos.map(p => p.rpc), config.aurRepo) let code = min(aerrors.len, 1) - if fullTargets.filter(t => isAurTargetFull[PackageInfo](t, config.aurRepo) or + if fullTargets.filter(t => isAurTargetFull(t, config.aurRepo) or t.repo == some(config.aurRepo) or t.reference.constraint.isSome).len == 0: if code == 0: pacmanExec(false, config.color, callArgs) @@ -125,6 +128,9 @@ proc handleSyncInfo*(args: seq[Argument], config: Config): int = else: let finalArgs = callArgs.filter(arg => not arg.isTarget) let padding = pacmanInfoStrings.map(s => s.trp).computeMaxLength + let pkgInfosTable = pkgInfos.map(i => (i.rpc.toPackageReference, i)).toTable - let codes = code & lc[handleTarget(config, padding, finalArgs, x) | (x <- fullTargets), int] + let codes = code & lc[handleTarget(config, padding, finalArgs, x, + x.rpcInfo.map(i => pkgInfosTable.opt(i.toPackageReference)).flatten) | + (x <- fullTargets), int] codes.filter(c => c != 0).optFirst.get(0) diff --git a/src/feature/syncinstall.nim b/src/feature/syncinstall.nim index 903dba1..19fd3ce 100644 --- a/src/feature/syncinstall.nim +++ b/src/feature/syncinstall.nim @@ -66,7 +66,7 @@ proc isVcs(name: string): bool = proc orderInstallation(ordered: seq[seq[seq[PackageInfo]]], grouped: seq[seq[PackageInfo]], satisfied: Table[PackageReference, SatisfyResult]): seq[seq[seq[PackageInfo]]] = - let orderedNamesSet = lc[c.name | (a <- ordered, b <- a, c <- b), string].toSet + let orderedNamesSet = lc[c.rpc.name | (a <- ordered, b <- a, c <- b), string].toSet proc hasBuildDependency(pkgInfos: seq[PackageInfo]): bool = for pkgInfo in pkgInfos: @@ -74,7 +74,7 @@ proc orderInstallation(ordered: seq[seq[seq[PackageInfo]]], grouped: seq[seq[Pac for satres in satisfied.opt(reference): if satres.buildPkgInfo.isSome and not (satres.buildPkgInfo.unsafeGet in pkgInfos) and - not (satres.buildPkgInfo.unsafeGet.name in orderedNamesSet): + not (satres.buildPkgInfo.unsafeGet.rpc.name in orderedNamesSet): return true return false @@ -94,7 +94,7 @@ proc orderInstallation(ordered: seq[seq[seq[PackageInfo]]], grouped: seq[seq[Pac proc orderInstallation(pkgInfos: seq[PackageInfo], satisfied: Table[PackageReference, SatisfyResult]): seq[seq[seq[PackageInfo]]] = - let grouped = pkgInfos.groupBy(i => i.base).map(p => p.values) + let grouped = pkgInfos.groupBy(i => i.rpc.base).map(p => p.values) orderInstallation(@[], grouped, satisfied) .map(x => x.filter(s => s.len > 0)) @@ -120,7 +120,7 @@ proc findDependencies(config: Config, handle: ptr AlpmHandle, dbs: seq[ptr AlpmD if res.buildPkgInfo.isSome: let pkgInfo = res.buildPkgInfo.unsafeGet if satref == reference or reference - .isProvidedBy(pkgInfo.toPackageReference, nodepsCount == 0): + .isProvidedBy(pkgInfo.rpc.toPackageReference, nodepsCount == 0): return some(pkgInfo) for provides in pkgInfo.provides: if reference.isProvidedBy(provides, nodepsCount == 0) and @@ -130,7 +130,7 @@ proc findDependencies(config: Config, handle: ptr AlpmHandle, dbs: seq[ptr AlpmD proc findInAdditional(reference: PackageReference): Option[PackageInfo] = for pkgInfo in additionalPkgInfos: - if reference.isProvidedBy(pkgInfo.toPackageReference, nodepsCount == 0): + if reference.isProvidedBy(pkgInfo.rpc.toPackageReference, nodepsCount == 0): return some(pkgInfo) for provides in pkgInfo.provides: if reference.isProvidedBy(provides, nodepsCount == 0) and @@ -182,11 +182,11 @@ proc findDependencies(config: Config, handle: ptr AlpmHandle, dbs: seq[ptr AlpmD else: let pkgInfo = findInSatisfied(reference) if pkgInfo.isSome: - some((false, pkgInfo.unsafeGet.name, pkgInfo)) + some((false, pkgInfo.unsafeGet.rpc.name, pkgInfo)) else: let pkgInfo = findInAdditional(reference) if pkgInfo.isSome: - some((false, pkgInfo.unsafeGet.name, pkgInfo)) + some((false, pkgInfo.unsafeGet.rpc.name, pkgInfo)) else: let syncName = findInDatabases(reference, false, true) if syncName.isSome: @@ -221,8 +221,8 @@ proc findDependencies(config: Config, handle: ptr AlpmHandle, dbs: seq[ptr AlpmD for e in cerrors: printError(config.color, e) (pkgInfos, additionalPkgInfos, paths)) - let acceptedPkgInfos = pkgInfos.filter(i => not config.ignored(i.name, i.groups)) - let aurTable = acceptedPkgInfos.map(i => (i.name, i)).toTable + let acceptedPkgInfos = pkgInfos.filter(i => not config.ignored(i.rpc.name, i.groups)) + let aurTable = acceptedPkgInfos.map(i => (i.rpc.name, i)).toTable let aurResult = aurCheck.map(proc (reference: PackageReference): ReferenceResult = if aurTable.hasKey(reference.name): (reference, some((false, reference.name, some(aurTable[reference.name])))) @@ -259,8 +259,8 @@ proc findDependencies(config: Config, handle: ptr AlpmHandle, dbs: seq[ptr AlpmDatabase], pkgInfos: seq[PackageInfo], additionalPkgInfos: seq[PackageInfo], nodepsCount: int, assumeInstalled: seq[PackageReference], printMode: bool, noaur: bool): (Table[PackageReference, SatisfyResult], seq[PackageReference], seq[string]) = - let satisfied = pkgInfos.map(p => ((p.name, none(string), none(VersionConstraint)), - (false, p.name, some(p)))).toTable + let satisfied = pkgInfos.map(p => ((p.rpc.name, none(string), none(VersionConstraint)), + (false, p.rpc.name, some(p)))).toTable let unsatisfied = lc[x | (i <- pkgInfos, x <- i.allDepends), PackageReference].deduplicate findDependencies(config, handle, dbs, satisfied, unsatisfied, @[], additionalPkgInfos, @[], nodepsCount, assumeInstalled, printMode, noaur) @@ -279,7 +279,7 @@ proc printUnsatisfied(config: Config, if reference in unsatisfied: printError(config.color, trp("unable to satisfy dependency '%s' required by %s\n") % - [$reference, pkgInfo.name]) + [$reference, pkgInfo.rpc.name]) template dropPrivilegesAndChdir(path: Option[string], body: untyped): int = if dropPrivileges(): @@ -385,9 +385,9 @@ proc editLoop(config: Config, repo: string, base: string, repoPath: string, proc buildLoop(config: Config, pkgInfos: seq[PackageInfo], skipDeps: bool, noconfirm: bool, noextract: bool): (Option[BuildResult], int, bool) = - let base = pkgInfos[0].base + let base = pkgInfos[0].rpc.base let repoPath = repoPath(config.tmpRootInitial, base) - let gitSubdir = pkgInfos[0].gitSubdir + let gitSubdir = pkgInfos[0].rpc.gitSubdir let buildPath = buildPath(repoPath, gitSubdir) let confFileEnv = getEnv("MAKEPKG_CONF") @@ -460,9 +460,9 @@ proc buildLoop(config: Config, pkgInfos: seq[PackageInfo], skipDeps: bool, type ResultInfo = tuple[name: string, baseIndex: int, pkgInfo: Option[PackageInfo]] - let resultPkgInfosTable = resultPkgInfos.map(i => (i.name, i)).toTable + let resultPkgInfosTable = resultPkgInfos.map(i => (i.rpc.name, i)).toTable let resultByNames: seq[ResultInfo] = pkgInfos - .map(i => (i.name, i.baseIndex, resultPkgInfosTable.opt(i.name))) + .map(i => (i.rpc.name, i.baseIndex, resultPkgInfosTable.opt(i.rpc.name))) let resultByIndices: seq[ResultInfo] = if pkgInfos[0].baseCount == resultPkgInfos.len: resultByNames.map(res => (block: @@ -482,21 +482,21 @@ proc buildLoop(config: Config, pkgInfos: seq[PackageInfo], skipDeps: bool, else: let targetPkgInfos: seq[ReplacePkgInfo] = resultByIndices .map(i => (some(i.name), i.pkgInfo.get)) - let filterNames = targetPkgInfos.map(r => r.pkgInfo.name).toSet + let filterNames = targetPkgInfos.map(r => r.pkgInfo.rpc.name).toSet let additionalPkgInfos: seq[ReplacePkgInfo] = resultPkgInfos - .filter(i => not (i.name in filterNames)) + .filter(i => not (i.rpc.name in filterNames)) .map(i => (none(string), i)) (some(($confExt, targetPkgInfos & additionalPkgInfos)), 0, false) proc buildFromSources(config: Config, commonArgs: seq[Argument], pkgInfos: seq[PackageInfo], skipDeps: bool, noconfirm: bool): (Option[BuildResult], int) = - let base = pkgInfos[0].base + let base = pkgInfos[0].rpc.base let repoPath = repoPath(config.tmpRootInitial, base) - let gitSubdir = pkgInfos[0].gitSubdir + let gitSubdir = pkgInfos[0].rpc.gitSubdir proc loop(noextract: bool, showEditLoop: bool): (Option[BuildResult], int) = let res = if showEditLoop and not noconfirm: - editLoop(config, pkgInfos[0].repo, base, repoPath, gitSubdir, false, noconfirm) + editLoop(config, pkgInfos[0].rpc.repo, base, repoPath, gitSubdir, false, noconfirm) else: 'n' @@ -561,12 +561,12 @@ proc installGroupFromSources(config: Config, commonArgs: seq[Argument], proc formatArchiveFile(pkgInfo: PackageInfo, ext: string): string = let arch = if pkgInfo.archs.len > 0: config.common.arch else: "any" - config.tmpRootInitial & "/" & pkgInfo.name & "-" & pkgInfo.version & "-" & arch & ext + config.tmpRootInitial & "/" & pkgInfo.rpc.name & "-" & pkgInfo.rpc.version & "-" & arch & ext let allFiles = lc[(r.name, formatArchiveFile(r.pkgInfo, br.ext)) | (br <- buildResults, r <- br.replacePkgInfos), tuple[name: Option[string], file: string]] let filesTable = allFiles.filter(f => f.name.isSome).map(f => (f.name.unsafeGet, f.file)).toTable - let install = lc[(i.name, x) | (g <- basePackages, i <- g, x <- filesTable.opt(i.name)), + let install = lc[(i.rpc.name, x) | (g <- basePackages, i <- g, x <- filesTable.opt(i.rpc.name)), tuple[name: string, file: string]] proc handleTmpRoot(clear: bool) = @@ -641,9 +641,9 @@ proc installGroupFromSources(config: Config, commonArgs: seq[Argument], else: let cachePath = config.userCacheInitial.cache(CacheKind.repositories) for pkgInfos in basePackages: - let repo = pkgInfos[0].repo + let repo = pkgInfos[0].rpc.repo if repo == config.aurRepo: - let base = pkgInfos[0].base + let base = pkgInfos[0].rpc.base let fullName = bareFullName(BareKind.pkg, base) let bareRepoPath = repoPath(cachePath, fullName) let tag = createViewTag(repo, base) @@ -662,16 +662,16 @@ proc installGroupFromSources(config: Config, commonArgs: seq[Argument], run(gitCmd, "-C", bareRepoPath, "tag", tag) handleTmpRoot(true) - let installedAs = lc[(r.name.unsafeGet, r.pkgInfo.name) | (br <- buildResults, + let installedAs = lc[(r.name.unsafeGet, r.pkgInfo.rpc.name) | (br <- buildResults, r <- br.replacePkgInfos, r.name.isSome), (string, string)] (installedAs, 0) proc deduplicatePkgInfos(pkgInfos: seq[PackageInfo], config: Config, printWarning: bool): seq[PackageInfo] = pkgInfos.foldl(block: - if a.map(t => t.name).contains(b.name): + if a.map(i => i.rpc.name).contains(b.rpc.name): if printWarning: - printWarning(config.color, trp("skipping target: %s\n") % [b.name]) + printWarning(config.color, trp("skipping target: %s\n") % [b.rpc.name]) a else: a & b, @@ -694,9 +694,9 @@ proc resolveDependencies(config: Config, pkgInfos: seq[PackageInfo], (false, satisfied, newSeq[string](), newSeq[seq[seq[PackageInfo]]](), newSeq[string]()) else: - let buildAndAurNamesSet = pkgInfos.map(i => i.name).toSet + let buildAndAurNamesSet = pkgInfos.map(i => i.rpc.name).toSet let fullPkgInfos = (pkgInfos & lc[i | (s <- satisfied.values, - i <- s.buildPkgInfo, not (i.name in buildAndAurNamesSet)), PackageInfo]) + i <- s.buildPkgInfo, not (i.rpc.name in buildAndAurNamesSet)), PackageInfo]) .deduplicatePkgInfos(config, false) let additionalPacmanTargets = lc[x.name | (x <- satisfied.values, @@ -711,7 +711,7 @@ proc confirmViewAndImportKeys(config: Config, basePackages: seq[seq[seq[PackageI let installedVersions = installed.map(i => (i.name, i.version)).toTable printPackages(config.color, config.common.verbosePkgLists, - lc[(i.name, i.repo, installedVersions.opt(i.name), i.version) | + lc[(i.rpc.name, i.rpc.repo, installedVersions.opt(i.rpc.name), i.rpc.version) | (g <- basePackages, b <- g, i <- b), PackageInstallFormat] .sorted((a, b) => cmp(a.name, b.name))) let input = printColonUserChoice(config.color, @@ -723,8 +723,8 @@ proc confirmViewAndImportKeys(config: Config, basePackages: seq[seq[seq[PackageI proc checkNext(index: int, skipEdit: bool, skipKeys: bool): int = if index < flatBasePackages.len: let pkgInfos = flatBasePackages[index] - let repo = pkgInfos[0].repo - let base = pkgInfos[0].base + let repo = pkgInfos[0].rpc.repo + let base = pkgInfos[0].rpc.base let repoPath = repoPath(config.tmpRootInitial, base) let aur = repo == config.aurRepo @@ -735,19 +735,20 @@ proc confirmViewAndImportKeys(config: Config, basePackages: seq[seq[seq[PackageI for e in error: printError(config.color, e) if comments.len > 0: let commentsReversed = toSeq(comments.reversed) - printComments(config.color, pkgInfos[0].maintainer, commentsReversed) + printComments(config.color, pkgInfos[0].rpc.maintainer, commentsReversed) let editRes = if skipEdit or noconfirm: 'n' else: (block: let defaultYes = aur and not config.viewNoDefault - editLoop(config, repo, base, repoPath, pkgInfos[0].gitSubdir, defaultYes, noconfirm)) + editLoop(config, repo, base, repoPath, pkgInfos[0].rpc.gitSubdir, + defaultYes, noconfirm)) if editRes == 'a': 1 else: let resultPkgInfos = reloadPkgInfos(config, - repoPath & "/" & pkgInfos[0].gitSubdir.get("."), pkgInfos) + repoPath & "/" & pkgInfos[0].rpc.gitSubdir.get("."), pkgInfos) let pgpKeys = lc[x | (p <- resultPkgInfos, x <- p.pgpKeys), string].deduplicate proc keysLoop(index: int, skipKeys: bool): char = @@ -837,7 +838,7 @@ proc printAllWarnings(config: Config, installed: seq[Installed], rpcInfos: seq[R pkgInfos: seq[PackageInfo], acceptedPkgInfos: seq[PackageInfo], upToDateNeeded: seq[Installed], buildUpToDateNeeded: seq[(string, string)], localIsNewerSeq: seq[LocalIsNewer], targetNamesSet: HashSet[string], upgradeCount: int, noaur: bool) = - let acceptedSet = acceptedPkgInfos.map(i => i.name).toSet + let acceptedSet = acceptedPkgInfos.map(i => i.rpc.name).toSet if upgradeCount > 0 and not noaur and config.printAurNotFound: let rpcInfoTable = rpcInfos.map(i => (i.name, i)).toTable @@ -863,42 +864,42 @@ proc printAllWarnings(config: Config, installed: seq[Installed], rpcInfos: seq[R for pkgInfo in pkgInfos: let installedTable = installed.map(i => (i.name, i)).toTable - if not (pkgInfo.name in acceptedSet): - if not (pkgInfo.name in targetNamesSet) and upgradeCount > 0 and - installedTable.hasKey(pkgInfo.name): - let installedVersion = installedTable[pkgInfo.name].version - let newVersion = pkgInfo.version + if not (pkgInfo.rpc.name in acceptedSet): + if not (pkgInfo.rpc.name in targetNamesSet) and upgradeCount > 0 and + installedTable.hasKey(pkgInfo.rpc.name): + let installedVersion = installedTable[pkgInfo.rpc.name].version + let newVersion = pkgInfo.rpc.version if vercmp(newVersion, installedVersion) < 0: printWarning(config.color, tra("%s: ignoring package downgrade (%s => %s)\n") % - [pkgInfo.name, installedVersion, newVersion]) + [pkgInfo.rpc.name, installedVersion, newVersion]) else: printWarning(config.color, tra("%s: ignoring package upgrade (%s => %s)\n") % - [pkgInfo.name, installedVersion, newVersion]) + [pkgInfo.rpc.name, installedVersion, newVersion]) else: - printWarning(config.color, trp("skipping target: %s\n") % [pkgInfo.name]) - elif pkgInfo.repo == config.aurRepo: - if pkgInfo.maintainer.isNone: - printWarning(config.color, tr"$# is orphaned" % [pkgInfo.name]) - if installedTable.hasKey(pkgInfo.name): - let installedVersion = installedTable[pkgInfo.name].version - let newVersion = pkgInfo.version - if vercmp(newVersion, installedVersion) < 0 and not pkgInfo.name.isVcs: + printWarning(config.color, trp("skipping target: %s\n") % [pkgInfo.rpc.name]) + elif pkgInfo.rpc.repo == config.aurRepo: + if pkgInfo.rpc.maintainer.isNone: + printWarning(config.color, tr"$# is orphaned" % [pkgInfo.rpc.name]) + if installedTable.hasKey(pkgInfo.rpc.name): + let installedVersion = installedTable[pkgInfo.rpc.name].version + let newVersion = pkgInfo.rpc.version + if vercmp(newVersion, installedVersion) < 0 and not pkgInfo.rpc.name.isVcs: printWarning(config.color, tra("%s: downgrading from version %s to version %s\n") % - [pkgInfo.name, installedVersion, newVersion]) + [pkgInfo.rpc.name, installedVersion, newVersion]) proc filterIgnoresAndConflicts(config: Config, pkgInfos: seq[PackageInfo], targetNamesSet: HashSet[string], installed: Table[string, Installed], printMode: bool, noconfirm: bool): (seq[PackageInfo], seq[PackageInfo]) = let acceptedPkgInfos = pkgInfos.filter(pkgInfo => (block: - let instGroups = lc[x | (i <- installed.opt(pkgInfo.name), + let instGroups = lc[x | (i <- installed.opt(pkgInfo.rpc.name), x <- i.groups), string] - if config.ignored(pkgInfo.name, (instGroups & pkgInfo.groups).deduplicate): - if pkgInfo.name in targetNamesSet: + if config.ignored(pkgInfo.rpc.name, (instGroups & pkgInfo.groups).deduplicate): + if pkgInfo.rpc.name in targetNamesSet: if not printMode: let input = printColonUserChoice(config.color, - trp"%s is in IgnorePkg/IgnoreGroup. Install anyway?" % [pkgInfo.name], + trp"%s is in IgnorePkg/IgnoreGroup. Install anyway?" % [pkgInfo.rpc.name], ['y', 'n'], 'y', 'n', noconfirm, 'y') input != 'n' else: @@ -909,15 +910,15 @@ proc filterIgnoresAndConflicts(config: Config, pkgInfos: seq[PackageInfo], true)) let nonConflicingPkgInfos = acceptedPkgInfos.foldl(block: - let conflictsWith = lc[p | (p <- a, p.name != b.name and - (lc[0 | (c <- b.conflicts, c.isProvidedBy(p.toPackageReference, true)), int].len > 0 or - lc[0 | (c <- p.conflicts, c.isProvidedBy(b.toPackageReference, true)), int].len > 0)), + let conflictsWith = lc[p | (p <- a, p.rpc.name != b.rpc.name and + (lc[0 | (c <- b.conflicts, c.isProvidedBy(p.rpc.toPackageReference, true)), int].len > 0 or + lc[0 | (c <- p.conflicts, c.isProvidedBy(b.rpc.toPackageReference, true)), int].len > 0)), PackageInfo] if not printMode and conflictsWith.len > 0: for conflict in conflictsWith: printWarning(config.color, tra("removing '%s' from target list because it conflicts with '%s'\n") % - [b.name, conflict.name]) + [b.rpc.name, conflict.rpc.name]) a else: a & b, @@ -936,11 +937,11 @@ proc checkNeeded(installed: Table[string, Installed], (true, 0) proc obtainAurPackageInfos(config: Config, rpcInfos: seq[RpcPackageInfo], - rpcAurTargets: seq[FullPackageTarget[RpcPackageInfo]], installed: Table[string, Installed], + rpcAurTargets: seq[FullPackageTarget], installed: Table[string, Installed], printMode: bool, needed: bool, upgradeCount: int): (seq[PackageInfo], seq[PackageInfo], seq[string], seq[Installed], seq[LocalIsNewer], seq[string]) = let targetRpcInfoPairs: seq[tuple[rpcInfo: RpcPackageInfo, upgradeable: bool]] = - rpcAurTargets.map(t => t.pkgInfo.get).map(i => (i, installed + rpcAurTargets.map(t => t.rpcInfo.get).map(i => (i, installed .checkNeeded(i.name, i.version, true).needed)) let upToDateNeeded: seq[Installed] = if needed: @@ -997,12 +998,12 @@ proc obtainAurPackageInfos(config: Config, rpcInfos: seq[RpcPackageInfo], (pkgInfos, additionalPkgInfos, paths, upToDateNeeded, localIsNewerSeq, errors) -proc obtainPacmanBuildTargets(config: Config, pacmanTargets: seq[FullPackageTarget[PackageInfo]], +proc obtainPacmanBuildTargets(config: Config, pacmanTargets: seq[FullPackageTarget], installedTable: Table[string, Installed], printMode: bool, needed: bool, build: bool): (bool, seq[PackageInfo], seq[(string, string)], seq[string], seq[string]) = let (neededPacmanBuildTargets, buildUpToDateNeeded) = if not printMode and build and needed: (block: - let neededPairs: seq[tuple[target: FullPackageTarget[PackageInfo], + let neededPairs: seq[tuple[target: FullPackageTarget, skipVersion: Option[string]]] = pacmanTargets.map(target => (block: let version = target.foundInfos[0].pkg.get.version if installedTable.checkNeeded(target.reference.name, version, true).needed: @@ -1027,7 +1028,7 @@ proc obtainPacmanBuildTargets(config: Config, pacmanTargets: seq[FullPackageTarg let (buildPkgInfos, buildPaths, obtainErrorMessages) = if checkPacmanBuildPkgInfos: (block: echo(tr"checking official repositories...") let (update, terminate) = createCloneProgress(config, pacmanTargets.len, false, printMode) - let res = obtainBuildPkgInfos[PackageInfo](config, pacmanTargets, update, true) + let res = obtainBuildPkgInfos(config, pacmanTargets, update, true) terminate() res) else: @@ -1035,8 +1036,7 @@ proc obtainPacmanBuildTargets(config: Config, pacmanTargets: seq[FullPackageTarg (checkPacmanBuildPkgInfos, buildPkgInfos, buildUpToDateNeeded, buildPaths, obtainErrorMessages) -proc obtainInstalledWithAur(config: Config, - rpcAurTargets: seq[FullPackageTarget[RpcPackageInfo]]): (seq[Installed], seq[string]) = +proc obtainInstalledWithAur(config: Config): (seq[Installed], seq[string]) = withAlpmConfig(config, true, handle, dbs, errors): for e in errors: printError(config.color, e) @@ -1053,13 +1053,13 @@ proc obtainInstalledWithAur(config: Config, (installed, checkAurUpgradeNames) proc resolveBuildTargets(config: Config, syncTargets: seq[SyncPackageTarget], - rpcFullTargets: seq[FullPackageTarget[RpcPackageInfo]], printHeader: bool, + fullTargets: seq[FullPackageTarget], printHeader: bool, printMode: bool, upgradeCount: int, noconfirm: bool, needed: bool, noaur: bool, build: bool): (int, seq[Installed], HashSet[string], seq[PackageInfo], seq[PackageInfo], seq[string]) = template errorResult: untyped = (1, newSeq[Installed](), initSet[string](), newSeq[PackageInfo](), newSeq[PackageInfo](), newSeq[string]()) - let (installed, checkAurUpgradeNames) = obtainInstalledWithAur(config, rpcFullTargets) + let (installed, checkAurUpgradeNames) = obtainInstalledWithAur(config) let checkAur = not noaur and checkAurUpgradeNames.len > 0 and upgradeCount > 0 if not printMode and (checkAur or build) and printHeader: @@ -1076,9 +1076,9 @@ proc resolveBuildTargets(config: Config, syncTargets: seq[SyncPackageTarget], @[] let installedTable = installed.map(i => (i.name, i)).toTable - let rpcAurTargets = rpcFullTargets.filter(t => t.isAurTargetFull(config.aurRepo)) + let rpcAurTargets = fullTargets.filter(t => t.isAurTargetFull(config.aurRepo)) - let targetRpcInfos = lc[x | (t <- rpcAurTargets, x <- t.pkgInfo), RpcPackageInfo] + let targetRpcInfos = lc[x | (t <- rpcAurTargets, x <- t.rpcInfo), RpcPackageInfo] let targetRpcInfoNames = targetRpcInfos.map(i => i.name).toSet let rpcInfos = targetRpcInfos & upgradeRpcInfos.filter(i => not (i.name in targetRpcInfoNames)) @@ -1090,7 +1090,7 @@ proc resolveBuildTargets(config: Config, syncTargets: seq[SyncPackageTarget], let upToDateNeededTable: Table[string, PackageReference] = upToDateNeeded.map(i => (i.name, (i.name, none(string), some((ConstraintOperation.eq, i.version, false))))).toTable let notFoundTargets = filterNotFoundSyncTargets(syncTargets, - aurPkgInfos, upToDateNeededTable, config.aurRepo) + aurPkgInfos.map(p => p.rpc), upToDateNeededTable, config.aurRepo) if notFoundTargets.len > 0: clearPaths(aurPaths) @@ -1099,7 +1099,8 @@ proc resolveBuildTargets(config: Config, syncTargets: seq[SyncPackageTarget], else: let fullTargets = mapAurTargets(syncTargets .filter(t => not (upToDateNeededTable.opt(t.reference.name) - .map(r => t.reference.isProvidedBy(r, true)).get(false))), aurPkgInfos, config.aurRepo) + .map(r => t.reference.isProvidedBy(r, true)).get(false))), + aurPkgInfos.map(p => p.rpc), config.aurRepo) let pacmanTargets = fullTargets.filter(t => not isAurTargetFull(t, config.aurRepo)) let aurTargets = fullTargets.filter(t => isAurTargetFull(t, config.aurRepo)) @@ -1134,9 +1135,9 @@ proc assumeInstalled(args: seq[Argument]): seq[PackageReference] = r.constraint.unsafeGet.operation == ConstraintOperation.eq) proc handleInstall(args: seq[Argument], config: Config, syncTargets: seq[SyncPackageTarget], - rpcFullTargets: seq[FullPackageTarget[RpcPackageInfo]], upgradeCount: int, nodepsCount: int, + fullTargets: seq[FullPackageTarget], upgradeCount: int, nodepsCount: int, wrapUpgrade: bool, noconfirm: bool, needed: bool, build: bool, noaur: bool): int = - let pacmanTargets = rpcFullTargets.filter(t => not isAurTargetFull(t, config.aurRepo)) + let pacmanTargets = fullTargets.filter(t => not isAurTargetFull(t, config.aurRepo)) let workDirectPacmanTargets = if build: @[] else: pacmanTargets.map(`$`) @@ -1152,7 +1153,7 @@ proc handleInstall(args: seq[Argument], config: Config, syncTargets: seq[SyncPac directCode else: let (resolveTargetsCode, installed, targetNamesSet, pkgInfos, additionalPkgInfos, - initialPaths) = resolveBuildTargets(config, syncTargets, rpcFullTargets, + initialPaths) = resolveBuildTargets(config, syncTargets, fullTargets, directSome or wrapUpgrade, false, upgradeCount, noconfirm, needed, noaur, build) if resolveTargetsCode != 0: @@ -1264,20 +1265,20 @@ proc handleInstall(args: seq[Argument], config: Config, syncTargets: seq[SyncPac else: code else: - let aurTargets = rpcFullTargets.filter(t => isAurTargetFull(t, config.aurRepo)) + let aurTargets = fullTargets.filter(t => isAurTargetFull(t, config.aurRepo)) if (not noaur and (aurTargets.len > 0 or upgradeCount > 0)) or build: echo(trp(" there is nothing to do\n")) clearPaths(paths) 0 proc handlePrint(args: seq[Argument], config: Config, syncTargets: seq[SyncPackageTarget], - rpcFullTargets: seq[FullPackageTarget[RpcPackageInfo]], upgradeCount: int, nodepsCount: int, + fullTargets: seq[FullPackageTarget], upgradeCount: int, nodepsCount: int, needed: bool, build: bool, noaur: bool, printFormat: string): int = - let pacmanTargets = rpcFullTargets.filter(t => not isAurTargetFull(t, config.aurRepo)) + let pacmanTargets = fullTargets.filter(t => not isAurTargetFull(t, config.aurRepo)) let directPacmanTargets = pacmanTargets.map(`$`) let (resolveTargetsCode, _, _, pkgInfos, additionalPkgInfos, _) = resolveBuildTargets(config, - syncTargets, rpcFullTargets, false, true, upgradeCount, true, needed, noaur, build) + syncTargets, fullTargets, false, true, upgradeCount, true, needed, noaur, build) if resolveTargetsCode != 0: resolveTargetsCode @@ -1311,11 +1312,11 @@ proc handlePrint(args: seq[Argument], config: Config, syncTargets: seq[SyncPacka if code == 0: proc printWithFormat(pkgInfo: PackageInfo) = echo(printFormat - .replace("%n", pkgInfo.name) - .replace("%v", pkgInfo.version) + .replace("%n", pkgInfo.rpc.name) + .replace("%v", pkgInfo.rpc.version) .replace("%r", config.aurRepo) .replace("%s", "0") - .replace("%l", pkgInfo.gitUrl)) + .replace("%l", pkgInfo.rpc.gitUrl)) for installGroup in basePackages: for pkgInfos in installGroup: @@ -1326,7 +1327,7 @@ proc handlePrint(args: seq[Argument], config: Config, syncTargets: seq[SyncPacka code proc resolveAurTargets(config: Config, targets: seq[PackageTarget], printMode: bool, noaur: bool, - build: bool): (int, seq[SyncPackageTarget], seq[FullPackageTarget[RpcPackageInfo]]) = + build: bool): (int, seq[SyncPackageTarget], seq[FullPackageTarget]) = let (syncTargets, checkAurTargetNames) = withAlpmConfig(config, true, handle, dbs, errors): for e in errors: printError(config.color, e) findSyncTargets(handle, dbs, targets, config.aurRepo, not build, not build) @@ -1348,10 +1349,10 @@ proc resolveAurTargets(config: Config, targets: seq[PackageTarget], printMode: b if rpcNotFoundTargets.len > 0: printSyncNotFound(config, rpcNotFoundTargets) - (1, syncTargets, newSeq[FullPackageTarget[RpcPackageInfo]]()) + (1, syncTargets, newSeq[FullPackageTarget]()) else: - let rpcFullTargets = mapAurTargets(syncTargets, rpcInfos, config.aurRepo) - (0, syncTargets, rpcFullTargets) + let fullTargets = mapAurTargets(syncTargets, rpcInfos, config.aurRepo) + (0, syncTargets, fullTargets) proc handleSyncInstall*(args: seq[Argument], config: Config): int = let printModeArg = args.check(%%%"print") @@ -1380,7 +1381,7 @@ proc handleSyncInstall*(args: seq[Argument], config: Config): int = let noconfirm = args.noconfirm withAur(): - let (code, syncTargets, rpcFullTargets) = resolveAurTargets(config, targets, + let (code, syncTargets, fullTargets) = resolveAurTargets(config, targets, printFormat.isSome, noaur, build) let pacmanArgs = callArgs.filterExtensions(true, true, @@ -1389,8 +1390,8 @@ proc handleSyncInstall*(args: seq[Argument], config: Config): int = if code != 0: code elif printFormat.isSome: - handlePrint(pacmanArgs, config, syncTargets, rpcFullTargets, + handlePrint(pacmanArgs, config, syncTargets, fullTargets, upgradeCount, nodepsCount, needed, build, noaur, printFormat.unsafeGet) else: - handleInstall(pacmanArgs, config, syncTargets, rpcFullTargets, + handleInstall(pacmanArgs, config, syncTargets, fullTargets, upgradeCount, nodepsCount, wrapUpgrade, noconfirm, needed, build, noaur) diff --git a/src/feature/syncsource.nim b/src/feature/syncsource.nim index b25d25d..20ff56f 100644 --- a/src/feature/syncsource.nim +++ b/src/feature/syncsource.nim @@ -109,12 +109,11 @@ proc copyFiles(config: Config, quiet: bool, results: seq[CloneResult]): List[str copyNext(0, nil) -proc cloneAndCopy(config: Config, quiet: bool, - fullTargets: seq[FullPackageTarget[RpcPackageInfo]]): int = +proc cloneAndCopy(config: Config, quiet: bool, fullTargets: seq[FullPackageTarget]): int = let baseTargets = fullTargets.foldl(block: let bases = a.map(x => x.base) if b.isAurTargetFull(config.aurRepo): - let rpcInfo = b.pkgInfo.get + let rpcInfo = b.rpcInfo.get if rpcInfo.base in bases: a else: @@ -179,5 +178,5 @@ proc handleSyncSource*(args: seq[Argument], config: Config): int = printSyncNotFound(config, notFoundTargets) 1 else: - let fullTargets = mapAurTargets[RpcPackageInfo](syncTargets, rpcInfos, config.aurRepo) + let fullTargets = mapAurTargets(syncTargets, rpcInfos, config.aurRepo) cloneAndCopy(config, quiet, fullTargets) |