Esempio n. 1
0
    def __getNumCommitEachStatusByDateRange(self, commitDates):
        numCommitEachStatus = {key: 0 for key in Utility.STATUSES}
        hasRecordedDateDict = {}

        if "numCommits" in commitDates and commitDates['numCommits'] == 0:
            return numCommitEachStatus

        for commitNdx, commitDate in enumerate(commitDates):
            for key, timeList in self.dateRangeEachState.items():
                for oneDateRange in self.__formatTimeList(timeList):
                    if commitNdx not in hasRecordedDateDict:
                        if self.END_TIME_STR not in oneDateRange and \
                                GitOperations.compareGitDates(commitDate,
                                                              oneDateRange[self.START_TIME_STR]):
                            # Example: a resolved issue that still have commits
                            numCommitEachStatus[key] += 1
                            hasRecordedDateDict[commitNdx] = True
                        elif self.END_TIME_STR in oneDateRange and \
                                GitOperations.compareGitDates(oneDateRange[self.END_TIME_STR], commitDate):
                            numCommitEachStatus[key] += 1
                            hasRecordedDateDict[commitNdx] = True
                        elif self.START_TIME_STR not in oneDateRange and \
                                GitOperations.compareGitDates(oneDateRange[self.END_TIME_STR], commitDate):
                            numCommitEachStatus[key] += 1
                            hasRecordedDateDict[commitNdx] = True

        return numCommitEachStatus
Esempio n. 2
0
 def __init__(self, gitCloneURL, localRepo, gitProjectName):
     print("initializing gitProjectName = ", gitProjectName)
     print("initializing gitCloneURL = ", gitCloneURL)
     print("initializing localRepo = ", localRepo)
     GitOperations.cloneAndPull(
         localRepo, Utility.getGoodWindowFileName(gitProjectName),
         gitCloneURL)
     self.gitCloneURL = gitCloneURL
     self.localRepo = localRepo
     self.gitProjectName = gitProjectName
     self.PULL_REQUESTS_BY_PAGE = self._Git_API_URL.format(
         gitProjectName, "all")
     self.CLOSED_PULL_REQUEST_BY_PAGE = self._Git_API_URL.format(
         gitProjectName, "closed")
Esempio n. 3
0
def __getValidGitRepo(eachRepo):
    print("Validating repo's url = ", eachRepo)
    gitUrlByRegex = re.findall("(:?.*)\/(.*).git", eachRepo)
    truncatedGitUrl = re.findall("(:?git:)(.*)", eachRepo)
    print("gitUrlByRegx = ", gitUrlByRegex)
    print("truncatedGitUrl = ", truncatedGitUrl)
    if len(truncatedGitUrl) > 0:
        # Valid git clone url, such as git://.*.
        return eachRepo
    elif len(gitUrlByRegex) > 0 and "git" in gitUrlByRegex[0][0]:
        # git clone url with https, such as https://.*.git
        # For example: https://git-wip-us.apache.org/repos/asf?p=ambari.git
        # gitUrlByRegex constains a array of tuple. gitUrlByRegex[0][0] = the originial url
        #                                           gitUrlByRegex[0][1] = the parsed git repo's name
        return _APACHE_GITHUB_GIT_CLONE.format(gitUrlByRegex[0][1])
    elif eachRepo.find("svn") > 0:
        # svn mirror, such as http://svn.apache.org/.*/trunk/, and "http://svn.apache.org/.*/"
        svnNameInASF = re.findall(".*/asf/(.*)(?:/)", eachRepo)
        svnNameInTrunk = re.findall("(?:.*)\/(.*)\/(?:trunk)", eachRepo)
        svnName = svnNameInASF[
            0] if svnNameInASF else svnNameInTrunk[0] if svnNameInTrunk else ""
        if svnName != "" and GitOperations.isValidGitCloneURL(
                _APACHE_GITHUB.format(svnName)):
            return _APACHE_GITHUB_GIT_CLONE.format(svnName)
        return False
    else:
        return False
Esempio n. 4
0
 def getNumberBranches(self):
     numBranch = None
     if self.__hasMasterBranch() == 0:
         return 0
     else:
         numBranch = GitOperations.executeGitShellCommand(
             self.localRepo, ["git branch -a | grep \'remote\' | wc -l"])
         return int(re.sub(r'\s+', '', numBranch))
Esempio n. 5
0
 def getUniqueDevelopers(self, reqName):
     developers = GitOperations.getGitLogInfo(
         self.localRepo, reqName, self.__getGitDeveloperForThisReq)
     developerSet = set()
     print("developers = ", developers)
     for dev in developers["formattedDevelopers"]:
         developerSet.add(dev)
     return developerSet
Esempio n. 6
0
 def getPercentageByH4(self):
     mergedByH4 = []
     for pr in self.__getAllUnmergedAndClosedPullRequests():
         out = GitOperations.executeGitShellCommand(
             self.localRepo,
             ["git rev-list -1 --before=" + pr["closed_at"] + " master"])
         if self.__hasMasterBranch() != 0 and self.__hasMergedKeyword(out):
             mergedByH4.append(pr)
     return len(mergedByH4) / len(self.allUnmergedAndClosedPullRequests)
Esempio n. 7
0
 def getPortionOfCommitsThroughMasterBranch(self):
     totalNumCommitOnMaster = int(
         GitOperations.executeGitShellCommand(
             self.localRepo, ["git rev-list --count master"]))
     allShaOnMaster = GitOperations.executeGitShellCommand(
         self.localRepo, ["git log --pretty=format:'%H'"]).split("\n")
     totalNumCommitThroughMaster = 0
     for sha in allShaOnMaster:
         print("sha = ", sha)
         if self.__isCommittedThroughMaster(sha):
             totalNumCommitThroughMaster += 1
         else:
             print("not committed through master = ", sha)
     if self.__checkIfTheLatestCommitCommittedThroughMaster():
         totalNumCommitOnMaster += 1
     print("totalNumCommitOnMaster = ", totalNumCommitOnMaster)
     print("totalNumCommitThroughMaster = ", totalNumCommitThroughMaster)
     return (totalNumCommitOnMaster, totalNumCommitThroughMaster)
Esempio n. 8
0
 def getPercentageByH1(self):
     h1Merged = []
     for pr in self.__getAllUnmergedAndClosedPullRequests():
         hasAddedThisPr = False
         commitDict = Utility.convertDictStringToDict(
             GitOperations.requestByGitAPIWithAuth(pr["commits_url"]))
         for commit in commitDict:
             if self.__isInMasterBranch(
                     commit["sha"]) and not hasAddedThisPr:
                 h1Merged.append(pr)
                 hasAddedThisPr = True
     return len(h1Merged) / len(self.allUnmergedAndClosedPullRequests)
Esempio n. 9
0
    def __getAllClosedPullRequestByPaging(self):
        page = 0
        allPullRequestDict = []
        while True:
            pullRequestsOnePageDict = Utility.convertDictStringToDict(
                GitOperations.requestByGitAPIWithAuth(
                    self.CLOSED_PULL_REQUEST_BY_PAGE + str(page)))
            if len(pullRequestsOnePageDict) == 0:
                break
            else:
                allPullRequestDict += pullRequestsOnePageDict
            page += 1

        return allPullRequestDict
Esempio n. 10
0
 def __isCommittedThroughMaster(self, sha):
     consoleOutput = GitOperations.executeGitShellCommand(
         self.localRepo, ["git when-merged -l {}".format(sha)])
     isDirectCommit = 0
     isMergedMaster = 0
     if consoleOutput != None:
         isDirectCommit = len(
             re.findall(
                 "(master                      Commit is directly on this branch.)",
                 consoleOutput)) > 0
         isMergedMaster = len(
             re.findall("(Merge branch 'master')", consoleOutput)) > 0
         print("isDirectCommit = ", isDirectCommit)
         print("isMergedMaster = ", isMergedMaster)
     return isDirectCommit or isMergedMaster
Esempio n. 11
0
 def getPercentageByH3(self):
     commitCount = 0
     h3Merged = []
     for pr in self.__getAllUnmergedAndClosedPullRequests():
         hasAddedThisPr = False
         commitDict = Utility.convertDictStringToDict(
             GitOperations.requestByGitAPIWithAuth(pr["commits_url"]))
         for commit in commitDict:
             if (self.__isInMasterBranch(commit["sha"])
                     and self.__hasMergedKeyword(commit["sha"])
                     and not hasAddedThisPr):
                 h3Merged.append(pr)
                 hasAddedThisPr = False
             if commitCount == 2:
                 break
     return len(h3Merged) / len(self.allUnmergedAndClosedPullRequests)
Esempio n. 12
0
    def getPortionOfCommitsWithUnassignedTask(self):
        totalNumCommits = 0
        numUnassignedTaskWithCommits = 0

        unassignedIssues = JiraQuery.getUnassignedIssues(
            JIRA({'server': 'https://issues.apache.org/jira'}),
            self.jiraApache.jiraProjectName)

        for localRepo in self.localRepos:
            numCommits = GitOperations.executeGitShellCommand(
                localRepo, ["git log --all --pretty=format:'%H' | wc -l"])
            totalNumCommits += int(numCommits.replace(" ", ""))

        for localRepo in self.localRepos:
            repo = git.Repo(localRepo)
            for issue in unassignedIssues:
                logInfo = repo.git.log("--all", "-i", "--grep=" + issue)
                if logInfo != "":
                    numUnassignedTaskWithCommits += 1
        print("numUnassignedTaskWithCommits = ", numUnassignedTaskWithCommits)
        print("totalNumCommits = ", totalNumCommits)
        return round(numUnassignedTaskWithCommits / totalNumCommits, 2)
Esempio n. 13
0
def totalNumCommitsOnAllBrances(localRepo):
    allSha = GitOperations.executeGitShellCommand(
        localRepo, ["git log --all --pretty=format:'%H' | wc -l"])
    return int(allSha.replace(" ", "")) + 1
Esempio n. 14
0
 def __hasMasterBranch(self):
     numBranch = GitOperations.executeGitShellCommand(
         self.localRepo, ["git branch -a | grep \'master\' | wc -l"])
     return int(re.sub(r'\s+', '', numBranch))
Esempio n. 15
0
 def getNumCommitDuringEachStatus(self, localRepo):
     self.__getHistoryItems(self.__initDateRangeEachStatus)
     return self.__getNumCommitEachStatusByDateRange(
         GitOperations.getCommitsDatesForThisReq(localRepo, self.reqName))
Esempio n. 16
0
                    self.currentStatus = item.toString
        return result


# oneIssue = Issue("TIKA-1699",
#                 JIRA({'server': 'https://issues.apache.org/jira'}),
#                 "tika")

qwe = "Merge branch 'master' of https://github.com/leopangchan/Cal-Poly-Courses"
# print (re.findall("(Merge branch 'master')", qwe))
# print (re.findall("(Merge branch 'master')", "    Tt 2017 11 001: Hearing List page"))

calpolyC = "/Users/yiupangchan/Documents/github/Cal-Poly-Courses"
shaC = "75811b9cbc5ceaae66f6b9d2b9e2fb373ec556c0"
shaC2 = "c6a12e6082dda6a9af903a1c7934e3bb39cfe143"
w = GitOperations.executeGitShellCommand(
    calpolyC, ["git when-merged -l {}".format(shaC2)])

dd = "/Users/yiupangchan/Documents/github/dd-TranscriptionTool-3.0"
shadd = "32eadf9b3a2dc07c549e154e44b2e1ac58b8ae0b"
#w = GitOperations.executeGitShellCommand(dd, ["git when-merged -l {}".format(shadd)])
'''
print (w)
from_master = len(re.findall("(master                      Commit is directly on this branch.)", w)) > 0 or len(re.findall("(Merge branch 'master')", w)) > 0
print (len(re.findall("(master                      Commit is directly on this branch.)", w)))
print (len(re.findall("(Merge branch 'master')", w)))
print (from_master)
'''
'''
    PERIL-27
'''
'''
Esempio n. 17
0
 def __checkIfTheLatestCommitCommittedThroughMaster(self):
     oneLineCommit = GitOperations.executeGitShellCommand(
         self.localRepo, ["git log --oneline -n 1"])
     output = re.search("(Merge) (branch|pull)", oneLineCommit)
     return output == None
Esempio n. 18
0
 def __hasKeywordInGitLogByRegex(self, commitSha, regex):
     consoleOut = GitOperations.executeGitShellCommand(
         self.localRepo, ["git show", commitSha])
     pattern = re.compile(regex)
     return pattern.match(consoleOut) != None
Esempio n. 19
0
 def __isInMasterBranch(self, commitSha):
     out = GitOperations.executeGitShellCommand(
         self.localRepo, ["git branch --all --contains", commitSha])
     return len(re.findall('(master)', out)) > 0