[Erp5-report] r44180 jm - /erp5/trunk/products/ERP5/bin/run_test_suite

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 11 14:48:43 CET 2011


Author: jm
Date: Fri Mar 11 14:48:43 2011
New Revision: 44180

URL: http://svn.erp5.org?rev=44180&view=rev
Log:
run_test_suite: add support for pure Git working copy

Modified:
    erp5/trunk/products/ERP5/bin/run_test_suite

Modified: erp5/trunk/products/ERP5/bin/run_test_suite
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bin/run_test_suite?rev=44180&r1=44179&r2=44180&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bin/run_test_suite [utf8] (original)
+++ erp5/trunk/products/ERP5/bin/run_test_suite [utf8] Fri Mar 11 14:48:43 2011
@@ -30,24 +30,25 @@ def format_command(*args, **kw):
     cmdline.append(v)
   return ' '.join(cmdline)
 
-def subprocess_capture(p):
+def subprocess_capture(p, quiet=False):
   def readerthread(input, output, buffer):
     while True:
       data = input.readline()
       if not data:
         break
-      output.write(data)
+      output(data)
       buffer.append(data)
   if p.stdout:
     stdout = []
+    output = quiet and (lambda data: None) or sys.stdout.write
     stdout_thread = threading.Thread(target=readerthread,
-                                     args=(p.stdout, sys.stdout, stdout))
+                                     args=(p.stdout, output, stdout))
     stdout_thread.setDaemon(True)
     stdout_thread.start()
   if p.stderr:
     stderr = []
     stderr_thread = threading.Thread(target=readerthread,
-                                     args=(p.stderr, sys.stderr, stderr))
+                                     args=(p.stderr, sys.stderr.write, stderr))
     stderr_thread.setDaemon(True)
     stderr_thread.start()
   if p.stdout:
@@ -106,7 +107,7 @@ class SubprocessError(EnvironmentError):
 
 class Updater(object):
 
-  _git_svn_cache = {}
+  _git_cache = {}
   realtime_output = True
   stdin = file(os.devnull)
 
@@ -127,6 +128,7 @@ class Updater(object):
               raise
 
   def spawn(self, *args, **kw):
+    quiet = kw.pop('quiet', False)
     env = kw and dict(os.environ, **kw) or None
     command = format_command(*args, **kw)
     print '\n$ ' + command
@@ -134,10 +136,11 @@ class Updater(object):
     p = subprocess.Popen(args, stdin=self.stdin, stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE, env=env)
     if self.realtime_output:
-      stdout, stderr = subprocess_capture(p)
+      stdout, stderr = subprocess_capture(p, quiet)
     else:
       stdout, stderr = p.communicate()
-      sys.stdout.write(stdout)
+      if not quiet:
+        sys.stdout.write(stdout)
       sys.stderr.write(stderr)
     result = dict(status_code=p.returncode, command=command,
                   stdout=stdout, stderr=stderr)
@@ -150,13 +153,15 @@ class Updater(object):
 
   def _git_find_rev(self, ref):
     try:
-      return self._git_svn_cache[ref]
+      return self._git_cache[ref]
     except KeyError:
-      r = self._git('svn', 'find-rev', ref)
-      assert r
-      ref2 = ref[0] != 'r' and 'r%u' % int(r) or r
-      self._git_svn_cache[ref] = ref2
-      self._git_svn_cache[ref2] = ref
+      if os.path.exists('.git/svn'):
+        r = self._git('svn', 'find-rev', ref)
+        assert r
+        self._git_cache[ref[0] != 'r' and 'r%u' % int(r) or r] = ref
+      else:
+        r = self._git('rev-list', '--topo-order', '--count', ref), ref
+      self._git_cache[ref] = r
       return r
 
   def getRevision(self, *path_list):
@@ -177,14 +182,20 @@ class Updater(object):
     if os.path.isdir('.git'):
       # edit .git/info/sparse-checkout if you want sparse checkout
       if revision:
-        h = self._git_find_rev('r' + revision)
+        if type(revision) is str:
+          h = self._git_find_rev('r' + revision)
+        else:
+          h = revision[1]
         if h != self._git('rev-parse', 'HEAD'):
           self.deletePycFiles('.')
           self._git('reset', '--merge', h)
       else:
         self.deletePycFiles('.')
-        self._git('svn', 'rebase')
-        self.revision = str(int(self._git('svn', 'find-rev', 'HEAD')))
+        if os.path.exists('.git/svn'):
+          self._git('svn', 'rebase')
+        else:
+          self._git('pull', '--ff-only')
+        self.revision = self._git_find_rev(self._git('rev-parse', 'HEAD'))
     elif os.path.isdir('.svn'):
       # following code allows sparse checkout
       def svn_mkdirs(path):



More information about the Erp5-report mailing list