Skip to content

Commit 725483c

Browse files
authored
Merge pull request #19 from refactoring-ai/feature/CommitCount
Feature/commit count
2 parents 9818386 + 53d617e commit 725483c

10 files changed

+46
-11
lines changed

src/main/java/refactoringml/App.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ public Project run () throws Exception {
140140
log.info("Start mining project " + gitUrl + "(clone at " + clonePath + ")");
141141

142142
boolean firstCommitFound = firstCommitToProcess == null;
143+
int commitNumber = 1;
143144
// we only analyze commits that have one parent or the first commit with 0 parents
144145
for (boolean endFound = false; currentCommit!=null && !endFound; currentCommit = walk.next()) {
145146
String commitHash = currentCommit.getId().getName();
@@ -158,7 +159,8 @@ public Project run () throws Exception {
158159
if (currentCommit.getParentCount() > 1)
159160
continue;
160161

161-
processCommit(currentCommit, miner, handler, refactoringAnalyzer, processMetrics);
162+
processCommit(currentCommit, commitNumber, miner, handler, refactoringAnalyzer, processMetrics);
163+
commitNumber += 1;
162164
}
163165
walk.close();
164166

@@ -207,7 +209,7 @@ private Project initProject(Git git) throws GitAPIException, IOException {
207209
numberOfCommits, getProperty("stableCommitThresholds"), lastCommitHash, counterResult, projectSize);
208210
}
209211

210-
private void processCommit(RevCommit currentCommit, GitHistoryRefactoringMiner miner, RefactoringHandler handler, RefactoringAnalyzer refactoringAnalyzer, ProcessMetricsCollector processMetrics){
212+
private void processCommit(RevCommit currentCommit, int commitNumber, GitHistoryRefactoringMiner miner, RefactoringHandler handler, RefactoringAnalyzer refactoringAnalyzer, ProcessMetricsCollector processMetrics){
211213
long startCommitTime = System.currentTimeMillis();
212214
String commitHash = currentCommit.getId().getName();
213215
try{
@@ -219,7 +221,7 @@ private void processCommit(RevCommit currentCommit, GitHistoryRefactoringMiner m
219221
//stores all the ck metrics for the current commit
220222
List<RefactoringCommit> allRefactoringCommits = new ArrayList<>();
221223
// stores the commit meta data
222-
CommitMetaData superCommitMetaData = new CommitMetaData(currentCommit, project);
224+
CommitMetaData superCommitMetaData = new CommitMetaData(currentCommit, commitNumber, project);
223225
List<DiffEntry> entries = calculateDiffEntries(currentCommit);
224226
// Note that we only run it if the commit has a parent, i.e, skip the first commit of the repo
225227
if (!isFirst(currentCommit)){

src/main/java/refactoringml/ProcessMetricsCollector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ private void collectProcessMetricsOfStableCommits(RevCommit commit, CommitMetaDa
141141
if(pmTracker.getCommitCountThreshold() == project.getMaxCommitThreshold()){
142142
log.debug("Reset pmTracker for class " + pmTracker.getFileName() + " with threshold: " + pmTracker.getCommitCountThreshold() +
143143
" because it is the max threshold(" + project.getMaxCommitThreshold() + ").");
144-
pmTracker.resetCounter(new CommitMetaData(commit, project));
144+
pmTracker.resetCounter(new CommitMetaData(commit, superCommitMetaData.getCommitNumber(), project));
145145
}
146146
}
147147
}

src/main/java/refactoringml/db/CommitMetaData.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public class CommitMetaData {
3030
@Temporal(TemporalType.TIMESTAMP)
3131
private Calendar commitDate;
3232

33+
//Number of this commit (number of previous commits plus 1)
34+
private int commitNumber;
35+
3336
//id of the parent commit, if none exists:
3437
// the parent commit points to the commit that we calculate the code metrics
3538
// (we calculate the metrics in the version of file *before* the refactoring)
@@ -42,14 +45,16 @@ public class CommitMetaData {
4245
public CommitMetaData(String commitId, String fullMessage, String url, String parentId) {
4346
this.commitId = commitId.trim();
4447
this.commitDate = new GregorianCalendar();
48+
this.commitNumber = -1;
4549
this.commitMessage = fullMessage.trim();
4650
this.commitUrl = url;
4751
this.parentCommitId = parentId.trim();
4852
}
4953

50-
public CommitMetaData(RevCommit commit, Project project){
54+
public CommitMetaData(RevCommit commit, int commitNumber, Project project){
5155
this.commitId = commit.getName().trim();
5256
this.commitDate = JGitUtils.getGregorianCalendar(commit);
57+
this.commitNumber = commitNumber;
5358
this.commitMessage = commit.getFullMessage().trim();
5459
this.commitUrl = JGitUtils.generateCommitUrl(project.getGitUrl(), commitId, project.isLocal());
5560
this.parentCommitId = commit.getParentCount() == 0 ? "Null" : commit.getParent(0).getName().trim();
@@ -67,11 +72,14 @@ public long getId() {
6772
return id;
6873
}
6974

75+
public int getCommitNumber(){ return commitNumber; }
76+
7077
@Override
7178
public String toString() {
7279
return "CommitMetaData{" +
7380
"commit=" + commitId +
7481
", commitDate=" + commitDate +
82+
", commitNumber=" + commitNumber +
7583
", commitMessage=" + commitMessage +
7684
", commitUrl=" + commitUrl +
7785
", parentCommit='" + parentCommitId + '\'' +

src/test/java/integration/IntegrationBaseTest.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -198,23 +198,24 @@ protected void assertStableCommit(List<StableCommit> stableCommitList, String...
198198
Assert.assertEquals(stableCommits, assertCommits);
199199
}
200200

201-
protected void assertMetaDataRefactoring(String commit, String commitMessage, String refactoringSummary, String commitUrl, String parentCommit){
201+
protected void assertMetaDataRefactoring(String commit, String commitMessage, String refactoringSummary, String commitUrl, int commitNumber, String parentCommit){
202202
RefactoringCommit refactoringCommit = (RefactoringCommit) filterCommit(getRefactoringCommits(), commit).get(0);
203203

204204
Assert.assertEquals(refactoringSummary, refactoringCommit.getRefactoringSummary());
205-
assertMetaData(refactoringCommit.getCommitMetaData(), commitUrl, parentCommit, commitMessage);
205+
assertMetaData(refactoringCommit.getCommitMetaData(), commitUrl, commitNumber, parentCommit, commitMessage);
206206
}
207207

208-
protected void assertMetaDataStable(String commit, String commitUrl, String parentCommit, String commitMessage) {
208+
protected void assertMetaDataStable(String commit, String commitUrl, int commitNumber, String parentCommit, String commitMessage) {
209209
StableCommit stableCommit = (StableCommit) filterCommit(getStableCommits(), commit).get(0);
210210

211-
assertMetaData(stableCommit.getCommitMetaData(), commitUrl, parentCommit, commitMessage);
211+
assertMetaData(stableCommit.getCommitMetaData(), commitUrl, commitNumber, parentCommit, commitMessage);
212212
}
213213

214-
private void assertMetaData(CommitMetaData commitMetaData, String commitUrl, String parentCommit, String commitMessage){
214+
private void assertMetaData(CommitMetaData commitMetaData, String commitUrl, int commitNumber, String parentCommit, String commitMessage){
215215
Assert.assertEquals(commitUrl, commitMetaData.getCommitUrl());
216216
Assert.assertEquals(parentCommit, commitMetaData.getParentCommitId());
217217
Assert.assertEquals(commitMessage, commitMetaData.getCommitMessage());
218+
Assert.assertEquals(commitNumber, commitMetaData.getCommitNumber());
218219
}
219220

220221
protected void assertProcessMetrics(Instance instance, String truth) {

src/test/java/integration/realprojects/ApacheCommonsCliIntegrationTest.java

+4
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ public void commitMetaDataRefactoring(){
151151
"git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/cli/trunk@129803 13f79535-47bb-0310-9956-ffa450edef68",
152152
"Extract Variable\tkey : String in method package setOpt(opt Option) : void from class org.apache.commons.cli.CommandLine",
153153
"@local/repos/commons-cli/" + renameCommit,
154+
37,
154155
"469e71799a438ccb2d0925e50d4bb9dce37cdba2");
155156

156157
String moveCommit = "347bbeb8f98a49744501ac50850457ba8751d545";
@@ -162,6 +163,7 @@ public void commitMetaDataRefactoring(){
162163
"git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/cli/trunk@129846 13f79535-47bb-0310-9956-ffa450edef68",
163164
"Rename Parameter\topts : Options to options : Options in method public parse(options Options, arguments String[], stopAtNonOption boolean) : CommandLine in class org.apache.commons.cli.Parser",
164165
"@local/repos/commons-cli/" + moveCommit,
166+
76,
165167
"3b8e3de5b7599a6165d48103f94f3a830361188d");
166168
}
167169

@@ -171,6 +173,7 @@ public void commitMetaDataStable(){
171173
assertMetaDataStable(
172174
stableCommit1,
173175
"@local/repos/commons-cli/" + stableCommit1,
176+
2,
174177
"4868ac5e7c2afd428de74a6dcbec07dc6541a1ea",
175178
"moved cli over from the sandbox to commons proper\n" +
176179
"\n" +
@@ -181,6 +184,7 @@ public void commitMetaDataStable(){
181184
assertMetaDataStable(
182185
stableCommit2,
183186
"@local/repos/commons-cli/" + stableCommit2,
187+
39,
184188
"dde69934d7f0bee13e4cd1fc99a7d60ce95a0c78",
185189
"javadoc updates\n" +
186190
"\n" +

src/test/java/integration/toyprojects/R1ToyProjectTest.java

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import org.junit.jupiter.api.TestInstance;
88
import refactoringml.db.RefactoringCommit;
99

10+
import java.util.stream.Collectors;
11+
1012
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
1113
public class R1ToyProjectTest extends IntegrationBaseTest {
1214

@@ -40,6 +42,7 @@ public void commitMetaData(){
4042
"inline method",
4143
"Inline Method\tprivate convert(a int) : int inlined to public m1() : void in class a.Example1",
4244
"@local/repos/toyrepo-r1/" + commit,
45+
6,
4346
"a6d21e18c680431b0d4a09374e31a72144a728dc");
4447
}
4548

src/test/java/integration/toyprojects/R2ToyProjectTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ public void commitMetaData(){
7171
"rename class",
7272
"Rename Class\tPerson renamed to People",
7373
"@local/repos/toyrepo-r2/" + commit,
74+
2,
7475
"d56acf6b23d646528b4b04779b0fe64d74811052");
7576
}
7677

src/test/java/integration/toyprojects/R3ToyProjectTest.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public void stableCommits() {
7777
assertMetaDataStable(
7878
lastRefactoring,
7979
"@local/repos/toyrepo-r3/" + lastRefactoring,
80+
5,
8081
"0e094a734239b1bcc6d6bce1436200c0e45b1e8d",
8182
"rename");
8283

@@ -112,16 +113,29 @@ public void stableThresholds() {
112113
}
113114

114115
@Test
115-
public void commitMetaData(){
116+
public void commitMetaData1(){
116117
String commit = "376304b51193e5fade802be2cbd7523d6a5ba664";
117118
assertMetaDataRefactoring(
118119
commit,
119120
"Move and Rename Class testing",
120121
"Move And Rename Class\tAnimal moved and renamed to inheritance.superinfo.AnimalSuper",
121122
"@local/repos/toyrepo-r3/" + commit,
123+
6,
122124
"061febd820977f2b00c4926634f09908cc5b8b08");
123125
}
124126

127+
@Test
128+
public void commitMetaData2(){
129+
String commit = "061febd820977f2b00c4926634f09908cc5b8b08";
130+
assertMetaDataRefactoring(
131+
commit,
132+
"rename",
133+
"Rename Parameter\tinfo : String to noise : String in method package abstract sound(noise String) : void in class Animal",
134+
"@local/repos/toyrepo-r3/" + commit,
135+
5,
136+
"0e094a734239b1bcc6d6bce1436200c0e45b1e8d");
137+
}
138+
125139
@Test
126140
public void projectMetrics() {
127141
assertProjectMetrics(3, 3, 0, 23, 23, 0);

src/test/java/integration/toyprojects/R4ToyProjectTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ public void commitMetaData(){
151151
"extract method",
152152
"Extract Method\tprivate print(a int, b int, c int) : void extracted from public bark() : void in class a.Animal.Dog",
153153
"@local/repos/toyrepo-r4/" + commit,
154+
2,
154155
"4bab290609c8d60e96ad2fa094793edc2cba023a");
155156
}
156157

src/test/java/integration/toyprojects/R5ToyProjectTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public void commitMetaData(){
4747
"extract method",
4848
"Extract Method\tprivate print2() : void extracted from public print() : void in class a.Test",
4949
"@local/repos/toyrepo-r5/" + commit,
50+
2,
5051
"3f56031b1be69cb8db1779ef79645c2ab93a1616");
5152
}
5253

0 commit comments

Comments
 (0)