From af18984203b18e834540a72a8b38066fd004a74c Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Mon, 15 Jan 2018 14:51:43 +0100
Subject: [PATCH] Clean up old package versions in cache.

---
 .../r/install.cache.R                               | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/com.oracle.truffle.r.test.packages/r/install.cache.R b/com.oracle.truffle.r.test.packages/r/install.cache.R
index c9a4047965..9572fac209 100644
--- a/com.oracle.truffle.r.test.packages/r/install.cache.R
+++ b/com.oracle.truffle.r.test.packages/r/install.cache.R
@@ -102,6 +102,19 @@ pkg.cache.insert <- function(pkg.cache.env, pkg, lib) {
         # to produce a ZIP with relative paths, we need to change the working dir
         prev.wd <- getwd()
         setwd(lib)
+
+        # cleanup older package versions
+        tryCatch({
+            fs <- list.files(version.dir, full.names=TRUE, recursive=FALSE)
+            pkg.cached.versions.idxs <- grepl(pkgname, fs)
+            if (length(pkg.cached.versions.idxs) != 0L) {
+                log.message("cleaning up old package versions '", fs[pkg.cached.versions.idxs], "'", level=1)
+                unlink(fs[pkg.cached.versions.idxs], recursive=FALSE)
+            }
+        }, error = function(e) {
+            log.message("could not cleanup old package versions of '", pkgname, "' because: ", e$message)
+        })
+
         if(zip(toPath, pkgname, flags="-r9Xq") != 0L) {
             log.message("could not compress package dir ", fromPath , " and store it to ", toPath, level=1)
             return (FALSE)
-- 
GitLab