The branch, master has been updated via f339c1f script/autobuild.py: add --log-base option via 1362bb5 script/autobuild.py: add log_base variable to avoid hardcoded values via 23dbf63 script/autobuild.py: add --branch option via ce22882 script/autobuild.py: use some variables for push_remote and push_branch via a68ab0e script/autobuild.py: use some variables for rebase_remote and rebase_branch from 162fbf4 selftest: skip the samba4.smb2.compound testsuite
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit f339c1fd91baaff1d727cda1a30b0963423dcb5b Author: Stefan Metzmacher <me...@samba.org> Date: Sat Sep 22 02:40:19 2012 +0200 script/autobuild.py: add --log-base option metze Autobuild-User(master): Stefan Metzmacher <me...@samba.org> Autobuild-Date(master): Sat Sep 22 23:21:59 CEST 2012 on sn-devel-104 commit 1362bb548c9cb6d3e688ab102bd1d8166d73d95f Author: Stefan Metzmacher <me...@samba.org> Date: Sat Sep 22 02:34:38 2012 +0200 script/autobuild.py: add log_base variable to avoid hardcoded values metze commit 23dbf63e2d1bf3a30a2b6563fc9bafde4ca157fb Author: Stefan Metzmacher <me...@samba.org> Date: Sat Sep 22 02:26:10 2012 +0200 script/autobuild.py: add --branch option metze commit ce22882df7e00b22a735539791806264424033a7 Author: Stefan Metzmacher <me...@samba.org> Date: Sat Sep 22 02:18:11 2012 +0200 script/autobuild.py: use some variables for push_remote and push_branch metze commit a68ab0e97e8dedc8298ca6502b1efc6ca2e32d66 Author: Stefan Metzmacher <me...@samba.org> Date: Sat Sep 22 00:23:21 2012 +0200 script/autobuild.py: use some variables for rebase_remote and rebase_branch metze ----------------------------------------------------------------------- Summary of changes: script/autobuild.py | 134 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 87 insertions(+), 47 deletions(-) Changeset truncated at 500 lines: diff --git a/script/autobuild.py b/script/autobuild.py index ae58fcd..9fdea3b 100755 --- a/script/autobuild.py +++ b/script/autobuild.py @@ -184,19 +184,6 @@ tasks = { 'fail' : [ ("fail", 'echo failing && /bin/false', "text/plain") ] } -retry_task = [ ( "retry", - '''set -e - git remote add -t master master %s - git fetch master - while :; do - sleep 60 - git describe master/master > old_master.desc - git fetch master - git describe master/master > master.desc - diff old_master.desc master.desc - done - ''' % samba_master, "test/plain" ) ] - def run_cmd(cmd, dir=".", show=None, output=False, checkfail=True): if show is None: show = options.verbose @@ -262,7 +249,7 @@ class builder(object): class buildlist(object): '''handle build of multiple directories''' - def __init__(self, tasklist, tasknames): + def __init__(self, tasklist, tasknames, rebase_url, rebase_branch="master"): global tasks self.tlist = [] self.tail_proc = None @@ -273,6 +260,27 @@ class buildlist(object): b = builder(n, tasks[n]) self.tlist.append(b) if options.retry: + rebase_remote = "rebaseon" + retry_task = [ ("retry", + '''set -e + git remote add -t %s %s %s + git fetch %s + while :; do + sleep 60 + git describe %s/%s > old_remote_branch.desc + git fetch %s + git describe %s/%s > remote_branch.desc + diff old_remote_branch.desc remote_branch.desc + done + ''' % ( + rebase_branch, rebase_remote, rebase_url, + rebase_remote, + rebase_remote, rebase_branch, + rebase_remote, + rebase_remote, rebase_branch + ), + "test/plain" ) ] + self.retry = builder('retry', retry_task) self.need_retry = False @@ -400,32 +408,51 @@ def write_pidfile(fname): f.close() -def rebase_tree(url): - print("Rebasing on %s" % url) +def rebase_tree(rebase_url, rebase_branch = "master"): + rebase_remote = "rebaseon" + print("Rebasing on %s" % rebase_url) run_cmd("git describe HEAD", show=True, dir=test_master) - run_cmd("git remote add -t master master %s" % url, show=True, dir=test_master) - run_cmd("git fetch master", show=True, dir=test_master) + run_cmd("git remote add -t %s %s %s" % + (rebase_branch, rebase_remote, rebase_url), + show=True, dir=test_master) + run_cmd("git fetch %s" % rebase_remote, show=True, dir=test_master) if options.fix_whitespace: - run_cmd("git rebase --whitespace=fix master/master", show=True, dir=test_master) + run_cmd("git rebase --whitespace=fix %s/%s" % + (rebase_remote, rebase_branch), + show=True, dir=test_master) else: - run_cmd("git rebase master/master", show=True, dir=test_master) - diff = run_cmd("git --no-pager diff HEAD master/master", dir=test_master, output=True) + run_cmd("git rebase %s/%s" % + (rebase_remote, rebase_branch), + show=True, dir=test_master) + diff = run_cmd("git --no-pager diff HEAD %s/%s" % + (rebase_remote, rebase_branch), + dir=test_master, output=True) if diff == '': - print("No differences between HEAD and master/master - exiting") + print("No differences between HEAD and %s/%s - exiting" % + (rebase_remote, rebase_branch)) sys.exit(0) - run_cmd("git describe master/master", show=True, dir=test_master) + run_cmd("git describe %s/%s" % + (rebase_remote, rebase_branch), + show=True, dir=test_master) run_cmd("git describe HEAD", show=True, dir=test_master) - run_cmd("git --no-pager diff --stat HEAD master/master", show=True, dir=test_master) + run_cmd("git --no-pager diff --stat HEAD %s/%s" % + (rebase_remote, rebase_branch), + show=True, dir=test_master) -def push_to(url): - print("Pushing to %s" % url) +def push_to(push_url, push_branch = "master"): + push_remote = "pushto" + print("Pushing to %s" % push_url) if options.mark: run_cmd("git config --replace-all core.editor script/commit_mark.sh", dir=test_master) run_cmd("git commit --amend -c HEAD", dir=test_master) # the notes method doesn't work yet, as metze hasn't allowed refs/notes/* in master # run_cmd("EDITOR=script/commit_mark.sh git notes edit HEAD", dir=test_master) - run_cmd("git remote add -t master pushto %s" % url, show=True, dir=test_master) - run_cmd("git push pushto +HEAD:master", show=True, dir=test_master) + run_cmd("git remote add -t %s %s %s" % + (push_branch, push_remote, push_url), + show=True, dir=test_master) + run_cmd("git push %s +HEAD:%s" % + (push_remote, push_branch), + show=True, dir=test_master) def_testbase = os.getenv("AUTOBUILD_TESTBASE", "/memdisk/%s" % os.getenv('USER')) @@ -458,11 +485,16 @@ 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") +parser.add_option("", "--branch", help="the branch to work on (default=master)", + default="master", type='str') +parser.add_option("", "--log-base", help="location where the logs can be found (default=cwd)", + default=None, type='str') - -def email_failure(status, failed_task, failed_stage, failed_tag, errstr): +def email_failure(status, failed_task, failed_stage, failed_tag, errstr, log_base=None): '''send an email to options.email about the failure''' user = os.getenv("USER") + if log_base is None: + log_base = "http://git.samba.org/%s/samba-autobuild" % user text = ''' Dear Developer, @@ -473,25 +505,25 @@ the autobuild has been abandoned. Please fix the error and resubmit. A summary of the autobuild process is here: - http://git.samba.org/%s/samba-autobuild/autobuild.log -''' % (failed_task, errstr, user) + %s/autobuild.log +''' % (failed_task, errstr, log_base) if failed_task != 'rebase': text += ''' You can see logs of the failed task here: - http://git.samba.org/%s/samba-autobuild/%s.stdout - http://git.samba.org/%s/samba-autobuild/%s.stderr + %s/%s.stdout + %s/%s.stderr or you can get full logs of all tasks in this job here: - http://git.samba.org/%s/samba-autobuild/logs.tar.gz + %s/logs.tar.gz The top commit for the tree that was built was: %s -''' % (user, failed_tag, user, failed_tag, user, top_commit_msg) +''' % (log_base, failed_tag, log_base, failed_tag, log_base, top_commit_msg) msg = MIMEText(text) msg['Subject'] = 'autobuild failure for task %s during %s' % (failed_task, failed_stage) msg['From'] = 'autobu...@samba.org' @@ -502,9 +534,11 @@ The top commit for the tree that was built was: s.sendmail(msg['From'], [msg['To']], msg.as_string()) s.quit() -def email_success(): +def email_success(log_base=None): '''send an email to options.email about a successful build''' user = os.getenv("USER") + if log_base is None: + log_base = "http://git.samba.org/%s/samba-autobuild" % user text = ''' Dear Developer, @@ -517,9 +551,9 @@ Your autobuild has succeeded. you can get full logs of all tasks in this job here: - http://git.samba.org/%s/samba-autobuild/logs.tar.gz + %s/logs.tar.gz -''' % user +''' % log_base text += ''' The top commit for the tree that was built was: @@ -579,15 +613,21 @@ while True: try: try: if options.rebase is not None: - rebase_tree(options.rebase) + rebase_url = options.rebase elif options.rebase_master: - rebase_tree(samba_master) + rebase_url = samba_master + else: + rebase_url = None + if rebase_url is not None: + rebase_tree(rebase_url, rebase_branch=options.branch) except Exception: cleanup_list.append(gitroot + "/autobuild.pid") cleanup() - email_failure(-1, 'rebase', 'rebase', 'rebase', 'rebase on master failed') + email_failure(-1, 'rebase', 'rebase', 'rebase', + 'rebase on %s failed' % options.branch, + log_base=options.log_base) sys.exit(1) - blist = buildlist(tasks, args) + blist = buildlist(tasks, args, rebase_url, rebase_branch=options.branch) if options.tail: blist.start_tail() (status, failed_task, failed_stage, failed_tag, errstr) = blist.run() @@ -611,14 +651,14 @@ if status == 0: print("Running passcmd: %s" % options.passcmd) run_cmd(options.passcmd, dir=test_master) if options.pushto is not None: - push_to(options.pushto) + push_to(options.pushto, push_branch=options.branch) elif options.push_master: - push_to(samba_master_ssh) + push_to(samba_master_ssh, push_branch=options.branch) if options.keeplogs: blist.tarlogs("logs.tar.gz") print("Logs in logs.tar.gz") if options.always_email: - email_success() + email_success(log_base=options.log_base) blist.remove_logs() cleanup() print(errstr) @@ -628,7 +668,7 @@ if status == 0: blist.tarlogs("logs.tar.gz") if options.email is not None: - email_failure(status, failed_task, failed_stage, failed_tag, errstr) + email_failure(status, failed_task, failed_stage, failed_tag, errstr, log_base=options.log_base) cleanup() print(errstr) -- Samba Shared Repository