Changes for page Git API
Last modified by Admin on 2022/02/07 00:27
Change comment:
There is no comment for this version
Summary
-
Objects (1 modified, 0 added, 0 removed)
Details
- ExtensionCode.ExtensionClass[0]
-
- Description
-
... ... @@ -233,3 +233,76 @@ 233 233 {{image reference="jgit-example3-1.png"/}} 234 234 235 235 {{image reference="jgit-example3-2.png" width="500"/}} 236 + 237 +== Example 5: Count diffs for each author == 238 + 239 +{{code language="java"}} 240 +{{groovy}} 241 +import org.eclipse.jgit.lib.* 242 +import org.eclipse.jgit.revwalk.* 243 +import org.gitective.core.* 244 +import org.gitective.core.filter.commit.* 245 +import org.eclipse.jgit.diff.* 246 + 247 +def repo = services.git.getRepository("https://github.com/xwiki/xwiki-commons.git", "xwiki/xwiki-commons") 248 + 249 +def finder = new CommitFinder(repo) 250 +def dateFilter = new CommitterDateFilter(System.currentTimeMillis() - 365*24*60*60*1000L) 251 + 252 +class AuthorDiffFilter extends CommitDiffEditFilter 253 +{ 254 + private Map<String, Long[]> counters = new HashMap<>() 255 + 256 + public AuthorDiffFilter() 257 + { 258 + super() 259 + } 260 + 261 + public AuthorDiffFilter(final boolean detectRenames) 262 + { 263 + super(detectRenames) 264 + } 265 + 266 + protected boolean include(RevCommit commit, DiffEntry diff, Edit hunk) 267 + { 268 + PersonIdent person = commit.getAuthorIdent() 269 + Long[] counter = counters.get(person.name) 270 + if (counter == null) { 271 + counter = new Long[3] 272 + counter[0] = counter[1] = counter[2] = 0 273 + } 274 + 275 + switch (hunk.getType()) { 276 + case Edit.Type.DELETE: 277 + counter[0] += hunk.getLengthA() 278 + counters.put(person.name, counter) 279 + break; 280 + case Edit.Type.INSERT: 281 + counter[1] += hunk.getLengthB() 282 + counters.put(person.name, counter) 283 + break; 284 + case Edit.Type.REPLACE: 285 + counter[2] += hunk.getLengthB(); 286 + counters.put(person.name, counter) 287 + break; 288 + } 289 + return true; 290 + } 291 +} 292 + 293 +def customDiffFilter = new AuthorDiffFilter() 294 +def filters = new AndCommitFilter() 295 +filters.add(dateFilter, customDiffFilter) 296 +finder.setFilter(filters) 297 +finder.find() 298 + 299 +customDiffFilter.counters.each{ name, counter -> 300 + println "* ${name} - Deleted Lines: ${counter[0]} - Added Lines: ${counter[1]} - Modified Lines: ${counter[2]}" 301 +} 302 +{{/groovy}} 303 +{{/code}} 304 + 305 +When executed this script returns: 306 + 307 +{{image reference="jgit-example5.png"/}} 308 +