[SCM] Samba Shared Repository - branch master updated

Jelmer Vernooij jelmer at samba.org
Fri Oct 1 10:49:21 MDT 2010


The branch, master has been updated
       via  9cdebd0 autobuild: Avoid unnecessary chdir() calls.
       via  c4ab2b3 autobuild: Output test results in subunit.
       via  21475df s3-selftest: fix prefix in subunit output.
       via  f70a986 s3: Add subunit-test target.
       via  9af570a s3-configure: Require at least version 1.2.6 of external TDB, which has TDB_INCOMPATIBLE_HASH.
       via  e5dfc64 s4: Add 'subunit-test' make target.
       via  3dfbf3c autobuild: Provide more information about build sequence, stage name and output mime type (all plain text for now).
       via  7210c95 autobuild: Add --always-email option.
      from  0866e2d autobuild-remote: Support autobuild.py rather than land.py.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9cdebd0ebcbf9b890679fa77ce6d8e0127fce28e
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 17:45:47 2010 +0200

    autobuild: Avoid unnecessary chdir() calls.

commit c4ab2b38af122c7e9173bd5af10f1f9584aa1310
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 14:25:55 2010 +0200

    autobuild: Output test results in subunit.

commit 21475df35d7f28ab031c6b541e6002c27db07651
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 13:39:28 2010 +0200

    s3-selftest: fix prefix in subunit output.

commit f70a98605eb620882073483fedf25d6aa4aca74e
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 13:30:01 2010 +0200

    s3: Add subunit-test target.

commit 9af570a2ef2313c309904ad291a8a0858d61eb68
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 13:17:58 2010 +0200

    s3-configure: Require at least version 1.2.6 of external TDB, which has
    TDB_INCOMPATIBLE_HASH.

commit e5dfc64e9c7ef38f77fed1ffc41aad6cf1876766
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 12:59:40 2010 +0200

    s4: Add 'subunit-test' make target.

commit 3dfbf3ce036987b14bbbeab3c35b58960a4fa75f
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 12:19:56 2010 +0200

    autobuild: Provide more information about build sequence, stage name and output mime type (all plain text for now).

commit 7210c95e600a27bbf8a31b50d45214dc372a1ecc
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Fri Oct 1 11:28:48 2010 +0200

    autobuild: Add --always-email option.

-----------------------------------------------------------------------

Summary of changes:
 script/autobuild.py             |  162 +++++++++++++++++++++++---------------
 source3/Makefile.in             |    4 +
 source3/configure.in            |    2 +-
 source3/selftest/s3-selftest.sh |    4 +-
 source3/selftest/tests.sh       |    6 +-
 source4/Makefile                |    3 +
 6 files changed, 112 insertions(+), 69 deletions(-)


Changeset truncated at 500 lines:

diff --git a/script/autobuild.py b/script/autobuild.py
index 4063543..be8006c 100755
--- a/script/autobuild.py
+++ b/script/autobuild.py
@@ -3,8 +3,8 @@
 # Copyright Andrew Tridgell 2010
 # released under GNU GPL v3 or later
 
-from subprocess import Popen, PIPE
-import os, signal, tarfile, sys, time
+from subprocess import call, check_call,Popen, PIPE
+import os, tarfile, sys, time
 from optparse import OptionParser
 import smtplib
 from email.mime.text import MIMEText
@@ -17,45 +17,45 @@ cleanup_list = []
 os.putenv('CC', "ccache gcc")
 
 tasks = {
-    "source3" : [ "./autogen.sh",
-                  "./configure.developer ${PREFIX}",
-                  "make basics",
-                  "make -j 4 everything", # don't use too many processes
-                  "make install",
-                  "TDB_NO_FSYNC=1 make test FAIL_IMMEDIATELY=1" ],
-
-    "source4" : [ "./configure.developer ${PREFIX}",
-                  "make -j",
-                  "make install",
-                  "TDB_NO_FSYNC=1 make test FAIL_IMMEDIATELY=1" ],
-
-    "source4/lib/ldb" : [ "./configure --enable-developer -C ${PREFIX}",
-                          "make -j",
-                          "make install",
-                          "make test" ],
-
-    "lib/tdb" : [ "./autogen-waf.sh",
-                  "./configure --enable-developer -C ${PREFIX}",
-                  "make -j",
-                  "make install",
-                  "make test" ],
-
-    "lib/talloc" : [ "./autogen-waf.sh",
-                     "./configure --enable-developer -C ${PREFIX}",
-                     "make -j",
-                     "make install",
-                     "make test" ],
-
-    "lib/replace" : [ "./autogen-waf.sh",
-                      "./configure --enable-developer -C ${PREFIX}",
-                      "make -j",
-                      "make install",
-                      "make test" ],
-
-    "lib/tevent" : [ "./configure --enable-developer -C ${PREFIX}",
-                     "make -j",
-                     "make install",
-                     "make test" ],
+    "source3" : [ ("autogen", "./autogen.sh", "text/plain"),
+                  ("configure", "./configure.developer ${PREFIX}", "text/plain"),
+                  ("make basics", "make basics", "text/plain"),
+                  ("make", "make -j 4 everything", "text/plain"), # don't use too many processes
+                  ("install", "make install", "text/plain"),
+                  ("test", "TDB_NO_FSYNC=1 make subunit-test FAIL_IMMEDIATELY=1", "text/x-subunit") ],
+
+    "source4" : [ ("configure", "./configure.developer ${PREFIX}", "text/plain"),
+                  ("make", "make -j", "text/plain"),
+                  ("install", "make install", "text/plain"),
+                  ("test", "TDB_NO_FSYNC=1 make subunit-test FAIL_IMMEDIATELY=1", "text/x-subunit") ],
+
+    "source4/lib/ldb" : [ ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"),
+                          ("make", "make -j", "text/plain"),
+                          ("install", "make install", "text/plain"),
+                          ("test", "make test", "text/plain") ],
+
+    "lib/tdb" : [ ("autogen", "./autogen-waf.sh", "text/plain"),
+                  ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"),
+                  ("make", "make -j", "text/plain"),
+                  ("install", "make install", "text/plain"),
+                  ("test", "make test", "text/plain") ],
+
+    "lib/talloc" : [ ("autogen", "./autogen-waf.sh", "text/plain"),
+                     ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"),
+                     ("make", "make -j", "text/plain"),
+                     ("install", "make install", "text/plain"),
+                     ("test", "make test", "text/plain"), ],
+
+    "lib/replace" : [ ("autogen", "./autogen-waf.sh", "text/plain"),
+                      ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"),
+                      ("make", "make -j", "text/plain"),
+                      ("install", "make install", "text/plain"),
+                      ("test", "make test", "text/plain"), ],
+
+    "lib/tevent" : [ ("configure", "./configure --enable-developer -C ${PREFIX}", "text/plain"),
+                     ("make", "make -j", "text/plain"),
+                     ("install", "make install", "text/plain"),
+                     ("test", "make test", "text/plain"), ],
 }
 
 retry_task = [ '''set -e
@@ -71,24 +71,21 @@ retry_task = [ '''set -e
                ''' % samba_master]
 
 def run_cmd(cmd, dir=".", show=None, output=False, checkfail=True):
-    cwd = os.getcwd()
-    os.chdir(dir)
     if show is None:
         show = options.verbose
     if show:
         print("Running: '%s' in '%s'" % (cmd, dir))
     if output:
-        ret = Popen([cmd], shell=True, stdout=PIPE).communicate()[0]
-        os.chdir(cwd)
-        return ret
-    ret = os.system(cmd)
-    os.chdir(cwd)
-    if checkfail and ret != 0:
-        raise Exception("FAILED %s: %d" % (cmd, ret))
-    return ret
-
-class builder:
+        return Popen([cmd], shell=True, stdout=PIPE, cwd=dir).communicate()[0]
+    elif checkfail:
+        return check_call(cmd, shell=True)
+    else:
+        return call(cmd, shell=True)
+
+
+class builder(object):
     '''handle build of one directory'''
+
     def __init__(self, name, sequence):
         self.name = name
 
@@ -124,8 +121,11 @@ class builder:
             print '%s: Completed OK' % self.name
             self.done = True
             return
-        self.cmd = self.sequence[self.next].replace("${PREFIX}", "--prefix=%s" % self.prefix)
-        print '%s: Running %s' % (self.name, self.cmd)
+        (self.stage, self.cmd, self.output_mime_type) = self.sequence[self.next]
+        self.cmd = self.cmd.replace("${PREFIX}", "--prefix=%s" % self.prefix)
+        if self.output_mime_type == "text/x-subunit":
+            self.cmd += " | %s --immediate" % (os.path.join(os.path.dirname(__file__), "selftest/format-subunit"))
+        print '%s: [%s] Running %s' % (self.name, self.stage, self.cmd)
         cwd = os.getcwd()
         os.chdir("%s/%s" % (self.sdir, self.dir))
         self.proc = Popen(self.cmd, shell=True,
@@ -134,17 +134,18 @@ class builder:
         self.next += 1
 
 
-class buildlist:
+class buildlist(object):
     '''handle build of multiple directories'''
+
     def __init__(self, tasklist, tasknames):
         global tasks
         self.tlist = []
         self.tail_proc = None
         self.retry = None
         if tasknames == ['pass']:
-            tasks = { 'pass' : [ '/bin/true' ]}
+            tasks = { 'pass' : [ ("pass", '/bin/true', "text/plain") ]}
         if tasknames == ['fail']:
-            tasks = { 'fail' : [ '/bin/false' ]}
+            tasks = { 'fail' : [ ("fail", '/bin/false', "text/plain") ]}
         if tasknames == []:
             tasknames = tasklist
         for n in tasknames:
@@ -203,10 +204,10 @@ class buildlist:
                 break
             if os.WIFSIGNALED(b.status) or os.WEXITSTATUS(b.status) != 0:
                 self.kill_kids()
-                return (b.status, b.name, b.tag, "%s: failed '%s' with status %d" % (b.name, b.cmd, b.status))
+                return (b.status, b.name, b.stage, b.tag, "%s: [%s] failed '%s' with status %d" % (b.name, b.stage, b.cmd, b.status))
             b.start_next()
         self.kill_kids()
-        return (0, None, None, "All OK")
+        return (0, None, None, None, "All OK")
 
     def tarlogs(self, fname):
         tar = tarfile.open(fname, "w:gz")
@@ -319,11 +320,13 @@ parser.add_option("", "--retry", help="automatically retry if master changes",
                   default=False, action="store_true")
 parser.add_option("", "--email", help="send email to the given address on failure",
                   type='str', default=None)
+parser.add_option("", "--always-email", help="always send email, even on success",
+                  action="store_true")
 parser.add_option("", "--daemon", help="daemonize after initial setup",
                   action="store_true")
 
 
-def email_failure(status, failed_task, failed_tag, errstr):
+def email_failure(status, failed_task, failed_stage, failed_tag, errstr):
     '''send an email to options.email about the failure'''
     user = os.getenv("USER")
     text = '''
@@ -345,7 +348,35 @@ or you can get full logs of all tasks in this job here:
 
 ''' % (failed_task, errstr, user, failed_tag, user, failed_tag, user)
     msg = MIMEText(text)
-    msg['Subject'] = 'autobuild failure for task %s' % failed_task
+    msg['Subject'] = 'autobuild failure for task %s during %s' % (failed_task, failed_stage)
+    msg['From'] = 'autobuild at samba.org'
+    msg['To'] = options.email
+
+    s = smtplib.SMTP()
+    s.connect()
+    s.sendmail(msg['From'], [msg['To']], msg.as_string())
+    s.quit()
+
+def email_success():
+    '''send an email to options.email about a successful build'''
+    user = os.getenv("USER")
+    text = '''
+Dear Developer,
+
+Your autobuild has succeeded.
+
+'''
+
+    if options.keeplogs:
+        text += '''
+
+you can get full logs of all tasks in this job here:
+
+  http://git.samba.org/%s/samba-autobuild/logs.tar.gz
+
+''' % (user,)
+    msg = MIMEText(text)
+    msg['Subject'] = 'autobuild success'
     msg['From'] = 'autobuild at samba.org'
     msg['To'] = options.email
 
@@ -354,6 +385,7 @@ or you can get full logs of all tasks in this job here:
     s.sendmail(msg['From'], [msg['To']], msg.as_string())
     s.quit()
 
+
 (options, args) = parser.parse_args()
 
 if options.retry:
@@ -395,7 +427,7 @@ while True:
         blist = buildlist(tasks, args)
         if options.tail:
             blist.start_tail()
-        (status, failed_task, failed_tag, errstr) = blist.run()
+        (status, failed_task, failed_stage, failed_tag, errstr) = blist.run()
         if status != 0 or errstr != "retry":
             break
         cleanup()
@@ -420,6 +452,8 @@ if status == 0:
     if options.keeplogs:
         blist.tarlogs("logs.tar.gz")
         print("Logs in logs.tar.gz")
+    if options.always_email:
+        email_success()
     blist.remove_logs()
     cleanup()
     print(errstr)
@@ -429,7 +463,7 @@ if status == 0:
 blist.tarlogs("logs.tar.gz")
 
 if options.email is not None:
-    email_failure(status, failed_task, failed_tag, errstr)
+    email_failure(status, failed_task, failed_stage, failed_tag, errstr)
 
 cleanup()
 print(errstr)
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 79e394a..8a0364d 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -3400,6 +3400,7 @@ test:: all torture timelimit
 		SELFTESTDIR="$(selftestdir)" SELFTESTPREFIX="$(selftest_prefix)" \
 		SOURCEDIR="$(srcdir)" \
 		RUN_FROM_BUILD_FARM="$(RUN_FROM_BUILD_FARM)" \
+		SUBUNIT_FORMATTER="$(SUBUNIT_FORMATTER)" \
 		PERL="$(PERL)" PYTHON="$(PYTHON)" \
 		$(srcdir)/selftest/s3-selftest.sh
 
@@ -3409,6 +3410,9 @@ test-%:
 buildfarm-test:
 	$(MAKE) test RUN_FROM_BUILD_FARM=yes
 
+subunit-test:
+	$(MAKE) test SUBUNIT_FORMATTER=cat
+
 SELFTEST_TESTENV = dc
 
 testenv:
diff --git a/source3/configure.in b/source3/configure.in
index 9868dc0..630c854 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -2122,7 +2122,7 @@ AC_ARG_ENABLE(external_libtdb,
 
 if test "x$enable_external_libtdb" != xno
 then
-	PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.2,
+	PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
 		[ enable_external_libtdb=yes ],
 		[
 		if test x$enable_external_libtdb = xyes; then
diff --git a/source3/selftest/s3-selftest.sh b/source3/selftest/s3-selftest.sh
index 86e4b75..6105ff4 100755
--- a/source3/selftest/s3-selftest.sh
+++ b/source3/selftest/s3-selftest.sh
@@ -1,7 +1,9 @@
 #!/bin/sh
 
 FILTER_XFAIL="${PYTHON} -u ${SELFTESTDIR}/filter-subunit --expected-failures=${SOURCEDIR}/selftest/knownfail"
-SUBUNIT_FORMATTER="${PYTHON} -u ${SELFTESTDIR}/format-subunit --prefix=${SELFTESTPREFIX} --immediate"
+if [ "x${SUBUNIT_FORMATTER}" = x"" ]; then
+	SUBUNIT_FORMATTER="${PYTHON} -u ${SELFTESTDIR}/format-subunit --prefix=${SELFTESTPREFIX} --immediate"
+fi
 
 cleanup_and_exit() {
 	if test "$1" = 0 -o -z "$1"; then
diff --git a/source3/selftest/tests.sh b/source3/selftest/tests.sh
index 39c1a26..4233cfb 100755
--- a/source3/selftest/tests.sh
+++ b/source3/selftest/tests.sh
@@ -30,11 +30,11 @@ plantest() {
 	cmdline="$*"
 	echo "-- TEST --"
 	if [ "$env" = "none" ]; then
-		fulltest="samba3.$name"
+		fullname="samba3.$name"
 	else
-		fulltest="samba3.$name ($env)"
+		fullname="samba3.$name ($env)"
 	fi
-	echo $fulltest
+	echo $fullname
 	echo $env
 	echo $cmdline "2>&1" "| ../selftest/filter-subunit --prefix \"$fullname.\""
 }
diff --git a/source4/Makefile b/source4/Makefile
index b490240..e1e53cd 100644
--- a/source4/Makefile
+++ b/source4/Makefile
@@ -14,6 +14,9 @@ uninstall:
 test:
 	$(WAF) test $(TEST_OPTIONS)
 
+subunit-test:
+	$(WAF) test --filtered-subunit $(TEST_OPTIONS)
+
 testenv:
 	$(WAF) test --testenv $(TEST_OPTIONS)
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list