From e3656943ca868c3008e4b237587b3444070c2a08 Mon Sep 17 00:00:00 2001
From: Pawel Szostek <pawel.szostek@gmail.com>
Date: Thu, 14 Jul 2011 12:13:16 +0200
Subject: [PATCH] Add --clean option to hdlmake

--clean forces hdlmake to remove modules fetched
from repositories. All unneeded folders are removed
either.
---
 hdlmake               | Bin 31295 -> 31477 bytes
 src/hdlmake_kernel.py |   5 +++++
 src/module.py         |  24 ++++++++++++++++++++++--
 3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/hdlmake b/hdlmake
index 89b05285cf3eed54ccc81344829bf80183ff0cc7..f1bd74f6d3d407f279aa174a906a50fe9183f392 100755
GIT binary patch
delta 6770
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

delta 6534
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

diff --git a/src/hdlmake_kernel.py b/src/hdlmake_kernel.py
index 29c8caa8..da42c4b5 100644
--- a/src/hdlmake_kernel.py
+++ b/src/hdlmake_kernel.py
@@ -254,6 +254,11 @@ class HdlmakeKernel(object):
         f.write("process run {Generate Programming File} -force rerun_all\n")
         f.close()
 
+    def clean_modules(self):
+        for m in self.modules_pool:
+            if m.source in ["svn", "git"]:
+                m.remove()
+
     def generate_fetch_makefile(self):
         pool = self.modules_pool
 
diff --git a/src/module.py b/src/module.py
index 140aa8ae..37359d37 100644
--- a/src/module.py
+++ b/src/module.py
@@ -76,8 +76,8 @@ class Module(object):
             self.path = url
             self.isfetched = True
         else:
-            if os.path.exists(os.path.join(fetchto, self.basename)):
-                self.path = os.path.join(fetchto, self.basename)
+            if os.path.exists(os.path.abspath(os.path.join(fetchto, self.basename))):
+                self.path = os.path.abspath(os.path.join(fetchto, self.basename))
                 self.isfetched = True
             else:
                 self.path = None
@@ -125,6 +125,26 @@ class Module(object):
             sth = []
         return sth
 
+    def remove(self):
+        if not self.isfetched:
+            return
+
+        import shutil
+        import os
+
+        p.vprint("Removing " + self.path)
+        shutil.rmtree(self.path)
+
+        parts = self.path.split('/')
+        while True:
+            try:
+                parts = parts[:-1]
+                tmp = '/'.join(parts)
+                p.vprint("Trying to remove " + tmp)
+                os.rmdir(tmp)
+            except OSError: #a catologue is not empty - we are done
+                break
+
     def parse_manifest(self):
         if self.isparsed == True or self.isfetched == False:
             return
-- 
GitLab