Skip to content

Commit

Permalink
Support renames in grgit.show()
Browse files Browse the repository at this point in the history
Fix #74, but using JGit's RenameDetector to process the commit's
diff before returning it to the caller.
  • Loading branch information
ajoberstar committed Aug 24, 2015
1 parent 80612f6 commit 9332bc3
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/main/groovy/org/ajoberstar/grgit/operation/ShowOp.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import org.ajoberstar.grgit.util.JGitUtil

import org.eclipse.jgit.diff.DiffEntry
import org.eclipse.jgit.diff.DiffEntry.ChangeType
import org.eclipse.jgit.diff.RenameDetector
import org.eclipse.jgit.treewalk.TreeWalk

/**
Expand Down Expand Up @@ -76,14 +77,19 @@ class ShowOp implements Callable<CommitDiff> {
if (parentId) {
walk.addTree(parentId.tree)
walk.addTree(commitId.tree)
Map entries = DiffEntry.scan(walk).groupBy { it.changeType }
List initialEntries = DiffEntry.scan(walk)
RenameDetector detector = new RenameDetector(repo.jgit.repository)
detector.addAll(initialEntries)
List entries = detector.compute()
Map entriesByType = entries.groupBy { it.changeType }

return new CommitDiff(
commit: commit,
added: entries[ChangeType.ADD].collect { it.newPath },
copied: entries[ChangeType.COPY].collect { it.newPath },
modified: entries[ChangeType.MODIFY].collect { it.newPath },
removed: entries[ChangeType.DELETE].collect { it.oldPath },
renamed: entries[ChangeType.RENAME].collect { it.newPath }
added: entriesByType[ChangeType.ADD].collect { it.newPath },
copied: entriesByType[ChangeType.COPY].collect { it.newPath },
modified: entriesByType[ChangeType.MODIFY].collect { it.newPath },
removed: entriesByType[ChangeType.DELETE].collect { it.oldPath },
renamed: entriesByType[ChangeType.RENAME].collect { it.newPath }
)
} else {
walk.addTree(commitId.tree)
Expand Down
18 changes: 18 additions & 0 deletions src/test/groovy/org/ajoberstar/grgit/operation/ShowOpSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,24 @@ class ShowOpSpec extends SimpleGitOpSpec {
)
}

def 'can show diffs in commit with rename'() {
given:
repoFile('elephant.txt') << 'I have tusks.'
grgit.add(patterns: ['.'])
grgit.commit(message: 'Adding elephant.')

repoFile('elephant.txt').renameTo(repoFile('mammoth.txt'))
grgit.add(patterns: ['.'])
grgit.remove(patterns: ['elephant.txt'])
Commit renameCommit = grgit.commit(message: 'Renaming to mammoth.')

expect:
grgit.show(commit: renameCommit) == new CommitDiff(
commit: renameCommit,
renamed: ['mammoth.txt']
)
}

def 'can show diffs based on rev string'() {
File fooFile = repoFile("foo.txt")
fooFile << "foo!"
Expand Down

0 comments on commit 9332bc3

Please sign in to comment.