aboutsummaryrefslogtreecommitdiff
path: root/src/feature
diff options
context:
space:
mode:
Diffstat (limited to 'src/feature')
-rw-r--r--src/feature/syncinstall.nim19
-rw-r--r--src/feature/syncsource.nim18
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: