1
1
package com .projectkaiser .scm .vcs ;
2
2
3
+ import java .io .ByteArrayOutputStream ;
3
4
import java .io .File ;
4
5
import java .io .FileWriter ;
5
6
import java .io .IOException ;
28
29
import org .eclipse .jgit .diff .DiffEntry ;
29
30
import org .eclipse .jgit .diff .DiffEntry .ChangeType ;
30
31
import org .eclipse .jgit .diff .DiffEntry .Side ;
32
+ import org .eclipse .jgit .diff .DiffFormatter ;
31
33
import org .eclipse .jgit .lib .ObjectReader ;
32
34
import org .eclipse .jgit .lib .Ref ;
33
35
import org .eclipse .jgit .lib .Repository ;
34
36
import org .eclipse .jgit .revwalk .RevCommit ;
35
37
import org .eclipse .jgit .revwalk .RevWalk ;
36
- import org .eclipse .jgit .revwalk .filter .RevFilter ;
37
38
import org .eclipse .jgit .storage .file .FileRepositoryBuilder ;
38
39
import org .eclipse .jgit .transport .CredentialsProvider ;
39
40
import org .eclipse .jgit .transport .RefSpec ;
@@ -91,9 +92,9 @@ public void createBranch(String srcBranchName, String newBranchName, String comm
91
92
git
92
93
.checkout ()
93
94
.setCreateBranch (git .getRepository ().exactRef ("refs/heads/" +
94
- parseBranch (srcBranchName )) == null )
95
- .setStartPoint ("origin/" + parseBranch (srcBranchName ))
96
- .setName (parseBranch (srcBranchName ))
95
+ getRealBranchName (srcBranchName )) == null )
96
+ .setStartPoint ("origin/" + getRealBranchName (srcBranchName ))
97
+ .setName (getRealBranchName (srcBranchName ))
97
98
.call (); // switch to master
98
99
99
100
git
@@ -125,7 +126,7 @@ public void createBranch(String srcBranchName, String newBranchName, String comm
125
126
}
126
127
}
127
128
128
- private String parseBranch (String branchName ) {
129
+ private String getRealBranchName (String branchName ) {
129
130
return branchName == null ? MASTER_BRANCH_NAME : branchName ;
130
131
}
131
132
@@ -217,13 +218,13 @@ public VCSMergeResult merge(String srcBranchName, String dstBranchName, String c
217
218
218
219
git
219
220
.checkout ()
220
- .setCreateBranch (git .getRepository ().exactRef ("refs/heads/" + parseBranch (dstBranchName )) == null )
221
- .setName (parseBranch (dstBranchName ))
221
+ .setCreateBranch (git .getRepository ().exactRef ("refs/heads/" + getRealBranchName (dstBranchName )) == null )
222
+ .setName (getRealBranchName (dstBranchName ))
222
223
.call ();
223
224
224
225
MergeResult mr = git
225
226
.merge ()
226
- .include (git .getRepository ().findRef ("origin/" + parseBranch (srcBranchName )))
227
+ .include (git .getRepository ().findRef ("origin/" + getRealBranchName (srcBranchName )))
227
228
.setMessage (commitMessage )
228
229
.call ();
229
230
@@ -305,7 +306,7 @@ public String getRepoUrl() {
305
306
public String getFileContent (String branchName , String fileRelativePath , String encoding ) {
306
307
try (IVCSLockedWorkingCopy wc = repo .getVCSLockedWorkingCopy ()) {
307
308
try (Git git = getLocalGit (wc )) {
308
- String bn = parseBranch (branchName );
309
+ String bn = getRealBranchName (branchName );
309
310
git
310
311
.pull ()
311
312
.setCredentialsProvider (credentials )
@@ -341,7 +342,7 @@ public void setFileContent(String branchName, String filePath, String content, S
341
342
try {
342
343
try (IVCSLockedWorkingCopy wc = repo .getVCSLockedWorkingCopy ()) {
343
344
try (Git git = getLocalGit (wc )) {
344
- String bn = parseBranch (branchName );
345
+ String bn = getRealBranchName (branchName );
345
346
346
347
git
347
348
.pull ()
@@ -395,48 +396,59 @@ public void setFileContent(String branchName, String filePath, String content, S
395
396
public String getFileContent (String branchName , String filePath ) {
396
397
return getFileContent (branchName , filePath , StandardCharsets .UTF_8 .name ());
397
398
}
398
-
399
+
399
400
@ Override
400
401
public List <VCSDiffEntry > getBranchesDiff (String srcBranchName , String dstBranchName ) {
401
402
List <VCSDiffEntry > res = new ArrayList <>();
402
403
try (IVCSLockedWorkingCopy wc = repo .getVCSLockedWorkingCopy ()) {
403
404
try (Git git = getLocalGit (wc )) {
404
405
try (RevWalk walk = new RevWalk (git .getRepository ())) {
405
-
406
- RevCommit srcHeadCommit = walk .parseCommit (git .getRepository ().resolve ("remotes/origin/"
407
- + parseBranch (srcBranchName )));
408
406
RevCommit destHeadCommit = walk .parseCommit (git .getRepository ().resolve ("remotes/origin/"
409
- + parseBranch (dstBranchName )));
407
+ + getRealBranchName (dstBranchName )));
408
+
409
+ ObjectReader reader = git .getRepository ().newObjectReader ();
410
410
411
- List <RevCommit > startPoints = new ArrayList <RevCommit >();
412
- walk .setRevFilter (RevFilter .MERGE_BASE );
413
- startPoints .add (destHeadCommit );
414
- startPoints .add (srcHeadCommit );
415
-
416
- walk .markStart (startPoints );
417
- RevCommit forkPoint = walk .next ();
411
+ git
412
+ .pull ()
413
+ .setCredentialsProvider (credentials )
414
+ .call ();
418
415
419
- ObjectReader reader = git .getRepository ().newObjectReader ();
420
- CanonicalTreeParser srcTreeIter = new CanonicalTreeParser ();
421
- srcTreeIter .reset (reader , srcHeadCommit .getTree ());
422
-
423
- CanonicalTreeParser destTreeIter = new CanonicalTreeParser ();
424
- destTreeIter .reset (reader , forkPoint .getTree ());
425
-
416
+ git
417
+ .checkout ()
418
+ .setCreateBranch (git .getRepository ().exactRef ("refs/heads/" + getRealBranchName (dstBranchName )) == null )
419
+ .setName (getRealBranchName (dstBranchName ))
420
+ .setStartPoint (destHeadCommit )
421
+ .call ();
422
+
423
+ git
424
+ .merge ()
425
+ .include (git .getRepository ().findRef ("origin/" + getRealBranchName (srcBranchName )))
426
+ .setCommit (false )
427
+ .call ();
428
+
429
+ CanonicalTreeParser srcTreeIter = new CanonicalTreeParser ();
430
+ srcTreeIter .reset (reader , destHeadCommit .getTree ());
431
+
426
432
List <DiffEntry > diffs = git
427
433
.diff ()
428
- .setNewTree (srcTreeIter )
429
- .setOldTree (destTreeIter )
434
+ .setOldTree (srcTreeIter )
430
435
.call ();
431
436
432
437
for (DiffEntry diffEntry : diffs ) {
433
438
VCSDiffEntry vcsEntry = new VCSDiffEntry (
434
439
diffEntry .getPath (diffEntry .getChangeType () == ChangeType .ADD ? Side .NEW : Side .OLD ),
435
440
gitChangeTypeToVCSChangeType (diffEntry .getChangeType ()));
441
+
442
+
443
+ ByteArrayOutputStream baos = new ByteArrayOutputStream ();
444
+ try (DiffFormatter formatter = new DiffFormatter (baos )) {
445
+ formatter .setRepository (git .getRepository ());
446
+ formatter .format (diffEntry );
447
+ }
448
+ vcsEntry .setUnifiedDiff (baos .toString ("UTF-8" ));
436
449
res .add (vcsEntry );
437
450
}
438
451
}
439
-
440
452
git .getRepository ().close ();
441
453
return res ;
442
454
}
@@ -445,9 +457,8 @@ public List<VCSDiffEntry> getBranchesDiff(String srcBranchName, String dstBranch
445
457
} catch (Exception e ) {
446
458
throw new RuntimeException (e );
447
459
}
448
-
449
460
}
450
-
461
+
451
462
private VCSChangeType gitChangeTypeToVCSChangeType (ChangeType changeType ) {
452
463
switch (changeType ) {
453
464
case ADD :
@@ -490,7 +501,7 @@ public List<String> getCommitMessages(String branchName, Integer limit) {
490
501
Iterable <RevCommit > logs = git
491
502
.log ()
492
503
.add (git .getRepository ().resolve ("remotes/origin/"
493
- + parseBranch (branchName )))
504
+ + getRealBranchName (branchName )))
494
505
.setMaxCount (limit )
495
506
.call ();
496
507
@@ -517,7 +528,7 @@ public String getVCSTypeString() {
517
528
public void removeFile (String branchName , String filePath , String commitMessage ) {
518
529
try (IVCSLockedWorkingCopy wc = repo .getVCSLockedWorkingCopy ()) {
519
530
try (Git git = getLocalGit (wc )) {
520
- String bn = parseBranch (branchName );
531
+ String bn = getRealBranchName (branchName );
521
532
git
522
533
.pull ()
523
534
.setCredentialsProvider (credentials )
0 commit comments