[llvm-lit] remove %t files before running a test

Tzafrir Poupko tzafrir11 at gmail.com
Thu May 14 07:34:19 PDT 2015


Hi James,

As far as I can tell rmtree() does not support removing symbolic links or
matching files by pattern.
Since i would like to support removal of patterns such as %t , %t.txt and
%t/filename I don't see how rmtree is useful by itself

Attached another patch option implementing the file scanning in python
instead of calling rm -rf

On Thu, May 14, 2015 at 4:00 PM, James Molloy <james at jamesmolloy.co.uk>
wrote:

> Hi Tzafrir,
>
> In which case, just using shutil.rmtree() should be sufficient:
> https://docs.python.org/2/library/shutil.html#shutil.rmtree
>
> Cheers,
>
> James
>
> On Thu, 14 May 2015 at 13:57 Tzafrir Poupko <tzafrir11 at gmail.com> wrote:
>
>> Hi James,
>>
>> There are 2 reasons for the -f
>>
>> 1. This is what is done currently by more then 300 tests and I wouldn't
>> like to change this.
>> 2. Using -f suppresses error messages that will happen when no temporary
>> file exists
>>
>> Since there is no standard function in python to delete files and
>> directories matching a pattern
>> I thought using rm -rf would be a better solution then implementing my
>> own.
>>
>> Tzafrir
>>
>> On Thu, May 14, 2015 at 3:27 PM, James Molloy <james at jamesmolloy.co.uk>
>> wrote:
>>
>>> Hi Tzafrir,
>>>
>>> This sounds like a good idea to me.
>>>
>>> +    subprocess.call(['rm','-rf',path+"*"])
>>>
>>>
>>>
>>> This is super dangerous. Why the -f ?
>>>
>>> Cheers,
>>>
>>> James
>>>
>>> On Thu, 14 May 2015 at 13:22 Tzafrir Poupko <tzafrir11 at gmail.com> wrote:
>>>
>>>> Before running a test, purge all %t files used by previous tests.
>>>> Remove any custom file used in test which was prefixed by %t.
>>>> There are over 300 clang tests that run "rm -rf %t" as first run
>>>> command, this patch will make it automaticlly.
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150514/51a522e7/attachment.html>
-------------- next part --------------
Index: TestRunner.py
===================================================================
--- TestRunner.py	(revision 236393)
+++ TestRunner.py	(working copy)
@@ -519,6 +519,8 @@
                    script, tmpBase, execdir):
     # Create the output directory if it does not already exist.
     lit.util.mkdir_p(os.path.dirname(tmpBase))
+    # Remove all temporary files relevant to this test if any exists
+    lit.util.purge(tmpBase + '.tmp')
 
     if useExternalSh:
         res = executeScript(test, litConfig, tmpBase, script, execdir)
Index: util.py
===================================================================
--- util.py	(revision 236393)
+++ util.py	(working copy)
@@ -6,6 +6,7 @@
 import signal
 import subprocess
 import sys
+import shutil
 
 def to_bytes(str):
     # Encode to UTF-8 to get binary data.
@@ -60,6 +61,31 @@
         if e.errno != errno.EEXIST:
             raise
 
+def purge(path):
+    """purge(path) - Remove all files and folders starting with this path
+    prefix"""
+    if not path:
+        return
+
+    parent = os.path.dirname(path)
+    prefix = os.path.basename(path)
+    if not parent or parent == path:
+        return
+
+    for f in os.listdir(parent):
+        if f.startswith(prefix):
+            try:
+                p=os.path.join(parent, f)
+                if os.path.islink(p):
+                    os.remove(p)
+                elif os.path.isdir(p):
+                    shutil.rmtree(p)
+                else:
+                    os.remove(p)
+            except Exception, e:
+                print e
+                pass
+
 def capture(args, env=None):
     """capture(command) - Run the given command (or argv list) in a shell and
     return the standard output."""


More information about the llvm-commits mailing list