scripts: add clean of build dir to dl_cleanup script
authorAnsuel Smith <ansuelsmth@gmail.com>
Tue, 6 Jul 2021 01:28:55 +0000 (03:28 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Tue, 13 Sep 2022 23:34:47 +0000 (01:34 +0200)
Improve dl_cleanup by adding an option to also clean the build directory
related to the downloaded package.
The script will check every directory in build_dir/ and check if any
old package is present there. If outdated package are found, the old
one are cleared leaving only the last one.

Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
scripts/dl_cleanup.py

index c3b427c43633854497a1b3ff5e90fdfe96f0d6f2..f7232b78c9f6aed4f1cff5316c1f0296831d2fa1 100755 (executable)
@@ -13,6 +13,7 @@ import sys
 import os
 import re
 import getopt
+import shutil
 
 # Commandline options
 opt_dryrun = False
@@ -140,15 +141,18 @@ class EntryParseError(Exception):
 
 
 class Entry:
-    def __init__(self, directory, filename):
+    def __init__(self, directory, builddir, filename):
         self.directory = directory
         self.filename = filename
+        self.builddir = builddir
         self.progname = ""
         self.fileext = ""
+        self.filenoext = ""
 
         for ext in extensions:
             if filename.endswith(ext):
                 filename = filename[0 : 0 - len(ext)]
+                self.filenoext = filename
                 self.fileext = ext
                 break
         else:
@@ -168,12 +172,27 @@ class Entry:
     def getPath(self):
         return (self.directory + "/" + self.filename).replace("//", "/")
 
+    def getBuildPaths(self):
+        paths = []
+        for subdir in os.scandir(self.builddir):
+            package_build_dir = os.path.join(subdir.path, self.filenoext)
+            if os.path.exists(package_build_dir):
+                paths.append(package_build_dir)
+        return paths
+
     def deleteFile(self):
         path = self.getPath()
         print("Deleting", path)
         if not opt_dryrun:
             os.unlink(path)
 
+    def deleteBuildDir(self):
+        paths = self.getBuildPaths()
+        for path in paths:
+            print("Deleting BuildDir", path)
+            if not opt_dryrun:
+                    shutil.rmtree(path)
+
     def __ge__(self, y):
         return self.version >= y.version
 
@@ -188,6 +207,9 @@ def usage():
     print(
         " -D|--download-dir       Provide path to dl dir to clean also the build directory"
     )
+    print(
+        " -b|--build-dir          Provide path to build dir to clean also the build directory"
+    )
 
 
 def main(argv):
@@ -196,13 +218,14 @@ def main(argv):
     try:
         (opts, args) = getopt.getopt(
             argv[1:],
-            "hdBwD:",
+            "hdBwDb:",
             [
                 "help",
                 "dry-run",
                 "show-blacklist",
                 "whitelist=",
                 "download-dir=",
+                "build-dir=",
             ],
         )
     except getopt.GetoptError as e:
@@ -210,6 +233,7 @@ def main(argv):
         return 1
 
     directory = "dl/"
+    builddir = "build_dir/"
 
     for (o, v) in opts:
         if o in ("-h", "--help"):
@@ -235,11 +259,17 @@ def main(argv):
             return 0
         if o in ("-D", "--download-dir"):
             directory = v
+        if o in ("-b", "--build-dir"):
+            builddir = v
 
     if not os.path.exists(directory):
         print("Can't find dl path", directory)
         return 1
 
+    if not os.path.exists(builddir):
+        print("Can't find dl path", builddir)
+        return 1
+
     # Create a directory listing and parse the file names.
     entries = []
     for filename in os.listdir(directory):
@@ -252,7 +282,7 @@ def main(argv):
                 break
         else:
             try:
-                entries.append(Entry(directory, filename))
+                entries.append(Entry(directory, builddir, filename))
             except EntryParseError as e:
                 pass
 
@@ -277,6 +307,8 @@ def main(argv):
             for version in versions:
                 if version is not lastVersion:
                     version.deleteFile()
+                    if builddir:
+                        version.deleteBuildDir()
             if opt_dryrun:
                 print("Keeping", lastVersion.getPath())