diff options
author | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2008-06-20 09:33:56 +0530 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek.chauhan@gmail.com> | 2008-06-20 09:33:56 +0530 |
commit | b4a9d689214161ff48633c54d748cfb6cab67dd7 (patch) | |
tree | f7c256ba5eb60b164df8c8fd3f9cbfbfb27a3a82 | |
parent | - Declare autotua.Job() attributes in __init__() (diff) | |
download | autotua-b4a9d689214161ff48633c54d748cfb6cab67dd7.tar.gz autotua-b4a9d689214161ff48633c54d748cfb6cab67dd7.tar.bz2 autotua-b4a9d689214161ff48633c54d748cfb6cab67dd7.zip |
- Rename self.maintainer to self.maint
- autotua.chroot -- self.destdir -> self.workdir
- Make autotua.sync.Syncer().sync() behaviour consistent (rsync was different)
- autotua.const -- CHROOT_WORKDIR -> WORKDIR
- MAIN_JOBTAGE_DIR -> JOBTAGE_DIR
- Each job has it's own exported jobtage tree (WORKDIR+'/jobtage')
- Support bzr-export as a Sync scheme
-rw-r--r-- | slave/autotua/__init__.py | 6 | ||||
-rw-r--r-- | slave/autotua/chroot/__init__.py | 9 | ||||
-rw-r--r-- | slave/autotua/const.py | 11 | ||||
-rw-r--r-- | slave/autotua/sync/__init__.py | 17 | ||||
-rwxr-xr-x | slave/test_modules.py | 4 |
5 files changed, 31 insertions, 16 deletions
diff --git a/slave/autotua/__init__.py b/slave/autotua/__init__.py index 72c8fe3..40f7779 100644 --- a/slave/autotua/__init__.py +++ b/slave/autotua/__init__.py @@ -30,11 +30,12 @@ class Job: """A Job.""" def __init__(self, job_data): + self.maint = job_data['maintainer'] self.name = job_data['name'] self.stage = self._stage_fetchable(job_data) # This should probably job_data['maintainer']/self.name or something # need to quantify the uniqueness of job_data['name'] - self.jobtagedir = osp.join(const.JOBTAGE_DIR, self.name) + self.jobtagedir = osp.join(const.WORKDIR, self.maint, self.name, 'jobtage') self.jobtagerev = job_data['jobtagerev'] self.jobuilds = job_data['jobuilds'] @@ -92,7 +93,8 @@ class Job: # Sync jobtage tree sync.Syncer().sync() # Branch local jobtage tree - sync.Syncer(uri=const.MAIN_JOBTAGE_DIR, destdir=self.jobtagedir, rev=self.jobtagerev).sync() + sync.Syncer(uri=const.JOBTAGE_DIR, destdir=self.jobtagedir, + rev=self.jobtagerev, scheme="bzr-export").sync() ## Read config, get portage snapshot if required #self._fetch_portage_snapshot() # Jobuild-specific stuff diff --git a/slave/autotua/chroot/__init__.py b/slave/autotua/chroot/__init__.py index aaa5166..04324cd 100644 --- a/slave/autotua/chroot/__init__.py +++ b/slave/autotua/chroot/__init__.py @@ -40,7 +40,7 @@ class WorkChroot(object): """ self.chroot = PristineChroot(stage) self.job = job - self.destdir = osp.join(const.CHROOT_WORKDIR, self.chroot.dir) + self.workdir = osp.join(const.WORKDIR, self.job.maintainer, self.name, 'chroot') # Hmmmm. Maybe all this should be in a module of it's own. def _clean_mounts(self, chrootdir): @@ -68,11 +68,12 @@ class WorkChroot(object): rsync from PristineChroot Mount stuff. """ - result = self._clean_mounts(self.destdir) + result = self._clean_mounts(self.workdir) if not result: sys.exit('Cleaning mounts failed.') - syncer = sync.Syncer(uri=self.chroot.dir, destdir=self.destdir, scheme='rsync') + # self.chroot.dir/ => rsync *contents* to self.workdir + syncer = sync.Syncer(uri=self.chroot.dir+"/", destdir=self.workdir, scheme='rsync') syncer.sync() - result = self._prepare_mounts(self.destdir): + result = self._prepare_mounts(self.workdir): if not result: sys.exit('Preparing mounts failed.') diff --git a/slave/autotua/const.py b/slave/autotua/const.py index e82a36d..68c6cd9 100644 --- a/slave/autotua/const.py +++ b/slave/autotua/const.py @@ -13,7 +13,7 @@ Internal Constants TMPDIR = '/var/tmp/autotua' STAGE_DIR = TMPDIR+'/tarballs/stages' CHROOT_DIR = TMPDIR+'/chroots/pristine' -CHROOT_WORKDIR = TMPDIR+'/chroots/work' +WORKDIR = TMPDIR+'/work' # Example: # http://gentoo.osuosl.org/releases/hppa/2008.0_beta2/stages/stage3-hppa2.0-2008.0_beta2.tar.bz2 @@ -24,8 +24,7 @@ STAGE_MIRROR_PATH = 'releases/%(gen_arch)s/%(release)s/stages' STAGE_FILENAME = '%(stage)s-%(arch)s-%(release)s.tar.bz2' JOBTAGE_URI = 'http://dev.gentooexperimental.org/~bheekling/jobtage' -JOBTAGE_DIR = '/var/tmp/autotua/jobtages' -MAIN_JOBTAGE_DIR = '/var/tmp/autotua/jobtage' +JOBTAGE_DIR = '/var/tmp/autotua/jobtage' # Usually exists here (optional bind mounting) PORTAGE_DIR = '/usr/portage' @@ -33,7 +32,8 @@ PORTAGE_DIR = '/usr/portage' # Let's define a couple of jobs for now. # We'll get them from the server later :P job_list = [ - { + { + 'maintainer': 'bheekling', 'name': 'Test libbeagle', 'stage': 'gentoo://stage3', 'arch': 'i686', @@ -45,6 +45,7 @@ job_list = [ 'jobuilds': ['bheekling/test-beagle', 'bheekling/test-libbeagle', 'bheekling/build-brasero'], }, { + 'maintainer': 'bheekling', 'name': 'wreak havoc', 'stage': 'gentoo://stage3', 'arch': 'mips4', @@ -54,6 +55,7 @@ job_list = [ 'jobuilds': ['bonsaikitten/i-likez-kittah'], }, { + 'maintainer': 'bheekling', 'name': 'fork it', 'stage': 'gentoo://stage3', 'arch': 'x86', @@ -63,6 +65,7 @@ job_list = [ 'jobuilds': ['bonsaikitten/i-likez-kittah'], }, { + 'maintainer': 'bheekling', 'name': 'why?', 'stage': 'ftp://navya.junta.iitk.ac.in/gentoo/releases/x86/2007.0/stages/stage3-x86-2007.0.tar.bz2', 'jobtagerev': '1', diff --git a/slave/autotua/sync/__init__.py b/slave/autotua/sync/__init__.py index b478b82..85b6a4d 100644 --- a/slave/autotua/sync/__init__.py +++ b/slave/autotua/sync/__init__.py @@ -15,7 +15,7 @@ class Syncer(object): Sync stuff """ - def __init__(self, uri=const.JOBTAGE_URI, rev='last:1', destdir=const.MAIN_JOBTAGE_DIR, scheme='bzr'): + def __init__(self, uri=const.JOBTAGE_URI, rev='last:1', destdir=const.JOBTAGE_DIR, scheme='bzr'): """ Default is to sync the jobtage tree from the default location. @@ -42,15 +42,19 @@ class Syncer(object): def sync(self): """ - Sync. Returns None if unsuccessful, returns True otherwise. + Sync. self.destdir must not exist if init-ing + Returns None if unsuccessful, returns True otherwise. """ init_command = '' sync_command = '' if self.scheme == 'bzr': init_command = 'bzr branch -r"%s" "%s" "%s"' % (self.rev, self.uri, self.destdir) - sync_command = 'bzr pull --overwrite -r"%s" "%s" -d "%s"' % (self.rev, self.uri, self.destdir) + sync_command = 'bzr pull --overwrite -r"%s" -d "%s" "%s"' % (self.rev, self.destdir, self.uri) + elif self.scheme == 'bzr-export': + init_command = 'bzr export -r"%s" "%s" "%s"' % (self.rev, self.destdir, self.uri) + sync_command = 'rm -rf \"%s\" && %s' % (self.destdir, init_command) elif self.scheme == 'rsync': - init_command = 'rsync -avz --delete "%s" "%s"' % (self.uri+'/', self.destdir) + init_command = 'rsync -avz --delete "%s" "%s"' % (self.uri, self.destdir) sync_command = init_command else: print "Unknown scheme: %s" % self.scheme @@ -59,8 +63,13 @@ class Syncer(object): if osp.exists(self.destdir): if not osp.isdir(self.destdir): return None + print 'Syncing...'+sync_command result = os.system(sync_command) else: + if not osp.exists(osp.dirname(self.destdir)): + # Create parents + os.makedirs(osp.dirname(self.destdir)) + print 'Initing...'+init_command result = os.system(init_command) if not result == 0: diff --git a/slave/test_modules.py b/slave/test_modules.py index e04ea69..270d299 100755 --- a/slave/test_modules.py +++ b/slave/test_modules.py @@ -21,8 +21,8 @@ if 'fetch' in modules: print "fetch Fail!" if 'sync' in modules: - jobtdir = tmpdir+'/jobtage' - syncer = autotua.sync.Syncer(jobtdir=jobtdir) + destdir = tmpdir+'/jobtage' + syncer = autotua.sync.Syncer(destdir=destdir) result = syncer.sync() if not result: print "sync Fail!" |