def link_project(self, mproject): """ Loads in the commits from a project and then attempts to place new entires in the user_corporation_project table (aka ProjectInvolvement) table. @param mproject: a dbobjects.MasterProject element to load the data for """ # FIXME: this currently has no support for hierarchical master projects projects = Project.select(Project.q.masterProjectID == mproject.id) # pylint: disable-msg=E1101 # we'll need this for building SQL queries projarr = [x.id for x in projects] # get the first commit on the project so we know what month to start pumping data at firstcommit = CVSCommit.select(AND(CVSCommit.q.startDate > datetime.datetime(1997, 11, 01), # pylint: disable-msg=E1101 IN(CVSCommit.q.projectID, projarr))).min(CVSCommit.q.startDate) # pylint: disable-msg=E1101 lastcommit = CVSCommit.select(AND(CVSCommit.q.startDate > datetime.datetime(1997, 11, 01), # pylint: disable-msg=E1101 IN(CVSCommit.q.projectID, projarr))).max(CVSCommit.q.startDate) # pylint: disable-msg=E1101 if firstcommit == None: # do something here to indicate that it couldn't process this time period self.log.info("Project %s (id=%s) does not appear to have any commits in the window", mproject.name, mproject.id) return self.log.info("%s - %s %s", mproject.name, firstcommit, lastcommit) # iterate on a monthly basis across the data so we have monthly snapshots, just as we do for Eclipse currentdate = datetime.datetime(firstcommit.year, firstcommit.month, 1) nextdate = add_month(currentdate) while currentdate < lastcommit: self.link_project_month(mproject, projarr, currentdate, nextdate) currentdate = nextdate nextdate = add_month(currentdate)
def get_project(projectname, masterproject, repopath): """ Gets a project from the database @param projectname: name of the project @param masterproject: parent of the project @param repopath: path of the project """ if not PROJECT_CACHE.has_key(masterproject.id): PROJECT_CACHE[masterproject.id] = {} if PROJECT_CACHE[masterproject.id].has_key(projectname): return PROJECT_CACHE[masterproject.id][projectname] project = Project.select(AND(Project.q.name == projectname, Project.q.masterProjectID == masterproject.id)) if project.count(): PROJECT_CACHE[masterproject.id][projectname] = project[0] else: PROJECT_CACHE[masterproject.id][projectname] = Project(name=projectname, masterProject=masterproject, path=repopath) return PROJECT_CACHE[masterproject.id][projectname]