def create(self, name=None, version='master', integration=False, useCacheAsRemote=False): """Creates a new instance of Moodle. The parameter useCacheAsRemote has been deprecated. """ if name == None: name = self.generateInstanceName(version, integration=integration) installDir = os.path.join(self.path, name) wwwDir = os.path.join(installDir, self.wwwDir) dataDir = os.path.join(installDir, self.dataDir) linkDir = os.path.join(self.www, name) if self.isMoodle(name): raise CreateException('The Moodle instance %s already exists' % name) elif os.path.isdir(installDir): raise CreateException('Installation path exists: %s' % installDir) self.checkCachedClones(not integration, integration) self.updateCachedClones(stable=not integration, integration=integration, verbose=False) mkdir(installDir, 0755) mkdir(wwwDir, 0755) mkdir(dataDir, 0777) repository = self.getCachedRemote(integration) # Clone the instances logging.info('Cloning repository...') process('%s clone %s %s' % (C.get('git'), repository, wwwDir)) # Symbolic link if os.path.islink(linkDir): os.remove(linkDir) if os.path.isfile(linkDir) or os.path.isdir(linkDir): # No elif! logging.warning('Could not create symbolic link. Please manually create: ln -s %s %s' % (wwwDir, linkDir)) else: os.symlink(wwwDir, linkDir) # Symlink to dataDir in wwwDir if type(C.get('symlinkToData')) == str: linkDataDir = os.path.join(wwwDir, C.get('symlinkToData')) if not os.path.isfile(linkDataDir) and not os.path.isdir(linkDataDir) and not os.path.islink(linkDataDir): os.symlink(dataDir, linkDataDir) logging.info('Checking out branch...') repo = git.Git(wwwDir, C.get('git')) # Removing the default remote origin coming from the clone repo.delRemote('origin') # Setting up the correct remote names repo.setRemote(C.get('myRemote'), C.get('remotes.mine')) repo.setRemote(C.get('upstreamRemote'), repository) # Creating, fetch, pulling branches repo.fetch(C.get('upstreamRemote')) branch = stableBranch(version) track = '%s/%s' % (C.get('upstreamRemote'), branch) if not repo.hasBranch(branch) and not repo.createBranch(branch, track): logging.error('Could not create branch %s tracking %s' % (branch, track)) else: repo.checkout(branch) repo.pull(remote=C.get('upstreamRemote')) # Fixing up remote URLs if need be, this is done after pulling the cache one because we # do not want to contact the real origin server from here, it is slow and pointless. if not C.get('useCacheAsUpstreamRemote'): realupstream = C.get('remotes.integration') if integration else C.get('remotes.stable') if realupstream: repo.setRemote(C.get('upstreamRemote'), realupstream) M = self.get(name) return M
def create(self, name=None, version='master', integration=False, useCacheAsRemote=False): """Creates a new instance of Moodle. The parameter useCacheAsRemote has been deprecated. """ if name == None: name = self.generateInstanceName(version, integration=integration) installDir = os.path.join(self.path, name) wwwDir = os.path.join(installDir, self.wwwDir) dataDir = os.path.join(installDir, self.dataDir) linkDir = os.path.join(self.www, name) if self.isMoodle(name): raise CreateException('The Moodle instance %s already exists' % name) elif os.path.isdir(installDir): raise CreateException('Installation path exists: %s' % installDir) self.checkCachedClones(not integration, integration) self.updateCachedClones(stable=not integration, integration=integration, verbose=False) os.mkdir(installDir, 0755) os.mkdir(wwwDir, 0755) os.mkdir(dataDir, 0777) if integration: repository = os.path.join(self.cache, 'integration.git') else: repository = os.path.join(self.cache, 'moodle.git') # Clone the instances logging.info('Cloning repository...') process('%s clone %s %s' % (C.get('git'), repository, wwwDir)) # Symbolic link if os.path.islink(linkDir): os.remove(linkDir) if os.path.isfile(linkDir) or os.path.isdir(linkDir): # No elif! logging.warning('Could not create symbolic link. Please manually create: ln -s %s %s' (wwwDir, linkDir)) else: os.symlink(wwwDir, linkDir) # Symlink to dataDir in wwwDir if type(C.get('symlinkToData')) == str: linkDataDir = os.path.join(wwwDir, C.get('symlinkToData')) if not os.path.isfile(linkDataDir) and not os.path.isdir(linkDataDir) and not os.path.islink(linkDataDir): os.symlink(dataDir, linkDataDir) logging.info('Checking out branch...') repo = git.Git(wwwDir, C.get('git')) # Setting up the correct remote names repo.setRemote(C.get('myRemote'), C.get('remotes.mine')) repo.setRemote(C.get('upstreamRemote'), repository) # Creating, fetch, pulling branches repo.fetch(C.get('upstreamRemote')) branch = stableBranch(version) track = '%s/%s' % (C.get('upstreamRemote'), branch) if not repo.hasBranch(branch) and not repo.createBranch(branch, track): logging.error('Could not create branch %s tracking %s' % (branch, track)) else: repo.checkout(branch) repo.pull(remote=C.get('upstreamRemote')) M = self.get(name) return M