mirror of https://github.com/berriedale/ae
Add basic support for file-based schematics
This commit is contained in:
parent
3d156e48bf
commit
6e2f3dcdb6
75
bin/ae
75
bin/ae
|
@ -25,7 +25,7 @@ def read_pipe(name, pipe):
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
|
||||||
class SchematicHandler:
|
class SchematicHandler(object):
|
||||||
def __init__(self, schematic):
|
def __init__(self, schematic):
|
||||||
self.schematic = schematic
|
self.schematic = schematic
|
||||||
self.name = schematic['name']
|
self.name = schematic['name']
|
||||||
|
@ -35,25 +35,6 @@ class SchematicHandler:
|
||||||
os.mkdir(CACHE_DIR)
|
os.mkdir(CACHE_DIR)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def checkout(self):
|
|
||||||
print '>> checkout'
|
|
||||||
url = self.schematic['source']['url']
|
|
||||||
branch = self.schematic['source']['ref'] or 'master'
|
|
||||||
repos_dir = os.path.join(CACHE_DIR, 'repos')
|
|
||||||
self.checkout_dir = os.path.join(repos_dir, self.name)
|
|
||||||
|
|
||||||
if not os.path.isdir(repos_dir):
|
|
||||||
os.mkdir(repos_dir)
|
|
||||||
|
|
||||||
if not os.path.isdir(self.checkout_dir):
|
|
||||||
command = "git clone --depth 1 %s %s" % (url, self.checkout_dir)
|
|
||||||
else:
|
|
||||||
command = "cd %s && git fetch" % (self.checkout_dir)
|
|
||||||
|
|
||||||
read_pipe(self.name, os.popen(command))
|
|
||||||
read_pipe(self.name, os.popen("cd %s && git checkout origin/%s" % (self.checkout_dir, branch)))
|
|
||||||
return self
|
|
||||||
|
|
||||||
def prepare(self):
|
def prepare(self):
|
||||||
print '>> prepare'
|
print '>> prepare'
|
||||||
steps = self.schematic['prepare'] or []
|
steps = self.schematic['prepare'] or []
|
||||||
|
@ -78,6 +59,47 @@ class SchematicHandler:
|
||||||
os.popen("cd %s && %s" % (self.checkout_dir, s)))
|
os.popen("cd %s && %s" % (self.checkout_dir, s)))
|
||||||
|
|
||||||
|
|
||||||
|
class GitSchematicHandler(SchematicHandler):
|
||||||
|
def checkout(self):
|
||||||
|
print '>> checkout'
|
||||||
|
url = self.schematic['source']['url']
|
||||||
|
branch = self.schematic['source']['ref'] or 'master'
|
||||||
|
repos_dir = os.path.join(CACHE_DIR, 'repos')
|
||||||
|
self.checkout_dir = os.path.join(repos_dir, self.name)
|
||||||
|
|
||||||
|
if not os.path.isdir(repos_dir):
|
||||||
|
os.mkdir(repos_dir)
|
||||||
|
|
||||||
|
if not os.path.isdir(self.checkout_dir):
|
||||||
|
command = "git clone --depth 1 %s %s" % (url, self.checkout_dir)
|
||||||
|
else:
|
||||||
|
command = "cd %s && git fetch" % (self.checkout_dir)
|
||||||
|
|
||||||
|
read_pipe(self.name, os.popen(command))
|
||||||
|
read_pipe(self.name, os.popen("cd %s && git checkout origin/%s" % (self.checkout_dir, branch)))
|
||||||
|
return self
|
||||||
|
|
||||||
|
class FileSchematicHandler(SchematicHandler):
|
||||||
|
def checkout(self):
|
||||||
|
print '>> checkout'
|
||||||
|
url = self.schematic['source']['url']
|
||||||
|
repos_dir = os.path.join(CACHE_DIR, 'repos')
|
||||||
|
self.checkout_dir = os.path.join(repos_dir, self.name)
|
||||||
|
|
||||||
|
versions = self.schematic['source']['versions']
|
||||||
|
filename = versions[0]['filename']
|
||||||
|
url = versions[0]['url']
|
||||||
|
|
||||||
|
if not os.path.isdir(repos_dir):
|
||||||
|
os.mkdir(repos_dir)
|
||||||
|
|
||||||
|
if not os.path.isdir(self.checkout_dir):
|
||||||
|
if not os.path.isfile(os.path.join(repos_dir, filename)):
|
||||||
|
read_pipe(self.name, os.popen('cd %s && curl -s %s > %s' % (repos_dir, url, filename)))
|
||||||
|
command = 'cd %s && mkdir %s && tar -C %s --strip-components 1 -zxvf %s' % (repos_dir, self.name, self.name, filename)
|
||||||
|
read_pipe(self.name, os.popen(command))
|
||||||
|
return self
|
||||||
|
|
||||||
def traverse_schematic_graph(graph, key=None):
|
def traverse_schematic_graph(graph, key=None):
|
||||||
if not key:
|
if not key:
|
||||||
install = []
|
install = []
|
||||||
|
@ -138,7 +160,6 @@ class GitCatalog(FileCatalog):
|
||||||
self.uri = ''.join(['file://', full_path])
|
self.uri = ''.join(['file://', full_path])
|
||||||
return super(GitCatalog, self).load()
|
return super(GitCatalog, self).load()
|
||||||
|
|
||||||
|
|
||||||
def install():
|
def install():
|
||||||
if not os.path.isfile('schematics.yaml'):
|
if not os.path.isfile('schematics.yaml'):
|
||||||
return 1
|
return 1
|
||||||
|
@ -170,7 +191,11 @@ def install():
|
||||||
if not s:
|
if not s:
|
||||||
print "!!! Could not find schematic for %s !!!" % schematic
|
print "!!! Could not find schematic for %s !!!" % schematic
|
||||||
return 1
|
return 1
|
||||||
todo[schematic] = SchematicHandler(s)
|
todo[schematic] = None
|
||||||
|
if s['source']['scm'] == 'git':
|
||||||
|
todo[schematic] = GitSchematicHandler(s)
|
||||||
|
elif s['source']['scm'] == 'file':
|
||||||
|
todo[schematic] = FileSchematicHandler(s)
|
||||||
depends = s['schematics'] or []
|
depends = s['schematics'] or []
|
||||||
graph[schematic].extend(depends)
|
graph[schematic].extend(depends)
|
||||||
dependencies.extend(depends)
|
dependencies.extend(depends)
|
||||||
|
@ -181,7 +206,11 @@ def install():
|
||||||
if not s:
|
if not s:
|
||||||
print "!!! Could not find schematic for %s !!!" % schematic
|
print "!!! Could not find schematic for %s !!!" % schematic
|
||||||
return 1
|
return 1
|
||||||
todo[schematic] = SchematicHandler(s)
|
todo[schematic] = None
|
||||||
|
if s['source']['scm'] == 'git':
|
||||||
|
todo[schematic] = GitSchematicHandler(s)
|
||||||
|
elif s['source']['scm'] == 'file':
|
||||||
|
todo[schematic] = FileSchematicHandler(s)
|
||||||
depends = s['schematics'] or []
|
depends = s['schematics'] or []
|
||||||
for d in depends:
|
for d in depends:
|
||||||
if not graph.has_key(d):
|
if not graph.has_key(d):
|
||||||
|
|
Loading…
Reference in New Issue