Mercurial > jhg
diff src/org/tmatesoft/hg/core/HgFileRevision.java @ 415:ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 22 Mar 2012 18:54:11 +0100 |
parents | 0ae53c32ecef |
children | 9c9c442b5f2e |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/core/HgFileRevision.java Wed Mar 21 20:51:12 2012 +0100 +++ b/src/org/tmatesoft/hg/core/HgFileRevision.java Thu Mar 22 18:54:11 2012 +0100 @@ -17,6 +17,8 @@ package org.tmatesoft.hg.core; import org.tmatesoft.hg.repo.HgDataFile; +import org.tmatesoft.hg.repo.HgManifest; +import org.tmatesoft.hg.repo.HgManifest.Flags; import org.tmatesoft.hg.repo.HgRepository; import org.tmatesoft.hg.util.ByteChannel; import org.tmatesoft.hg.util.CancelledException; @@ -36,20 +38,30 @@ private Path origin; private Boolean isCopy = null; // null means not yet known private Pair<Nodeid, Nodeid> parents; + private Flags flags; // null unless set/extracted - public HgFileRevision(HgRepository hgRepo, Nodeid rev, Path p) { + /** + * FIXME has to be public? + * + * @param hgRepo repository + * @param rev file revision + * @param manifestEntryFlags file flags at this revision (optional, may be null) + * @param p path of the file at the given revision + */ + public HgFileRevision(HgRepository hgRepo, Nodeid rev, HgManifest.Flags manifestEntryFlags, Path p) { if (hgRepo == null || rev == null || p == null) { // since it's package local, it is our code to blame for non validated arguments throw new IllegalArgumentException(); } repo = hgRepo; revision = rev; + flags = manifestEntryFlags; path = p; } // this cons shall be used when we know whether p was a copy. Perhaps, shall pass Map<Path,Path> instead to stress orig argument is not optional - HgFileRevision(HgRepository hgRepo, Nodeid rev, Path p, Path orig) { - this(hgRepo, rev, p); + HgFileRevision(HgRepository hgRepo, Nodeid rev, HgManifest.Flags flags, Path p, Path orig) { + this(hgRepo, rev, flags, p); isCopy = Boolean.valueOf(orig == null); origin = orig; } @@ -61,6 +73,20 @@ public Nodeid getRevision() { return revision; } + + /** + * Executable or symbolic link, or <code>null</code> if regular file + * @throws HgInvalidRevisionException if supplied nodeid doesn't identify any revision from this revlog + * @throws HgInvalidControlFileException if access to revlog index/data entry failed + */ + public HgManifest.Flags getFileFlags() throws HgInvalidControlFileException, HgInvalidRevisionException { + if (flags == null) { + HgDataFile df = repo.getFileNode(path); + int revIdx = df.getRevisionIndex(revision); + flags = df.getFlags(revIdx); + } + return flags; + } public boolean wasCopied() throws HgException { if (isCopy == null) {