Changes for page Git API

Last modified by Admin on 2022/02/07 00:27

<
From version < 19.28 >
edited by Vincent Massol
on 2017/06/19 15:22
To version < 20.1 >
edited by Vincent Massol
on 2017/06/24 19:44
>
Change comment: There is no comment for this version

Summary

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 +

Get Connected