浏览代码

Added rm param to builds, fixed repo cache, added history support (don't rebuild previously built versions)

shin- 11 年之前
父节点
当前提交
fe9ffac332
共有 2 个文件被更改,包括 12 次插入3 次删除
  1. 2 0
      stackbrew/app.py
  2. 10 3
      stackbrew/brew/v2.py

+ 2 - 0
stackbrew/app.py

@@ -15,6 +15,7 @@ config = None
 with open('./config.json') as config_file:
 with open('./config.json') as config_file:
     config = json.load(config_file)
     config = json.load(config_file)
 data = db.DbManager(config['db_url'], debug=config['debug'])
 data = db.DbManager(config['db_url'], debug=config['debug'])
+history = {}
 brew.logger = app.logger
 brew.logger = app.logger
 brew.set_loglevel('DEBUG' if config['debug'] else 'INFO')
 brew.set_loglevel('DEBUG' if config['debug'] else 'INFO')
 
 
@@ -58,6 +59,7 @@ def build_task():
         repo_cache=config['repos_folder']
         repo_cache=config['repos_folder']
     )
     )
     builder.build_repo_list()
     builder.build_repo_list()
+    builder.history = history
     builder.build_all(callback=summary.handle_build_result)
     builder.build_all(callback=summary.handle_build_result)
     if config['push']:
     if config['push']:
         builder.push_all()
         builder.push_all()

+ 10 - 3
stackbrew/brew/v2.py

@@ -136,6 +136,7 @@ class StackbrewBuilder(object):
         self.namespaces = namespaces or ['stackbrew']
         self.namespaces = namespaces or ['stackbrew']
         self.targetlist = targetlist
         self.targetlist = targetlist
         self.repo_cache = repo_cache
         self.repo_cache = repo_cache
+        self.history = {}
 
 
     def build_repo_list(self):
     def build_repo_list(self):
         self.repos = []
         self.repos = []
@@ -175,6 +176,8 @@ class StackbrewBuilder(object):
                 e.log(logger)
                 e.log(logger)
 
 
     def build_version(self, repo, version, callback=None):
     def build_version(self, repo, version, callback=None):
+        if version in self.history:
+            return self.history[version], None
         url, ref, dfile = version
         url, ref, dfile = version
         try:
         try:
             rep, dst_folder = self.clone_version(repo, version)
             rep, dst_folder = self.clone_version(repo, version)
@@ -188,7 +191,11 @@ class StackbrewBuilder(object):
             if callback:
             if callback:
                 callback(exc, repo, version, None, None)
                 callback(exc, repo, version, None, None)
             raise exc
             raise exc
-        return self.do_build(repo, version, dockerfile_location, callback)
+        img_id, build_result = self.do_build(
+            repo, version, dockerfile_location, callback
+        )
+        self.history[version] = img_id
+        return img_id, build_result
 
 
     def do_build(self, repo, version, dockerfile_location, callback=None):
     def do_build(self, repo, version, dockerfile_location, callback=None):
         raise NotImplementedError
         raise NotImplementedError
@@ -212,7 +219,7 @@ class StackbrewBuilder(object):
         rep, dst_folder = repo.get_git_repo(url)
         rep, dst_folder = repo.get_git_repo(url)
         if not dst_folder and self.repo_cache:
         if not dst_folder and self.repo_cache:
             dst_folder = os.path.join(
             dst_folder = os.path.join(
-                self.lib.library, repo.name + _random_suffix()
+                self.repo_cache, repo.name + _random_suffix()
             )
             )
             os.mkdir(dst_folder)
             os.mkdir(dst_folder)
         try:
         try:
@@ -258,7 +265,7 @@ class LocalBuilder(StackbrewBuilder):
         logger.info(
         logger.info(
             'Build start: {0} {1}'.format(repo.name, version)
             'Build start: {0} {1}'.format(repo.name, version)
         )
         )
-        build_result = self.client.build(path=dockerfile_location,
+        build_result = self.client.build(path=dockerfile_location, rm=True,
                                          stream=True, quiet=True)
                                          stream=True, quiet=True)
         img_id = self._parse_result(build_result)
         img_id = self._parse_result(build_result)
         if not img_id:
         if not img_id: