source: PSPA/madxPSPA/testing/MadTrigTest.py @ 478

Last change on this file since 478 was 430, checked in by touze, 11 years ago

import madx-5.01.00

File size: 4.0 KB
Line 
1#!/usr/bin/python
2
3import os
4import re
5
6import Notify
7
8global representative
9representative = "madxd.h"
10
11def byDecreasingReleaseNumber(a,b): # passed to the Python sort list function
12    aNumbers = a.split('_')
13    bNumbers = b.split('_')
14    counter = 0
15    result = 0
16    for aNumber in aNumbers:
17        if int(aNumber) < int(bNumbers[counter]):
18            result = 1
19            return result
20        if int(aNumber) > int(bNumbers[counter]):
21            result = -1
22            return result
23        counter += 1
24   
25    return result
26
27class MadTestTrigger:
28   
29    def __init__(self):
30        self.whatToDo = "don't know"
31        self.release = "don't know"
32        self.debugMode = False
33
34    def setDebugMode(self,mode):
35        self.debugMode=mode
36
37    def getWhatToDo(self):
38        return self.whatToDo
39
40    def getRelease(self):
41        return self.release
42
43    def run(self,rootDir):
44        extractDir = self.extractCVS(rootDir)
45        [ releases, tests ]= self.collectReleases(extractDir)
46        # sort releases and tests by increasing numbers
47       
48        releases.sort(byDecreasingReleaseNumber) # in place sorting, with supplied comparison function
49        tests.sort(byDecreasingReleaseNumber)
50
51        # debug:
52        #for release in releases:
53        #    print "release " + release
54
55        lastRelease = releases[0]
56        beforeLastRelease = releases[1]
57
58        lastTest = tests[0]
59
60#        print "lastTest="+lastTest
61        # completion
62        self.release = "madX-"+lastRelease
63        if lastTest == lastRelease:
64            self.whatToDo = "do-nothing"
65        else:
66            # SHOULD TAG THE CVS HERE (if mode != debug)
67            # should also record work
68            global representative
69            newTestTag = "test-"+lastRelease
70            command = "cvs tag " + newTestTag + " " + representative
71            if not self.debugMode:
72                os.system(command)
73            else:
74                print "skip command '"+command+"' in debug-mode"
75            self.whatToDo = "run-test"
76       
77    def extractCVS(self,rootDir):
78        # do we need to check-out or could we rely on FesaBuild.pl instead?
79        cvsRootDir = ":gserver:isscvs.cern.ch:/local/reps/madx"
80        command = "cvs -d "+cvsRootDir+" checkout madX"
81        os.chdir(rootDir)
82        extractDir = "MadCvsExtract_trig_test"
83        try:
84            os.mkdir(extractDir)
85        except OSError:
86#            print "OS error (should be instance errno 17)"
87            os.system('rm -rf ./'+extractDir) # dangerous
88            os.mkdir(extractDir)
89        os.chdir(extractDir)
90        os.system(command)
91        os.chdir('./madX')
92        theDir = os.getcwd()
93        return theDir
94
95    def collectReleases(self,extractDir):
96
97        releases = []
98        tests = []
99
100        releaseRevision = {}
101        testRevision = {}
102       
103        os.chdir(extractDir)
104        global representative
105        log = os.system('cvs log '+representative+' > tempfile')
106        tempfile = open('tempfile','r')
107        lines = tempfile.readlines()
108
109        for line in lines:
110
111            pattern = re.compile(r'^[\s\t]*madX\-(\d+)_(\d+)_(\d+)[\s\t]*:[\s\t]*([\d\.]+)[\s\t]*$')
112            m = pattern.match(line)
113            if m:
114                release = m.group(1)+"_"+m.group(2)+"_"+m.group(3)
115                releaseRevision[release] = m.group(4)
116                releases.append(release)
117               
118            patternTest = re.compile(r'^[\s\t]*test\-(\d+)_(\d+)_(\d+)[\s\t]*:[\s\t]*([\d\.]+)[\s\t]*$')
119            m = patternTest.match(line)
120            if m:
121                test = m.group(1)+"_"+m.group(2)+"_"+m.group(3)
122                testRevision[test] = m.group(4)
123                tests.append(test)
124
125        return [ releases, tests ]
126       
127
128
129if __name__ == "__main__":
130    print("test program")
131    testTrigger = MadTestTrigger()
132    testTrigger.setDebugMode(True)
133    testTrigger.run("./") # local directory
134    what = testTrigger.getWhatToDo()
135    release = testTrigger.getRelease()
136    print("for release "+release+", "+what)
Note: See TracBrowser for help on using the repository browser.