Add submodules to the superrepo if a package has never been built 0.1.12
authorQuentin Smith <quentin@mit.edu>
Sat, 15 Oct 2011 22:12:35 +0000 (18:12 -0400)
committerQuentin Smith <quentin@mit.edu>
Sat, 15 Oct 2011 22:24:35 +0000 (18:24 -0400)
before

debian/changelog
invirtibuilder
python/invirt/builder.py

index a07f957..9cca0a8 100644 (file)
@@ -1,3 +1,11 @@
+invirt-dev (0.1.12) unstable; urgency=low
+
+  * Add submodules to the superrepo if a package has never been built
+    before
+  * Bug fixes for multi-distro support
+
+ -- Quentin Smith <quentin@mit.edu>  Sat, 15 Oct 2011 18:24:28 -0400
+
 invirt-dev (0.1.11) unstable; urgency=low
 
   * Add a prefix to binary package versions based on the distribution they
index b4487b9..3df3539 100755 (executable)
@@ -218,16 +218,37 @@ def updateSuperproject(pocket, package, commit, principal, version, env):
     tree = logAndRun(['git', 'ls-tree', branch],
                      cwd=superproject).strip()
 
-    new_tree = re.compile(
-        r'^(160000 commit )[0-9a-f]*(\t%s)$' % package, re.M).sub(
-        r'\g<1>%s\g<2>' % commit,
-        tree)
+    tree_items = dict(k, v for v, k in (x.split("\t" for x in tree.split("\n"))))
+
+    created = not (package in tree_items)
+
+    tree_items[package] = "160000 commit "+commit
+
+    # If "created" is true, we need to check if the package is
+    # mentioned in .gitmodules, and add it if not.
+    if created:
+        gitmodules = c.captureOutput(['git', 'cat-file', 'blob', '%s:.gitmodules' % (branch)],
+                                     cwd=superproject)
+        if ('[submodule "%s"]' % (package)) not in gitmodules.split("\n"):
+            gitmodules += """[submodule "%s"]
+\tpath = %s
+\turl = ../packages/%s.git
+""" % (package, package, package)
+            gitmodules_hash = c.captureOutput(['git', 'hash-object', '-w', '--stdin'],
+                                              cwd=superproject).strip()
+            tree_items[package] = "100644 blob "+gitmodules_hash
+
+    new_tree = "\n".join("%s\t%s" % (v, k) for (k, v) in tree_items.iteritems())
 
     new_tree_id = logAndRun(['git', 'mktree', '--missing'],
                             cwd=superproject,
                             stdin_str=new_tree).strip()
 
-    commit_msg = ('Update %s to version %s\n\n'
+    if created:
+        commit_msg = 'Add %s at version %s'
+    else:
+        commit_msg = 'Update %s to version %s'
+    commit_msg = (commit_msg + '\n\n'
                   'Requested by %s' % (package,
                                        version.full_version,
                                        principal))
@@ -365,7 +386,7 @@ def build():
                               cwd=packagedir)
 
                     db.failed_stage = 'building binary packages'
-                    sbuildAll(package, commit, workdir)
+                    sbuildAll(package, commit, b.pocketToDistro(pocket), workdir)
                     db.failed_stage = 'tagging submodule'
                     tagSubmodule(pocket, package, commit, principal, version, env)
                     db.failed_stage = 'updating submodule branches'
index 1a736bd..f864feb 100644 (file)
@@ -153,7 +153,7 @@ def validateBuild(pocket, package, commit):
             continue
 
         current_version = getVersion(package, b)
-        current_distro = pocketToDistro(pocket)
+        current_distro = pocketToDistro(p)
 
         # NB: Neither current_version nor new_version will have the
         # distro-specific prefix.