From f227d1088f6a8aee3654804b5fd0110e15532c5b Mon Sep 17 00:00:00 2001 From: kitsunyan Date: Thu, 7 Jun 2018 02:35:28 +0300 Subject: Add support for "-Sc" to clean package repositories --- src/feature/syncclean.nim | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/feature/syncclean.nim (limited to 'src/feature/syncclean.nim') diff --git a/src/feature/syncclean.nim b/src/feature/syncclean.nim new file mode 100644 index 0000000..2e57908 --- /dev/null +++ b/src/feature/syncclean.nim @@ -0,0 +1,51 @@ +import + future, options, os, posix, sequtils, strutils, tables, + "../args", "../aur", "../common", "../config", "../format", "../lists", + "../package", "../pacman", "../utils", + "../wrapper/alpm" + +proc handleSyncClean*(args: seq[Argument], config: Config): int = + let code = pacmanRun(true, config.color, args) + if code != 0: + code + else: + let cleanCount = args.count(%%%"clean") + let noconfirm = args.noconfirm + + let reposCacheDir = config.userCacheCurrent.cache(CacheKind.repositories) + let homeDir = currentUser.home + let printReposCacheDir = if reposCacheDir.find(homeDir & "/") == 0: + '~' & reposCacheDir[homeDir.len .. ^1] + else: + reposCacheDir + echo() + echo(tr"Repositories directory: $#" % [printReposCacheDir]) + + if (cleanCount == 1 and + printColonUserChoice(config.color, tr"Do you want to remove unused repositories?", + ['y', 'n'], 'y', 'n', noconfirm, 'y') == 'y') or + (cleanCount >= 2 and + printColonUserChoice(config.color, tr"Do you want to remove ALL repositories?", + ['y', 'n'], 'n', 'n', noconfirm, 'n') == 'y'): + if cleanCount == 1: + echo(tr"removing unused package repositories...") + else: + echo(tr"removing all package repositories...") + + if existsDir(reposCacheDir): + withAlpmConfig(config, false, handle, dbs, errors): + for e in errors: printError(config.color, e) + + let local = handle.local + for file in walkDir(reposCacheDir): + if file.kind == pcDir: + let index = file.path.rfind('/') + let dirName = if index >= 0: file.path[index + 1 .. ^1] else: file.path + for name in bareFullNameDeconstruct(BareKind.pkg, dirName): + if cleanCount >= 2 or local[name] == nil: + removeDirQuiet(file.path) + + discard rmdir(reposCacheDir) + discard rmdir(config.userCacheCurrent) + + 0 -- cgit v1.2.3-70-g09d2