phase1: manually fetch remote Git refs
[buildbot.git] / phase1 / master.cfg
index f8b11df733a9644ccd97cea6d6d651e76c4ea37b..b9bbf1214839ee08e410e7a3c48c1b66473f0632 100644 (file)
@@ -118,7 +118,7 @@ from buildbot.changes.gitpoller import GitPoller
 c['change_source'] = []
 c['change_source'].append(GitPoller(
        repo_url,
-       workdir=home_dir+'/work.git', branch='master',
+       workdir=home_dir+'/work.git', branch=repo_branch,
        pollinterval=300))
 
 ####### SCHEDULERS
@@ -132,7 +132,7 @@ from buildbot.changes import filter
 c['schedulers'] = []
 c['schedulers'].append(SingleBranchScheduler(
        name="all",
-       change_filter=filter.ChangeFilter(branch='master'),
+       change_filter=filter.ChangeFilter(branch=repo_branch),
        treeStableTimer=60,
        builderNames=targets))
 
@@ -184,10 +184,29 @@ def IsTaggingRequested(step):
 def IsNoTaggingRequested(step):
        return not IsTaggingRequested(step)
 
+def IsNoMasterBuild(step):
+       return repo_branch != "master"
+
+def GetBaseVersion(props):
+       if re.match("^[^-]+-[0-9]+\.[0-9]+$", repo_branch):
+               return repo_branch.split('-')[1]
+       else:
+               return "master"
+
+def GetVersionPrefix(props):
+       basever = GetBaseVersion(props)
+       if props.hasProperty("tag") and re.match("^[0-9]+\.[0-9]+\.[0-9]+$", props["tag"]):
+               return "%s/" % props["tag"]
+       elif basever != "master":
+               return "%s-SNAPSHOT/" % basever
+       else:
+               return ""
+
 
 c['builders'] = []
 
 dlLock = locks.SlaveLock("slave_dl")
+tagLock = locks.MasterLock("make_tag")
 
 checkBuiltin = re.sub('[\t\n ]+', ' ', """
        checkBuiltin() {
@@ -291,14 +310,15 @@ for target in targets:
                path = home_dir+'/source.git',
                env = {'GNUPGHOME': gpg_home},
                haltOnFailure = True,
-               doStepIf = IsTaggingRequested
+               doStepIf = IsTaggingRequested,
+               locks = [tagLock.access('exclusive')]
        ))
 
        # switch to branch
        factory.addStep(ShellCommand(
                name = "switchbranch",
                description = "Checking out Git branch",
-               command = ["git", "checkout", repo_branch],
+               command = "if [ -d .git ]; then git checkout '%s'; else exit 0; fi" % repo_branch,
                haltOnFailure = True,
                doStepIf = IsNoTaggingRequested
        ))
@@ -310,6 +330,14 @@ for target in targets:
                mode = 'incremental',
                method = 'clean'))
 
+       # update remote refs
+       factory.addStep(ShellCommand(
+               name = "fetchrefs",
+               description = "Fetching Git remote refs",
+               command = ["git", "fetch", "origin", "+refs/heads/%s:refs/remotes/origin/%s" %(repo_branch, repo_branch)],
+               haltOnFailure = True
+       ))
+
        # fetch tags
        factory.addStep(ShellCommand(
                name = "fetchtag",
@@ -543,9 +571,24 @@ for target in targets:
 
        # upload
        factory.addStep(ShellCommand(
-               name = "uploadprepare",
-               description = "Preparing target directory",
-               command=["rsync", "-av", "--include", "/%s/" %(ts[0]), "--include", "/%s/%s/" %(ts[0], ts[1]), "--exclude", "/*", "--exclude", "/*/*", "--exclude", "/%s/%s/*" %(ts[0], ts[1]), "bin/targets/", "%s/targets/" %(rsync_bin_url)],
+               name = "dirprepare",
+               description = "Preparing upload directory structure",
+               command = ["mkdir", "-p", WithProperties("tmp/upload/%%(prefix)stargets/%s/%s" %(ts[0], ts[1]), prefix=GetVersionPrefix)],
+               haltOnFailure = True
+       ))
+
+       factory.addStep(ShellCommand(
+               name = "linkprepare",
+               description = "Preparing repository symlink",
+               command = ["ln", "-s", "-f", WithProperties("../packages-%(basever)s", basever=GetBaseVersion), WithProperties("tmp/upload/%(prefix)spackages", prefix=GetVersionPrefix)],
+               doStepIf = IsNoMasterBuild,
+               haltOnFailure = True
+       ))
+
+       factory.addStep(ShellCommand(
+               name = "dirupload",
+               description = "Uploading directory structure",
+               command = ["rsync", "-avz", "tmp/upload/", "%s/" %(rsync_bin_url)],
                env={'RSYNC_PASSWORD': rsync_bin_key},
                haltOnFailure = True,
                logEnviron = False
@@ -554,7 +597,9 @@ for target in targets:
        factory.addStep(ShellCommand(
                name = "targetupload",
                description = "Uploading target files",
-               command=["rsync", "--delete", "--checksum", "--delay-updates", "--partial-dir=.~tmp~%s~%s" %(ts[0], ts[1]), "-avz", WithProperties("bin/targets/%s/%s%%(libc)s/" %(ts[0], ts[1])), "%s/targets/%s/%s/" %(rsync_bin_url, ts[0], ts[1])],
+               command=["rsync", "--delete", "--checksum", "--delay-updates", "--partial-dir=.~tmp~%s~%s" %(ts[0], ts[1]),
+                        "-avz", WithProperties("bin/targets/%s/%s%%(libc)s/" %(ts[0], ts[1])),
+                        WithProperties("%s/%%(prefix)stargets/%s/%s/" %(rsync_bin_url, ts[0], ts[1]), prefix=GetVersionPrefix)],
                env={'RSYNC_PASSWORD': rsync_bin_key},
                haltOnFailure = True,
                logEnviron = False