diff options
author | kitsunyan | 2018-05-01 19:30:15 +0000 |
---|---|---|
committer | kitsunyan | 2018-05-01 19:30:15 +0000 |
commit | dc6cbc555c9c7a091e7ba4ff7ccb71ad41a3a3b1 (patch) | |
tree | 50d7c28f73250dd8de02e7aa09f1d1c88376df1f /src/feature | |
parent | 81c557e0c4f3676a189f45dbba22392451cfc3f3 (diff) |
Use bare repositories to build repo packages from the same source
Diffstat (limited to 'src/feature')
-rw-r--r-- | src/feature/syncinstall.nim | 19 | ||||
-rw-r--r-- | src/feature/syncsource.nim | 18 |
2 files changed, 25 insertions, 12 deletions
diff --git a/src/feature/syncinstall.nim b/src/feature/syncinstall.nim index ab01df1..61bd857 100644 --- a/src/feature/syncinstall.nim +++ b/src/feature/syncinstall.nim @@ -37,17 +37,20 @@ type proc groupsSeq(pkg: ptr AlpmPackage): seq[string] = toSeq(pkg.groups.items).map(s => $s) -proc createCloneProgress(config: Config, count: int, printMode: bool): +proc createCloneProgress(config: Config, count: int, flexible: bool, printMode: bool): (proc (update: int, terminate: int) {.closure.}, proc {.closure.}) = if count >= 1 and not printMode: let (update, terminate) = printProgressShare(config.progressBar, tr"cloning repositories") update(0, count) - proc cloneUpdate(progress: int, newCount: int) {.closure.} = - # newCount can be < count if some packages were not found - update(max(count - newCount + progress, 0), count) + if flexible: + proc cloneUpdate(progress: int, newCount: int) {.closure.} = + # newCount can be < count if some packages were not found + update(max(count - newCount + progress, 0), count) - (cloneUpdate, terminate) + (cloneUpdate, terminate) + else: + (update, terminate) else: (proc (a: int, b: int) {.closure.} = discard, proc {.closure.} = discard) @@ -185,7 +188,7 @@ proc findDependencies(config: Config, handle: ptr AlpmHandle, dbs: seq[ptr AlpmD let (aurSuccess, aurFail, newPaths, newAdditionalPkgInfos) = if not noaur and aurCheck.len > 0: (block: - let (update, terminate) = createCloneProgress(config, aurCheck.len, printMode) + let (update, terminate) = createCloneProgress(config, aurCheck.len, true, printMode) try: withAur(): let (pkgInfos, additionalPkgInfos, paths) = if printMode: (block: @@ -1028,7 +1031,7 @@ proc obtainAurPackageInfos(config: Config, rpcInfos: seq[RpcPackageInfo], let upgradeRpcInfos = upgradeStructs.filter(p => p.needed).map(p => p.rpcInfo) let fullRpcInfos = targetRpcInfos & upgradeRpcInfos - let (update, terminate) = createCloneProgress(config, fullRpcInfos.len, printMode) + let (update, terminate) = createCloneProgress(config, fullRpcInfos.len, true, printMode) let (pkgInfos, additionalPkgInfos, paths, errors) = if printMode: (block: let (pkgInfos, additionalPkgInfos, aerrors) = @@ -1077,7 +1080,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, printMode) + let (update, terminate) = createCloneProgress(config, pacmanTargets.len, false, printMode) let res = obtainBuildPkgInfos[PackageInfo](config, pacmanTargets, update, true) terminate() res) diff --git a/src/feature/syncsource.nim b/src/feature/syncsource.nim index fba7062..f7e2524 100644 --- a/src/feature/syncsource.nim +++ b/src/feature/syncsource.nim @@ -33,10 +33,14 @@ proc getFilesOrClear(base: string, repoPath: string, gitSubdir: Option[string]): (newSeq[string](), some(tr"$#: failed to clone git repository" % [base])) proc cloneRepositories(config: Config, targets: seq[BaseTarget], - update: (int, int) -> void): (List[CloneResult], List[string]) = + update: (int, int) -> void): (List[CloneResult], seq[string], seq[string]) = + let (barePaths, berrors) = cloneBareRepos(config, + targets.filter(t => t.gitRepo.isSome).map(t => t.gitRepo.unsafeGet), + proc (progress: int, count: int) = update(progress, count + targets.len), false) + proc cloneNext(index: int, results: List[CloneResult], messages: List[string]): (List[CloneResult], List[string]) = - update(index, targets.len) + update(barePaths.len + index, barePaths.len + targets.len) if index >= targets.len: (results.reversed, messages.reversed) @@ -76,7 +80,11 @@ proc cloneRepositories(config: Config, targets: seq[BaseTarget], let message = tr"$#: repository not found" % [target.base] cloneNext(index + 1, results, message ^& messages) - cloneNext(0, nil, nil) + if berrors.len > 0: + (nil, barePaths, berrors) + else: + let (results, cerrors) = cloneNext(0, nil, nil) + (results, barePaths, toSeq(cerrors.items)) proc copyFiles(config: Config, quiet: bool, results: seq[CloneResult]): List[string] = proc copyNext(index: int, messages: List[string]): List[string] = @@ -128,7 +136,7 @@ proc cloneAndCopy(config: Config, quiet: bool, else: printProgressShare(config.progressBar, tr"cloning repositories") - let (results, rerrors) = cloneRepositories(config, baseTargets, update) + let (results, barePaths, rerrors) = cloneRepositories(config, baseTargets, update) terminate() for e in rerrors: printError(config.color, e) @@ -137,6 +145,8 @@ proc cloneAndCopy(config: Config, quiet: bool, for result in results: removeDirQuiet(result.path) + for path in barePaths: + removeDirQuiet(path) discard rmdir(config.tmpRootCurrent) if rerrors != nil and cerrors != nil: |