2010-09-29 13:01:46 +08:00
|
|
|
# ====================================================================================================
|
2010-09-29 13:02:41 +08:00
|
|
|
# update the tribble code to the appropriate version, given the current GATK version.
|
2010-09-29 13:01:46 +08:00
|
|
|
# this python script looks up the base version of the GATK, checks the date, and cross-references this
|
2010-09-29 13:02:41 +08:00
|
|
|
# against the Tribble version.
|
2010-09-29 13:01:46 +08:00
|
|
|
# ====================================================================================================
|
|
|
|
|
|
|
|
|
|
import os, subprocess, re
|
|
|
|
|
from subprocess import Popen, PIPE, STDOUT
|
|
|
|
|
from datetime import datetime, date, time
|
|
|
|
|
|
|
|
|
|
# test that we can use the SVN tool
|
|
|
|
|
print "checking that we can use svn and svnversion commands..."
|
|
|
|
|
outputSVN = Popen(["svn", "--version"], stdout=PIPE).communicate()[0]
|
|
|
|
|
outputSVNVersion = Popen(["svnversion", "--version"], stdout=PIPE).communicate()[0]
|
|
|
|
|
|
|
|
|
|
# match the regex
|
|
|
|
|
m = re.search('version\s+(\d+\.\d+\.\d+)',outputSVN)
|
|
|
|
|
m2 = re.search('version\s+(\d+\.\d+\.\d+)',outputSVNVersion)
|
|
|
|
|
|
|
|
|
|
if ((not m) or (not m2)):
|
|
|
|
|
raise Exception("Unable to find svn and svnversion commands")
|
|
|
|
|
|
|
|
|
|
if (m.group(1) != m.group(1)):
|
|
|
|
|
raise Exception('Unable to match versions for svn (version ' + m.group(1) + ') and svnversion (version ' + m2.group(1) + ') commands')
|
|
|
|
|
|
|
|
|
|
# check that we're in the base GATK directory
|
|
|
|
|
outputSVN = Popen(["svn","info"], stdout=PIPE).communicate()[0]
|
|
|
|
|
m = re.search('URL:\s+(.+)\s+',outputSVN)
|
|
|
|
|
|
|
|
|
|
print "checking that we're in the base directory of a SVN check-out of the GATK..."
|
|
|
|
|
if (not m):
|
|
|
|
|
raise Exception("Unable to find current working URL for this directory in SVN; make sure your in the base GATK directory when running this script")
|
|
|
|
|
if (m.group(1) != "https://svn/Sting/trunk"):
|
|
|
|
|
raise Exception("Not in the correct working directory; we expect to be in a directory pointing to the URL https://svn/Sting/trunk")
|
|
|
|
|
|
|
|
|
|
# now get the version and date for the GATK checkout
|
|
|
|
|
print "getting the GATK check-out version and date..."
|
|
|
|
|
dateMatch = re.search('Last Changed Date:\s+(\S+)\s+(\S+)\s+',outputSVN)
|
|
|
|
|
versionMatch = re.search('Last Changed Rev:\s+(.+)\s+(.+)\s+',outputSVN)
|
|
|
|
|
if ((not dateMatch) or (not versionMatch)):
|
|
|
|
|
raise Exception("Unable to match either the version or the check-out date from the svn -info output: " + outputSVN)
|
|
|
|
|
|
|
|
|
|
dt = datetime.strptime(dateMatch.group(1)+" "+dateMatch.group(2), "%Y-%m-%d %H:%M:%S")
|
|
|
|
|
print " The date of the current GATK check-out is = " + dt.strftime("%A, %d. %B %Y %I:%M%p")
|
|
|
|
|
|
|
|
|
|
# now look through the tribble logs for the last version before the current GATK date
|
|
|
|
|
# the log entries look like: r213 | hanna | 2010-09-22 11:28:16 -0400 (Wed, 22 Sep 2010) | 2 lines
|
|
|
|
|
outputSVN = Popen(["svn","log","--quiet","tribble"], stdout=PIPE).communicate()[0]
|
|
|
|
|
m = re.findall("r(\d+)\s\|\s\S+\s\|\s(\S+\s\S+)",outputSVN)
|
|
|
|
|
diff = None
|
|
|
|
|
bestRev = 0
|
|
|
|
|
for match in m:
|
|
|
|
|
rev = match
|
|
|
|
|
tribbleDate = datetime.strptime(match[1] , "%Y-%m-%d %H:%M:%S")
|
|
|
|
|
# print tribbleDate.strftime("%A, %d. %B %Y %I:%M%p")
|
|
|
|
|
if (dt > tribbleDate):
|
|
|
|
|
if (diff == None):
|
|
|
|
|
diff = dt - tribbleDate
|
|
|
|
|
bestRev = match[0]
|
|
|
|
|
elif (dt - tribbleDate < diff):
|
|
|
|
|
diff = dt - tribbleDate
|
|
|
|
|
bestRev = match[0]
|
|
|
|
|
|
|
|
|
|
if (bestRev == 0):
|
|
|
|
|
raise Exception("Unable to find correct revision that predates the current GATK checkout...failing")
|
|
|
|
|
|
|
|
|
|
# now update the tribble directory to the found revision
|
|
|
|
|
print "attempting to update Tribble to the correct version of r" + bestRev
|
|
|
|
|
print ""
|
|
|
|
|
print "SVN update output:"
|
|
|
|
|
print Popen(["svn","update","-r","r"+str(bestRev),"tribble"], stdout=PIPE).communicate()[0]
|
|
|
|
|
|
|
|
|
|
|