Mercurial > hg4j
comparison 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 |
comparison
equal
deleted
inserted
replaced
414:bb278ccf9866 | 415:ee8264d80747 |
---|---|
15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
16 */ | 16 */ |
17 package org.tmatesoft.hg.core; | 17 package org.tmatesoft.hg.core; |
18 | 18 |
19 import org.tmatesoft.hg.repo.HgDataFile; | 19 import org.tmatesoft.hg.repo.HgDataFile; |
20 import org.tmatesoft.hg.repo.HgManifest; | |
21 import org.tmatesoft.hg.repo.HgManifest.Flags; | |
20 import org.tmatesoft.hg.repo.HgRepository; | 22 import org.tmatesoft.hg.repo.HgRepository; |
21 import org.tmatesoft.hg.util.ByteChannel; | 23 import org.tmatesoft.hg.util.ByteChannel; |
22 import org.tmatesoft.hg.util.CancelledException; | 24 import org.tmatesoft.hg.util.CancelledException; |
23 import org.tmatesoft.hg.util.Pair; | 25 import org.tmatesoft.hg.util.Pair; |
24 import org.tmatesoft.hg.util.Path; | 26 import org.tmatesoft.hg.util.Path; |
34 private final Nodeid revision; | 36 private final Nodeid revision; |
35 private final Path path; | 37 private final Path path; |
36 private Path origin; | 38 private Path origin; |
37 private Boolean isCopy = null; // null means not yet known | 39 private Boolean isCopy = null; // null means not yet known |
38 private Pair<Nodeid, Nodeid> parents; | 40 private Pair<Nodeid, Nodeid> parents; |
41 private Flags flags; // null unless set/extracted | |
39 | 42 |
40 public HgFileRevision(HgRepository hgRepo, Nodeid rev, Path p) { | 43 /** |
44 * FIXME has to be public? | |
45 * | |
46 * @param hgRepo repository | |
47 * @param rev file revision | |
48 * @param manifestEntryFlags file flags at this revision (optional, may be null) | |
49 * @param p path of the file at the given revision | |
50 */ | |
51 public HgFileRevision(HgRepository hgRepo, Nodeid rev, HgManifest.Flags manifestEntryFlags, Path p) { | |
41 if (hgRepo == null || rev == null || p == null) { | 52 if (hgRepo == null || rev == null || p == null) { |
42 // since it's package local, it is our code to blame for non validated arguments | 53 // since it's package local, it is our code to blame for non validated arguments |
43 throw new IllegalArgumentException(); | 54 throw new IllegalArgumentException(); |
44 } | 55 } |
45 repo = hgRepo; | 56 repo = hgRepo; |
46 revision = rev; | 57 revision = rev; |
58 flags = manifestEntryFlags; | |
47 path = p; | 59 path = p; |
48 } | 60 } |
49 | 61 |
50 // 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 | 62 // 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 |
51 HgFileRevision(HgRepository hgRepo, Nodeid rev, Path p, Path orig) { | 63 HgFileRevision(HgRepository hgRepo, Nodeid rev, HgManifest.Flags flags, Path p, Path orig) { |
52 this(hgRepo, rev, p); | 64 this(hgRepo, rev, flags, p); |
53 isCopy = Boolean.valueOf(orig == null); | 65 isCopy = Boolean.valueOf(orig == null); |
54 origin = orig; | 66 origin = orig; |
55 } | 67 } |
56 | 68 |
57 public Path getPath() { | 69 public Path getPath() { |
58 return path; | 70 return path; |
59 } | 71 } |
60 | 72 |
61 public Nodeid getRevision() { | 73 public Nodeid getRevision() { |
62 return revision; | 74 return revision; |
75 } | |
76 | |
77 /** | |
78 * Executable or symbolic link, or <code>null</code> if regular file | |
79 * @throws HgInvalidRevisionException if supplied nodeid doesn't identify any revision from this revlog | |
80 * @throws HgInvalidControlFileException if access to revlog index/data entry failed | |
81 */ | |
82 public HgManifest.Flags getFileFlags() throws HgInvalidControlFileException, HgInvalidRevisionException { | |
83 if (flags == null) { | |
84 HgDataFile df = repo.getFileNode(path); | |
85 int revIdx = df.getRevisionIndex(revision); | |
86 flags = df.getFlags(revIdx); | |
87 } | |
88 return flags; | |
63 } | 89 } |
64 | 90 |
65 public boolean wasCopied() throws HgException { | 91 public boolean wasCopied() throws HgException { |
66 if (isCopy == null) { | 92 if (isCopy == null) { |
67 checkCopy(); | 93 checkCopy(); |