Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgDataFile.java @ 625:b4948b159ab1
Refactor internals of blame support, tests
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 21 May 2013 17:24:22 +0200 |
parents | 99ad1e3a4e4d |
children | 6526d8adbc0f |
comparison
equal
deleted
inserted
replaced
624:507602cb4fb3 | 625:b4948b159ab1 |
---|---|
14 * the terms of a license other than GNU General Public License | 14 * the terms of a license other than GNU General Public License |
15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
16 */ | 16 */ |
17 package org.tmatesoft.hg.repo; | 17 package org.tmatesoft.hg.repo; |
18 | 18 |
19 import static org.tmatesoft.hg.core.HgIterateDirection.OldToNew; | |
20 import static org.tmatesoft.hg.repo.HgInternals.wrongRevisionIndex; | 19 import static org.tmatesoft.hg.repo.HgInternals.wrongRevisionIndex; |
21 import static org.tmatesoft.hg.repo.HgRepository.*; | 20 import static org.tmatesoft.hg.repo.HgRepository.*; |
22 import static org.tmatesoft.hg.util.LogFacility.Severity.Info; | 21 import static org.tmatesoft.hg.util.LogFacility.Severity.Info; |
23 | 22 |
24 import java.io.File; | 23 import java.io.File; |
428 | 427 |
429 /** | 428 /** |
430 * mimic 'hg diff -r clogRevIndex1 -r clogRevIndex2' | 429 * mimic 'hg diff -r clogRevIndex1 -r clogRevIndex2' |
431 */ | 430 */ |
432 public void diff(int clogRevIndex1, int clogRevIndex2, HgBlameInspector insp) throws HgCallbackTargetException { | 431 public void diff(int clogRevIndex1, int clogRevIndex2, HgBlameInspector insp) throws HgCallbackTargetException { |
433 // FIXME clogRevIndex1 and clogRevIndex2 may point to different files, need to decide whether to throw an exception | |
434 // or to attempt to look up correct file node (tricky) | |
435 int fileRevIndex1 = fileRevIndex(this, clogRevIndex1); | 432 int fileRevIndex1 = fileRevIndex(this, clogRevIndex1); |
436 int fileRevIndex2 = fileRevIndex(this, clogRevIndex2); | 433 int fileRevIndex2 = fileRevIndex(this, clogRevIndex2); |
437 BlameHelper bh = new BlameHelper(insp, 5); | 434 BlameHelper bh = new BlameHelper(insp); |
438 bh.useFileUpTo(this, clogRevIndex2); | 435 bh.prepare(this, clogRevIndex1, clogRevIndex2); |
439 bh.diff(fileRevIndex1, clogRevIndex1, fileRevIndex2, clogRevIndex2); | 436 bh.diff(fileRevIndex1, clogRevIndex1, fileRevIndex2, clogRevIndex2); |
440 } | 437 } |
441 | 438 |
442 /** | 439 /** |
443 * Walk file history up/down to revision at given changeset and report changes for each revision | 440 * Walk file history up/down to revision at given changeset and report changes for each revision |
461 } | 458 } |
462 HgInternals.checkRevlogRange(changelogRevIndexStart, changelogRevIndexEnd, lastRevision); | 459 HgInternals.checkRevlogRange(changelogRevIndexStart, changelogRevIndexEnd, lastRevision); |
463 if (!exists()) { | 460 if (!exists()) { |
464 return; | 461 return; |
465 } | 462 } |
466 FileHistory fileHistory = new FileHistory(this, changelogRevIndexStart, changelogRevIndexEnd); | 463 BlameHelper bh = new BlameHelper(insp); |
467 fileHistory.build(); | 464 FileHistory fileHistory = bh.prepare(this, changelogRevIndexStart, changelogRevIndexEnd); |
468 BlameHelper bh = new BlameHelper(insp, 10); | 465 |
469 for (FileRevisionHistoryChunk fhc : fileHistory.iterate(OldToNew)) { | |
470 // iteration order is not important here | |
471 bh.useFileUpTo(fhc.getFile(), fhc.getEndChangeset()); | |
472 } | |
473 int[] fileClogParentRevs = new int[2]; | 466 int[] fileClogParentRevs = new int[2]; |
474 int[] fileParentRevs = new int[2]; | 467 int[] fileParentRevs = new int[2]; |
475 for (FileRevisionHistoryChunk fhc : fileHistory.iterate(iterateOrder)) { | 468 for (FileRevisionHistoryChunk fhc : fileHistory.iterate(iterateOrder)) { |
476 for (int fri : fhc.fileRevisions(iterateOrder)) { | 469 for (int fri : fhc.fileRevisions(iterateOrder)) { |
477 int clogRevIndex = fhc.changeset(fri); | 470 int clogRevIndex = fhc.changeset(fri); |
496 int[] fileRevParents = new int[2]; | 489 int[] fileRevParents = new int[2]; |
497 parents(fileRevIndex, fileRevParents, null, null); | 490 parents(fileRevIndex, fileRevParents, null, null); |
498 if (changelogRevisionIndex == TIP) { | 491 if (changelogRevisionIndex == TIP) { |
499 changelogRevisionIndex = getChangesetRevisionIndex(fileRevIndex); | 492 changelogRevisionIndex = getChangesetRevisionIndex(fileRevIndex); |
500 } | 493 } |
501 BlameHelper bh = new BlameHelper(insp, 5); | |
502 bh.useFileUpTo(this, changelogRevisionIndex); | |
503 int[] fileClogParentRevs = new int[2]; | 494 int[] fileClogParentRevs = new int[2]; |
504 fileClogParentRevs[0] = fileRevParents[0] == NO_REVISION ? NO_REVISION : getChangesetRevisionIndex(fileRevParents[0]); | 495 fileClogParentRevs[0] = fileRevParents[0] == NO_REVISION ? NO_REVISION : getChangesetRevisionIndex(fileRevParents[0]); |
505 fileClogParentRevs[1] = fileRevParents[1] == NO_REVISION ? NO_REVISION : getChangesetRevisionIndex(fileRevParents[1]); | 496 fileClogParentRevs[1] = fileRevParents[1] == NO_REVISION ? NO_REVISION : getChangesetRevisionIndex(fileRevParents[1]); |
497 BlameHelper bh = new BlameHelper(insp); | |
498 int clogIndexStart = fileClogParentRevs[0] == NO_REVISION ? (fileClogParentRevs[1] == NO_REVISION ? 0 : fileClogParentRevs[1]) : fileClogParentRevs[0]; | |
499 bh.prepare(this, clogIndexStart, changelogRevisionIndex); | |
506 bh.annotateChange(fileRevIndex, changelogRevisionIndex, fileRevParents, fileClogParentRevs); | 500 bh.annotateChange(fileRevIndex, changelogRevisionIndex, fileRevParents, fileClogParentRevs); |
507 } | 501 } |
508 | 502 |
509 @Override | 503 @Override |
510 public String toString() { | 504 public String toString() { |