# This module defines metadata to be used by the batchSVN.py script. # # Copy this module as /class/csse//scripts/batchSVNData.py and # edit it to define the course metadata for . The sample data # in the original file can be used by invoking the batchSVN.py script using # "testing" as the course name argument, e.g.: ./batchSVN.py testing # ---------------------------------------------------------------- import os import sys # ---------------------------------------------------------------- # Hacks the system path so the import of batchSVNTypes works for testing # individual course meta-data on the the server. serverPathToBatchSVN = "/class/csse/resources/Grading" # Change the following line to point to your local checkout of the CSSE # resources trunk if you want to test this file on your local machine: #localMachinePathToBatchSVN = "/Users/cclifton/Documents/Rose/Administrative/resources/Grading" sys.path.append(serverPathToBatchSVN) #sys.path.append(localMachinePathToBatchSVN) from batchSVNTypes import * # ---------------------------------------------------------------- # ---------------------------------------------------------------- # Find out which term we want to use by displaying all the current # folders, each named a different section. # ---------------------------------------------------------------- pathToUse = "/class/csse/csse220/scripts/" fileToNum = {} count = 1 for each in os.listdir(pathToUse): inPath = os.path.join(pathToUse, each) if os.path.isdir(inPath) and each.startswith("2") and len(each.strip()) == 6: fileToNum[count] = each count += 1 if count > 1: #This means that there is at least one folder to use... print "For the following, choose the number that corresponds to the term you wish to use: " for k in fileToNum.iterkeys(): print k, " for ", fileToNum[k] outputString = "Please enter your choice (1-" + str(count-1) + "): " done = False while not done: num = raw_input(outputString) if not num.isdigit() or int(num) < 1 or int(num) >= count: print "Incorrect input value choice! Must be (1-" + str(count-1) + "): " else: done = True #end while userChoice = fileToNum[int(num)] print "You chose " + userChoice # ---------------------------------------------------------------- # Local variables # ---------------------------------------------------------------- repoNamePrefix = 'csse220-' + userChoice + '-' else: repoNamePrefix = 'csse220-201520-' #end else/if # replace the following with a description of the course, like 'CSSE 120' courseDescription = 'CSSE 220 - Object-Oriented Software Dev.' # ---------------------------------------------------------------- # Defines repositories sets for this course. Used by main script. # ---------------------------------------------------------------- if count > 1: fileToNum = {} countLoc = 1 found = False prefName = "userlist.txt" curTempPath = '/class/csse/csse220/scripts/' + userChoice + '/' for each in os.listdir(curTempPath): inPath = os.path.join(curTempPath, each) if os.path.isfile(inPath) and str(each) == prefName: found = True elif os.path.isfile(inPath) and str(each).endswith(".txt"): fileToNum[countLoc] = each countLoc += 1 #end for if not found: print "For the following, choose the number that corresponds to the file you wish to use: " for k in fileToNum.iterkeys(): print k, " for ", fileToNum[k] outputString = "Please enter your choice (1-" + str(countLoc-1) + "), 0 to exit: " done = False while not done: num = raw_input(outputString) if not num.isdigit() or int(num) < 0 or int(num) >= countLoc: print "Incorrect input value choice! Must be (1-" + str(countLoc-1) + "): " else: done = True #end while if str(num) == "0": print "Since you are exiting without effectively doing anything, allow " +\ "this script to take a moment and remind you to set up the proper " +\ "folder and user list text file as described in the README.txt" sys.exit(1) #endif prefName = fileToNum[int(num)] print "You chose " + prefName else: #else the file 'userlist.txt' was found print "Using file name userlist.txt" #end else curTempPath += prefName else: #else, there's no folder for any term print "No directory structure found, just attempting to find file \"userlist.txt\"" curTempPath = '/class/csse/csse220/scripts/userlist.txt' userChoice = "201510" #just give a default #end else section1File = open(curTempPath, 'r') allStudents = [] for line in section1File: allStudents.append(line.strip()) section1File.close() # section1File = open('/class/csse/csse220/scripts/csse220-201510-users01.txt', 'r') # section1Students = [] # for line in section1File: # section1Students.append(line.strip()) # section1File.close() # section2File = open('/class/csse/csse220/scripts/csse220-201510-users02.txt', 'r') # section2Students = [] # for line in section2File: # section2Students.append(line.strip()) # section2File.close() # section3File = open('/class/csse/csse220/scripts/csse220-201510-users03.txt', 'r') # section3Students = [] # for line in section3File: # section3Students.append(line.strip()) # section3File.close() # allStudents = section1Students + section2Students + section3Students reposSets = [] # first set in the list is the default reposSets.append(RepositorySet("All Students", repoNamePrefix, allStudents)) # reposSets.append(RepositorySet("Section 1&2 - Hewner", repoNamePrefix, section1Students + section2Students)) # reposSets.append(RepositorySet("Section 3 - Defoe", repoNamePrefix, section3Students)) reposSets.append(RepositorySet("Game of Life", repoNamePrefix, [ "gameoflife01", "gameoflife02", "gameoflife03", "gameoflife04", "gameoflife05", "gameoflife06", "gameoflife07", "gameoflife08", "gameoflife09", "gameoflife10", "gameoflife11", "gameoflife12", "gameoflife13", "gameoflife14", "gameoflife15", "gameoflife16", "gameoflife17", "gameoflife18", "gameoflife19", "gameoflife20", "gameoflife21", "gameoflife22", "gameoflife23", "gameoflife24", "gameoflife25", "gameoflife26", "gameoflife27", "gameoflife28", "gameoflife29", "gameoflife30", "gameoflife31", "gameoflife32", "gameoflife33", "gameoflife34", "gameoflife35", "gameoflife36", "gameoflife37", "gameoflife38", "gameoflife39", "gameoflife40", "gameoflife41" ])) reposSets.append(RepositorySet("Ballworlds", repoNamePrefix, [ "BW01", "BW02", "BW03", "BW04", "BW05", "BW06", "BW07", "BW08", "BW09", "BW10", "BW11", "BW12", "BW13", "BW14", "BW15", "BW16", "BW17", "BW18", "BW19", "BW20", "BW21", "BW22", "BW23", "BW24", "BW25", "BW26", "BW27", "BW28", "BW29", "BW30", "BW31", "BW32", "BW33", "BW34", "BW35", "BW36" ])) reposSets.append(RepositorySet("Loderunner", repoNamePrefix, [ "LR01", "LR02", "LR03", "LR04", "LR05", "LR06", "LR07", # "LR08", "LR09", "LR10", "LR11", "LR12", "LR13", "LR14", "LR15", "LR16" ])) reposSets.append(RepositorySet("Digger", repoNamePrefix, [ "digger01", "digger02", "digger03", "digger04", "digger05", "digger06", "digger07", "digger08", "digger09", "digger10", "digger11", "digger12", "digger13", "digger14", "digger15", "digger16", "digger17", "digger18", "digger19", "digger20", "digger21", "digger22", "digger23", "digger24", "digger25", "digger26" ])) # ---------------------------------------------------------------- # Defines project names and unit tests for this course. # Used by main script. # ---------------------------------------------------------------- projects = [] projects.append(Project("HW1")) projects.append(Project("TwelveProblems")) # Program from week 1 projects.append(Project("ObjectsAndMethods")) #HW2 projects.append(Project("UnitTesting", "StringMethodsPracticeTest", "JUnitMoveTester")) #HW3 projects.append(Project("TeamGradebook")) #HW4 and HW5 projects.append(Project("IntroToJavaGraphics")) #not graded, part of HW6 projects.append(Project("Faces")) #HW6 projects.append(Project("SixMapAnd2DArrayProblems")) #HW6 projects.append(Project("Decisions")) #HW6 projects.append(Project("FundamentalDataTypes")) #HW7 for Boutell projects.append(Project("Iteration", "AnnualInvestmentTest", "InvestmentTest")) #HW7 projects.append(Project("ArraysAndLists", "QuizScoresTest")) #HW8 projects.append(Project("TwoDArrays", "TicTacToeTest", "TicTacToeTestFromInstructors")) #HW10, individual projects.append(Project("GameOfLife", "GameOfLifeTest")) #HW10, team0's projects.append(Project("EnscapsulationExamples")) #Show exam of choice term projects.append(Project(str("Exam1-" + userChoice))) #defaults to 201510 projects.append(Project(str("Exam2-" + userChoice))) #same projects.append(Project(str("Final-" + userChoice))) #same projects.append(Project("Recursion","examples.SentenceTest")) #HW12 projects.append(Project("SierpinskiTriangle")) #HW12 projects.append(Project("Recursion2")) #HW13 projects.append(Project("RecursionPractice")) projects.append(Project("LinearLightsOut")) projects.append(Project("SortingAndSearching")) #HW14 projects.append(Project("FunctionObjects")) #HW?? projects.append(Project("ForkJoinIntro")) #HW15 projects.append(Project("DesigningClasses")) #HW16 projects.append(Project("OnToInterfaces", "bigRational.BasicBigRationalTest", "bigRational.LargeBigRationalTest")) #HW17 projects.append(Project("EventBasedProgramming")) #HW18 projects.append(Project("Inheritance")) #HW19, LinearLightsOut #projects.append(Project("Inheritance2")) #HW20, but nothing to grade #projects.append(Project("SwingDemo2")) #HW16 projects.append(Project("BallWorlds")) #HW20 projects.append(Project("OODesign")) #HW21 #projects.append(Project("Exam2", "problem1.CompareProblemTest", "problem2.MultiplierTest")) projects.append(Project("VectorGraphics")) projects.append(Project("TextTwisterMIDlet")) projects.append(Project("StrategyPattern")) projects.append(Project("LinkedLists")) #HW24 projects.append(Project("SinglyLinkedList")) projects.append(Project("DataStructures")) #HW25 #projects.append(Project("Exam2MakeUp")) projects.append(Project("FixedLengthQueue")) #HW25 projects.append(Project("AnimatedShapes")) #Exam 3 optional projects.append(Project("LodeRunner")) #HW25 projects.append(Project("Digger")) projects.append(Project("Markov", "Milestone1Tests", "Milestone2Tests")) #projects.append(Project("FinalExam")) # ---------------------------------------------------------------- # Defines any additional main menu commands for this course. # Used by main script. # ---------------------------------------------------------------- menuItems = [] # ---------------------------------------------------------------- # A couple of extra menu items that are useful in a pinch, but aren't yet # sufficiently abstracted for general use. # def copyInExtras(data): # forEachRepo("cp ${scriptDir}/*.java ${shortName}/src/btwp/", data) # return False # menuItems.append(MenuItem('Copy in Exam2 test files',copyInExtras)) # # def runTestsExtraMem(data): # forEachRepo("cd ${shortName} && java -Xmx2000m -cp '${scriptDir}/junit-4.5.jar:bin' org.junit.runner.JUnitCore ${testClasses}", data) # return False # menuItems.append(MenuItem('Run JUnit tests with extra memory',runTestsExtraMem)) # ---------------------------------------------------------------- # ---------------------------------------------------------------- # Some test code, executed if this file is imported directly into # a python shell. Shouldn't need to change this when specifying # course-specific data above. # ---------------------------------------------------------------- if __name__ == '__main__': print "reposSets ==", reposSets print "Repositories from reposSets[0]:" for r in reposSets[0].repos(): print " ", r print "repository names: ", [r.name for r in reposSets] print print projects print "Test classes:" for p in projects: print " %s: %s" % (p.name, p.testClasses) print "Additional Menu Items' Text:" for mi in menuItems: print " ", mi.text