[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