Mercurial > jhg
annotate src/com/tmate/hgkit/ll/Changelog.java @ 159:f5aed108754e wrap-data-access
Approach with DataAccess instead of plain byte[] was merged into default branch
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 09 Mar 2011 13:28:02 +0100 | 
| parents | 9429c7bd1920 | 
| children | 
| rev | line source | 
|---|---|
| 21 
e929cecae4e1
Refactor to move revlog content to base class
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
3diff
changeset | 1 /* | 
| 
e929cecae4e1
Refactor to move revlog content to base class
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
3diff
changeset | 2 * Copyright (c) 2010, 2011 Artem Tikhomirov | 
| 0 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 */ | 
| 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 package com.tmate.hgkit.ll; | 
| 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 6 import java.util.ArrayList; | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 7 import java.util.Arrays; | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 8 import java.util.List; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 9 | 
| 51 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 10 import com.tmate.hgkit.fs.DataAccess; | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 11 | 
| 0 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 /** | 
| 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 * Representation of the Mercurial changelog file (list of ChangeSets) | 
| 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 * @author artem | 
| 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 */ | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 16 public class Changelog extends Revlog { | 
| 0 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 18 /*package-local*/ Changelog(HgRepository hgRepo, RevlogStream content) { | 
| 21 
e929cecae4e1
Refactor to move revlog content to base class
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
3diff
changeset | 19 super(hgRepo, content); | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 20 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 21 | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 22 public void all(final Changeset.Inspector inspector) { | 
| 48 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
47diff
changeset | 23 range(0, content.revisionCount() - 1, inspector); | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
47diff
changeset | 24 } | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
47diff
changeset | 25 | 
| 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
47diff
changeset | 26 public void range(int start, int end, final Changeset.Inspector inspector) { | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 27 Revlog.Inspector i = new Revlog.Inspector() { | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 28 | 
| 51 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 29 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 30 byte[] data = da.byteArray(); | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 31 Changeset cset = Changeset.parse(data, 0, data.length); | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 32 // XXX there's no guarantee for Changeset.Callback that distinct instance comes each time, consider instance reuse | 
| 47 
b01500fe2604
Log command output to match 'hg log'
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
21diff
changeset | 33 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 34 } | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 35 }; | 
| 48 
e34f90b9ded1
Limit option for history/log
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
47diff
changeset | 36 content.iterate(start, end, true, i); | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 37 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 38 | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 39 public List<Changeset> range(int start, int end) { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 40 final ArrayList<Changeset> rv = new ArrayList<Changeset>(end - start + 1); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 41 Revlog.Inspector i = new Revlog.Inspector() { | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 42 | 
| 51 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 43 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) { | 
| 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 44 byte[] data = da.byteArray(); | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 45 Changeset cset = Changeset.parse(data, 0, data.length); | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 46 rv.add(cset); | 
| 2 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 47 } | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 48 }; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 49 content.iterate(start, end, true, i); | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 50 return rv; | 
| 
08db726a0fb7
Shaping out low-level Hg structures
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
0diff
changeset | 51 } | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 52 | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 53 public void range(final Changeset.Inspector inspector, final int... revisions) { | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 54 if (revisions == null || revisions.length == 0) { | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 55 return; | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 56 } | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 57 Revlog.Inspector i = new Revlog.Inspector() { | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 58 | 
| 51 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 59 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) { | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 60 if (Arrays.binarySearch(revisions, revisionNumber) >= 0) { | 
| 51 
9429c7bd1920
Try DataAccess to reach revision data instead of plain byte arrays
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
48diff
changeset | 61 byte[] data = da.byteArray(); | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 62 Changeset cset = Changeset.parse(data, 0, data.length); | 
| 47 
b01500fe2604
Log command output to match 'hg log'
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
21diff
changeset | 63 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); | 
| 3 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 64 } | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 65 } | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 66 }; | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 67 Arrays.sort(revisions); | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 68 content.iterate(revisions[0], revisions[revisions.length - 1], true, i); | 
| 
24bb4f365164
Rudimentary log functionality with basic infrastructure is in place
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
2diff
changeset | 69 } | 
| 0 
dbd663faec1f
Basic changelog parsing
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 70 } | 
