Hi devs,
I have just been looking at running the benchmarks and have got to the stage
where I can
run it on windows.
This attached patch fixes three issues with the script:
1) use of file:// when I'm sure that file:/// is correct from previous
discussions on this list
2) make sure no \ end up is repos url file://
3) at error handler to rmtree to handle the windows read-only files.
I have removed the "which svn" command, not sure how to do this so it is only
removed on
windows as I'm not really a python person.
I hope this is useful.
I haven't provided a log message as I don't really think it can be applied
without a bit of
editing.
Cheers
Alan Wood
Index: tools/dev/benchmarks/suite1/benchmark.py
===================================================================
--- tools/dev/benchmarks/suite1/benchmark.py (revision 1094482)
+++ tools/dev/benchmarks/suite1/benchmark.py (working copy)
@@ -362,7 +362,25 @@
if os.path.isdir(path):
propadd_tree(path, fraction)
+def rmtreeonerror(func, path, exc_info):
+ """
+ Error handler for ``shutil.rmtree``.
+ If the error is due to an access error (read only file)
+ it attempts to add write permission and then retries.
+
+ If the error is for another reason it re-raises the error.
+
+ Usage : ``shutil.rmtree(path, onerror=onerror)``
+ """
+ import stat
+ if not os.access(path, os.W_OK):
+ # Is the error an access error ?
+ os.chmod(path, stat.S_IWUSR)
+ func(path)
+ else:
+ raise
+
def run(levels, spread, N):
# ensure identical modifications for every run of this script
random.seed(0)
@@ -372,15 +390,16 @@
base = tempfile.mkdtemp()
try:
repos = j(base, 'repos')
+ repos = repos.replace('\\','/')
wc = j(base, 'wc')
wc2 = j(base, 'wc2')
- file_url = 'file://%s' % repos
+ file_url = 'file:///%s' % repos
- so, se = run_cmd(['which', 'svn'])
- if not so:
- print "Can't find svn."
- exit(1)
+# so, se = run_cmd(['which', 'svn'])
+# if not so:
+# print "Can't find svn."
+# exit(1)
print '\nRunning svn benchmark in', base
print 'dir levels: %s; new files and dirs per leaf: %s; run %d of %d' %(
@@ -480,7 +499,7 @@
print timings.summary()
finally:
- shutil.rmtree(base)
+ shutil.rmtree(base,onerror=rmtreeonerror)
def read_from_file(file_path):