changeset 282:108678a341ca

use GDBM based buildnumber DB.
author hanwen <hanwen@xs4all.nl>
date Sun, 18 Dec 2005 16:34:02 +0100
parents 4b292049ab86
children 778386e26304
files driver.py specs/buildnumber.py specs/gub.py
diffstat 3 files changed, 40 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/driver.py	Sun Dec 18 16:33:29 2005 +0100
+++ b/driver.py	Sun Dec 18 16:34:02 2005 +0100
@@ -133,7 +133,8 @@
 				settings.build_number_db.write_build_number (package)
 				package.clean ()
 
-			package.set_done (stage, stages.index (stage))
+			if stage <> 'clean':
+				package.set_done (stage, stages.index (stage))
 
 
 def get_settings (platform):
@@ -336,8 +337,12 @@
 	map (target_manager.register_package, target_packages) 
 	map (tool_manager.register_package, tool_packages) 
 
+	settings.build_number_db = buildnumber.Build_number_db (settings.topdir)
 	tool_manager.resolve_dependencies ()
 	target_manager.resolve_dependencies ()
+
+	for p in tool_packages + target_packages:
+		settings.build_number_db.set_build_number (p)
 	
 	c = commands.pop (0)
 
--- a/specs/buildnumber.py	Sun Dec 18 16:33:29 2005 +0100
+++ b/specs/buildnumber.py	Sun Dec 18 16:34:02 2005 +0100
@@ -1,32 +1,36 @@
+import string
 import os
-import pickle
+import pickle 
+import gdbm
+import gub
+
+class Build_number_db:
+	def __init__ (self, dir):
+		self.db = gdbm.open (dir + '/buildnumber.gdbm', 'cs')
+
+	def key (self, package):
+		return package.expand_string ('%(name)s-%(version)s-%(target_architecture)s')
 
-BUILD_PICKLE = '/build-number.pickle'
-def get_build_db (build_db_name):
-	if not os.path.exists (build_db_name):
-		pickle.dump({},open (build_db_name,'w'))
+	def set_build_number (self, package):
+		package._build = self.get_build_number (package)
 		
-	db = pickle.load (open (build_db_name)) 
-	return db
+	def get_build_number (self, package):
+		k = self.key (package)
+		if not self.db.has_key (k):
+			return 1
 
-def get_build_number (pkg):
-	db = get_build_db(pkg.settings.topdir + BUILD_PICKLE)
+		bn = self.db[k]
+
+		gubname ='%(gub_uploads)s/%(name)s-%(version)s-%(bn)s.%(platform)s.gub'
+		gubname = package.expand_string (gubname, locals ())
 	
-	if not db.has_key (pkg.name ()):
-		return 1
+		if os.path.exists (gubname):
+			return string.atoi (bn)
+		else:
+			return string.atoi (bn) + 1
 
-	bn = db[pkg.name ()]
-	
-	gubname ='%(gub_uploads)s/%(name)s-%(version)s-%(bn)s.%(target_architecture)s.gub'
-	gubname = pkg.expand_string (gubname, locals ())
-	
-	if os.path.exists (gubname):
-		return bn
-	else:
-		return bn + 1
-
-def write_build_number (pkg):
-	db = get_build_db(pkg.settings.topdir + BUILD_PICKLE)
-	db[pkg.name ()] = pkg.build ()
-	pickle.dump (db, open (build_db_name, 'w'))
-
+	def write_build_number (self, pkg):
+		b = pkg.build ()
+		gub.log_command ("Writing build number: %s" % b)
+		self.db[self.key (pkg)] = b
+		
--- a/specs/gub.py	Sun Dec 18 16:33:29 2005 +0100
+++ b/specs/gub.py	Sun Dec 18 16:34:02 2005 +0100
@@ -117,8 +117,8 @@
 		self.settings = settings
 		self.url = ''
 		self.download = self.wget
-		self._build = buildnumber.get_build_number (self)
-		
+		self._build = 0
+
 	def package_dict (self, env={}):
 		dict = self.settings.get_substitution_dict ()
 		for (k, v) in self.__dict__.items():
@@ -365,8 +365,6 @@
 ''')
 
 	def clean (self):
-		buildnumber.write_build_number (self)
-		
 		stamp = self.stamp_file ()
 		self.system ('''echo rm -rf %(srcdir)s %(builddir)s %(install_root)s %(stamp)s
 ''', locals ())
@@ -415,7 +413,8 @@
 --with-sysroot=%(system_root)s/
 ''')
 
-        def gub_name (self):
+        def xgub_name (self):
+			## makes build number handling more complicated.
 		return '%(name)s-%(version)s-%(build)s.%(build_architecture)s-%(target_architecture)s.gub'
 
 	def install_command (self):