[infinispan-commits] Infinispan SVN: r1200 - trunk/bin.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Mon Nov 16 05:59:12 EST 2009


Author: manik.surtani at jboss.com
Date: 2009-11-16 05:59:12 -0500 (Mon, 16 Nov 2009)
New Revision: 1200

Modified:
   trunk/bin/pythonTools.py
   trunk/bin/release.py
Log:
Improved release script

Modified: trunk/bin/pythonTools.py
===================================================================
--- trunk/bin/pythonTools.py	2009-11-15 12:09:55 UTC (rev 1199)
+++ trunk/bin/pythonTools.py	2009-11-16 10:59:12 UTC (rev 1200)
@@ -2,8 +2,48 @@
 import fnmatch
 import re
 import subprocess
+import sys
 
+settings_file = '%s/.infinispan_dev_settings' % os.getenv('HOME')
 
+### Known config keys
+svn_base_key = "svn_base"
+local_tags_dir_key = "local_tags_dir"
+local_mvn_repo_dir_key = "local_mvn_repo_dir"
+maven_pom_xml_namespace = "http://maven.apache.org/POM/4.0.0"
+
+def get_settings():
+  """Retrieves user-specific settings for all Infinispan tools.  Returns a dict of key/value pairs, or an empty dict if the settings file doesn't exist."""
+  f = None
+  try:
+    settings = {}
+    f = open(settings_file)
+    for l in f:
+      if not l.strip().startswith("#"):
+        kvp = l.split("=")
+        if kvp and len(kvp) > 0 and kvp[0] and len(kvp) > 1:
+          settings[kvp[0].strip()] = kvp[1].strip()
+    return settings
+  except IOError as ioe:
+    return {}
+  finally:
+    if f:
+      f.close()
+
+settings = get_settings()
+
+def require_settings_file():
+  """Tests whether the settings file exists, and if not exits with an error message."""
+  f = None
+  try:
+    f = open(settings_file)
+  except IOError as ioe:
+    print "User-specific environment settings file %s is missing!  Cannot proceed!" % settings_file
+    sys.exit(3)
+  finally:
+    if f:
+      f.close()
+
 def toSet(list):
   """Crappy implementation of creating a Set from a List.  To cope with older Python versions"""
   tempDict = {}

Modified: trunk/bin/release.py
===================================================================
--- trunk/bin/release.py	2009-11-15 12:09:55 UTC (rev 1199)
+++ trunk/bin/release.py	2009-11-16 10:59:12 UTC (rev 1200)
@@ -18,26 +18,8 @@
   
 from pythonTools import *
 
-### Globals
-#  CONFIGURABLE VARIABLES
-
-# Base SVN directory for this release.  There should be a "tags" and "trunk" directory under this.
-svnBase="https://svn.jboss.org/repos/infinispan"
-
-# Where do you locally check out tags?
-localTagsDir="/Users/manik/Code/infinispan/tags"
-
-# Your maven2 repo to deploy built artifacts
-localMvnRepoDir="/Users/manik/Code/maven2/org/infinispan"
-
-################################################################################
-#
-# Helper functions
-#
-################################################################################
-maven_pom_xml_namespace = "http://maven.apache.org/POM/4.0.0"
-
 modules = []
+
 def getModules(directory):
     # look at the pom.xml file
     tree = ElementTree()
@@ -76,7 +58,7 @@
 
 def tagInSubversion(version, newVersion):
   sc = get_svn_conn()
-  sc.tag("%s/trunk" % svnBase, newVersion, version)
+  sc.tag("%s/trunk" % settings[svn_base_key], newVersion, version)
 
 def getProjectVersionTag(tree):
   return tree.find("./{%s}version" % (maven_pom_xml_namespace))
@@ -145,7 +127,7 @@
     shutil.copytree(trunkDir, workingDir)
   else:
     client = get_svn_conn()
-    client.checkout(svnBase + "/tags/" + version, workingDir)
+    client.checkout(settings[svn_base_key] + "/tags/" + version, workingDir)
     
   pomsToPatch = get_poms_to_patch(workingDir)
     
@@ -191,14 +173,14 @@
   return tree.findtext("./{%s}artifactId" % maven_pom_xml_namespace)
 
 def checkInMaven2Repo(version, workingDir):
-  os.chdir(localMvnRepoDir)
+  os.chdir(settings[local_mvn_repo_dir_key])
   client = get_svn_conn()
   poms = [workingDir + "/pom.xml"]
   for m in modules:
     poms.append(workingDir + "/" + m + "/pom.xml")
   moduleNames=[]
   for p in poms:
-    moduleNames.append(localMvnRepoDir + "/" + getModuleName(p) + "/" + version)
+    moduleNames.append(settings[local_mvn_repo_dir_key] + "/" + getModuleName(p) + "/" + version)
   client.add(moduleNames)
   for mn in moduleNames:
     checkInMessage = "Infinispan Release Script: Releasing module " + mn + " version " + version + " to public Maven2 repo"
@@ -208,7 +190,7 @@
   os.mkdir(".tmp")
   os.chdir(".tmp")
   do_not_copy = shutil.ignore_patterns('*.xml', '*.sha1', '*.md5')
-  shutil.copytree("%s/infinispan/%s" % (localMvnRepoDir, version), "%s" % version, ignore = do_not_copy)
+  shutil.copytree("%s/infinispan/%s" % (settings[local_mvn_repo_dir_key], version), "%s" % version, ignore = do_not_copy)
   subprocess.check_call(["scp", "-r", version, "sourceforge_frs:/home/frs/project/i/in/infinispan/infinispan"])
 
 def uploadJavadocs(base_dir, workingDir, version):
@@ -231,6 +213,18 @@
   
 ### This is the starting place for this script.
 def release():
+  require_settings_file()
+  
+  missing_keys = []
+  expected_keys = [svn_base_key, local_tags_dir_key, local_mvn_repo_dir_key]
+  for expected_key in expected_keys:
+    if expected_key not in settings:
+      missing_keys.append(expected_key)
+  
+  if len(missing_keys) > 0:
+    print "Entries %s are missing in configuration file %s!  Cannot proceed!" % (missing_keys, settings_file)
+    sys.exit(2)
+
   # We start by determining whether the version passed in is a valid one
   if len(sys.argv) < 2:
     helpAndExit()
@@ -241,12 +235,12 @@
   
   ## Release order:
   # Step 1: Tag in SVN
-  newVersion = "%s/tags/%s" % (svnBase, version)
+  newVersion = "%s/tags/%s" % (settings[svn_base_key], version)
   print "Step 1: Tagging trunk in SVN as %s" % newVersion    
   tagInSubversion(version, newVersion)
   print "Step 1: Complete"
   
-  workingDir = localTagsDir + "/" + version
+  workingDir = settings[local_tags_dir_key] + "/" + version
     
   # Step 2: Update version in tagged files
   print "Step 2: Updating version number in source files"
@@ -283,4 +277,4 @@
 
 
 if __name__ == "__main__":
-    release()
+  release()



More information about the infinispan-commits mailing list