gatk-3.8/python/updateTribbleToCorrectSVNVe...

74 lines
3.4 KiB
Python

# ====================================================================================================
# update the tribble code to the appropriate version, given the current GATK version.
# this python script looks up the base version of the GATK, checks the date, and cross-references this
# against the Tribble version.
# ====================================================================================================
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]