Mercurial > hg4j
diff src/org/tmatesoft/hg/repo/HgDataFile.java @ 74:6f1b88693d48
Complete refactoring to org.tmatesoft
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 24 Jan 2011 03:14:45 +0100 |
parents | src/com/tmate/hgkit/ll/HgDataFile.java@576d6e8a09f6 |
children | c677e1593919 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/tmatesoft/hg/repo/HgDataFile.java Mon Jan 24 03:14:45 2011 +0100 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2010-2011 TMate Software Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For information on how to redistribute this software under + * the terms of a license other than GNU General Public License + * contact TMate Software at support@svnkit.com + */ +package org.tmatesoft.hg.repo; + +import static org.tmatesoft.hg.repo.HgRepository.TIP; + +import org.tmatesoft.hg.core.Nodeid; +import org.tmatesoft.hg.core.Path; + + + +/** + * ? name:HgFileNode? + * + * @author Artem Tikhomirov + * @author TMate Software Ltd. + */ +public class HgDataFile extends Revlog { + + // absolute from repo root? + // slashes, unix-style? + // repo location agnostic, just to give info to user, not to access real storage + private final Path path; + + /*package-local*/HgDataFile(HgRepository hgRepo, Path path, RevlogStream content) { + super(hgRepo, content); + this.path = path; + } + + public boolean exists() { + return content != null; // XXX need better impl + } + + public Path getPath() { + return path; // hgRepo.backresolve(this) -> name? + } + + public int length(Nodeid nodeid) { + return content.dataLength(getLocalRevisionNumber(nodeid)); + } + + public byte[] content() { + return content(TIP); + } + + public void history(Changeset.Inspector inspector) { + history(0, content.revisionCount() - 1, inspector); + } + + public void history(int start, int end, Changeset.Inspector inspector) { + if (!exists()) { + throw new IllegalStateException("Can't get history of invalid repository file node"); + } + final int[] commitRevisions = new int[end - start + 1]; + Revlog.Inspector insp = new Revlog.Inspector() { + int count = 0; + + public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { + commitRevisions[count++] = linkRevision; + } + }; + content.iterate(start, end, false, insp); + getRepo().getChangelog().range(inspector, commitRevisions); + } +}