Mercurial > jhg
comparison src/org/tmatesoft/hg/core/HgFileRevision.java @ 345:58725dd511b3
Provide access to revision's origins
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 22 Nov 2011 03:14:40 +0100 |
| parents | ee6b467c1a5f |
| children | 5f9073eabf06 |
comparison
equal
deleted
inserted
replaced
| 344:168f1994de7e | 345:58725dd511b3 |
|---|---|
| 19 import org.tmatesoft.hg.repo.HgDataFile; | 19 import org.tmatesoft.hg.repo.HgDataFile; |
| 20 import org.tmatesoft.hg.repo.HgInternals; | 20 import org.tmatesoft.hg.repo.HgInternals; |
| 21 import org.tmatesoft.hg.repo.HgRepository; | 21 import org.tmatesoft.hg.repo.HgRepository; |
| 22 import org.tmatesoft.hg.util.ByteChannel; | 22 import org.tmatesoft.hg.util.ByteChannel; |
| 23 import org.tmatesoft.hg.util.CancelledException; | 23 import org.tmatesoft.hg.util.CancelledException; |
| 24 import org.tmatesoft.hg.util.Pair; | |
| 24 import org.tmatesoft.hg.util.Path; | 25 import org.tmatesoft.hg.util.Path; |
| 25 | 26 |
| 26 /** | 27 /** |
| 27 * Keeps together information about specific file revision | 28 * Keeps together information about specific file revision |
| 28 * | 29 * |
| 33 private final HgRepository repo; | 34 private final HgRepository repo; |
| 34 private final Nodeid revision; | 35 private final Nodeid revision; |
| 35 private final Path path; | 36 private final Path path; |
| 36 private Path origin; | 37 private Path origin; |
| 37 private Boolean isCopy = null; // null means not yet known | 38 private Boolean isCopy = null; // null means not yet known |
| 39 private Pair<Nodeid, Nodeid> parents; | |
| 38 | 40 |
| 39 public HgFileRevision(HgRepository hgRepo, Nodeid rev, Path p) { | 41 public HgFileRevision(HgRepository hgRepo, Nodeid rev, Path p) { |
| 40 if (hgRepo == null || rev == null || p == null) { | 42 if (hgRepo == null || rev == null || p == null) { |
| 41 // since it's package local, it is our code to blame for non validated arguments | 43 // since it's package local, it is our code to blame for non validated arguments |
| 42 throw new IllegalArgumentException(); | 44 throw new IllegalArgumentException(); |
| 73 return origin; | 75 return origin; |
| 74 } | 76 } |
| 75 return null; | 77 return null; |
| 76 } | 78 } |
| 77 | 79 |
| 80 /** | |
| 81 * Access revisions this file revision originates from. | |
| 82 * Note, these revisions are records in the file history, not that of the whole repository (aka changeset revisions) | |
| 83 * In most cases, only one parent revision would be present, only for merge revisions one can expect both. | |
| 84 * | |
| 85 * @return parent revisions of this file revision, with {@link Nodeid#NULL} for missing values. | |
| 86 */ | |
| 87 public Pair<Nodeid, Nodeid> getParents() { | |
| 88 if (parents == null) { | |
| 89 HgDataFile fn = repo.getFileNode(path); | |
| 90 int localRevision = fn.getLocalRevision(revision); | |
| 91 int[] pr = new int[2]; | |
| 92 byte[] p1 = new byte[20], p2 = new byte[20]; | |
| 93 // XXX Revlog#parents is not the best method to use here | |
| 94 // need smth that gives Nodeids (piped through Pool<Nodeid> from repo's context) | |
| 95 fn.parents(localRevision, pr, p1, p2); | |
| 96 parents = new Pair<Nodeid, Nodeid>(Nodeid.fromBinary(p1, 0), Nodeid.fromBinary(p2, 0)); | |
| 97 } | |
| 98 return parents; | |
| 99 } | |
| 100 | |
| 78 public void putContentTo(ByteChannel sink) throws HgDataStreamException, CancelledException { | 101 public void putContentTo(ByteChannel sink) throws HgDataStreamException, CancelledException { |
| 79 HgDataFile fn = repo.getFileNode(path); | 102 HgDataFile fn = repo.getFileNode(path); |
| 80 int localRevision = fn.getLocalRevision(revision); | 103 int localRevision = fn.getLocalRevision(revision); |
| 81 fn.contentWithFilters(localRevision, sink); | 104 fn.contentWithFilters(localRevision, sink); |
| 82 } | 105 } |
