annotate src/org/tmatesoft/hg/core/HgChangesetFileSneaker.java @ 417:ccd7d25e5aea

New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 22 Mar 2012 20:14:06 +0100
parents src/org/tmatesoft/hg/core/HgFileInformer.java@ee8264d80747
children 9c9c442b5f2e
rev   line source
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
1 /*
396
0ae53c32ecef Straighten out exceptions thrown when file access failed - three is too much
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 374
diff changeset
2 * Copyright (c) 2011-2012 TMate Software Ltd
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
3 *
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
6 * the Free Software Foundation; version 2 of the License.
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
7 *
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
8 * This program is distributed in the hope that it will be useful,
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
11 * GNU General Public License for more details.
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
12 *
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
13 * For information on how to redistribute this software under
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
14 * the terms of a license other than GNU General Public License
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
15 * contact TMate Software at support@hg4j.com
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
16 */
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
17 package org.tmatesoft.hg.core;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
18
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
19 import org.tmatesoft.hg.internal.ManifestRevision;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
20 import org.tmatesoft.hg.repo.HgDataFile;
415
ee8264d80747 Explicit constant for regular file flags, access to flags for a given file revision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 396
diff changeset
21 import org.tmatesoft.hg.repo.HgManifest;
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
22 import org.tmatesoft.hg.repo.HgRepository;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
23 import org.tmatesoft.hg.util.Path;
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
24 import org.tmatesoft.hg.util.Status;
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
25
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
26 /**
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
27 * Primary purpose is to provide information about file revisions at specific changeset. Multiple {@link #check(Path)} calls
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
28 * are possible once {@link #changeset(Nodeid)} (and optionally, {@link #followRenames(boolean)}) were set.
251
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
29 *
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
30 * <p>Sample:
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
31 * <pre><code>
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
32 * HgChangesetFileSneaker i = new HgChangesetFileSneaker(hgRepo).changeset(Nodeid.fromString("<40 digits>")).followRenames(true);
251
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
33 * if (i.check(file)) {
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
34 * HgCatCommand catCmd = new HgCatCommand(hgRepo).revision(i.getFileRevision());
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
35 * catCmd.execute(...);
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
36 * ...
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
37 * }
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
38 * </pre></code>
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
39 *
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
40 * TODO may add #manifest(Nodeid) to select manifest according to its revision (not only changeset revision as it's now)
354
5f9073eabf06 Propagate errors with exceptions up to a end client
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 295
diff changeset
41 *
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
42 * <p>Unlike {@link HgManifest#getFileRevision(int, Path)}, this class is useful when few files from the same changeset have to be inspected
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
43 *
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
44 * @see HgManifest#getFileRevision(int, Path)
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
45 * @author Artem Tikhomirov
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
46 * @author TMate Software Ltd.
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
47 */
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
48 public class HgChangesetFileSneaker {// TODO mark final once HgFileInformer gone
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
49
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
50 private final HgRepository repo;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
51 private boolean followRenames;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
52 private Nodeid cset;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
53 private ManifestRevision cachedManifest;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
54 private HgFileRevision fileRevision;
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
55 private boolean renamed;
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
56 private Status checkResult;
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
57
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
58 public HgChangesetFileSneaker(HgRepository hgRepo) {
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
59 repo = hgRepo;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
60 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
61
251
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
62 /**
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
63 * Select specific changelog revision
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
64 *
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
65 * @param nid changeset identifier
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
66 * @return <code>this</code> for convenience
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
67 */
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
68 public HgChangesetFileSneaker changeset(Nodeid nid) {
274
9fb50c04f03c Use Nodeid.isNull check instead of NULL.equals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 251
diff changeset
69 if (nid == null || nid.isNull()) {
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
70 throw new IllegalArgumentException();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
71 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
72 cset = nid;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
73 cachedManifest = null;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
74 fileRevision = null;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
75 return this;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
76 }
251
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
77
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
78 /**
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
79 * Whether to check file origins, default is false (look up only the name supplied)
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
80 *
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
81 * @param follow <code>true</code> to check copy/rename origin of the file if it is a copy.
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
82 * @return <code>this</code> for convenience
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
83 */
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
84 public HgChangesetFileSneaker followRenames(boolean follow) {
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
85 followRenames = follow;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
86 fileRevision = null;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
87 return this;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
88 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
89
251
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
90 /**
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
91 * Shortcut to perform {@link #check(Path)} and {@link #exists()}. Result of the check may be accessed via {@link #getCheckStatus()}.
251
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
92 *
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
93 * @param file name of the file in question
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
94 * @return <code>true</code> if file is known at the selected changeset.
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
95 * @throws IllegalArgumentException if {@link #changeset(Nodeid)} not specified or file argument is bad.
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
96 * @throws HgInvalidControlFileException if access to revlog index/data entry failed
251
8c951645bea0 Some javadoc to explain HgFileInformer
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 248
diff changeset
97 */
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
98 public boolean checkExists(Path file) throws HgInvalidControlFileException {
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
99 check(file);
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
100 if (!checkResult.isOk() && checkResult.getException() instanceof HgInvalidControlFileException) {
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
101 throw (HgInvalidControlFileException) checkResult.getException();
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
102 }
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
103 return checkResult.isOk() && exists();
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
104 }
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
105
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
106 /**
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
107 * Find file (or its origin, if {@link #followRenames(boolean)} was set to <code>true</code>) among files known at specified {@link #changeset(Nodeid)}.
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
108 *
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
109 * @param file name of the file in question
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
110 * @return status object that describes outcome, {@link Status#isOk() Ok} status indicates successful completion of the operation, but doesn't imply
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
111 * file existence, use {@link #exists()} for that purpose. Message of the status may provide further hints on what exactly had happened.
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
112 * @throws IllegalArgumentException if {@link #changeset(Nodeid)} not specified or file argument is bad.
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
113 */
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
114 public Status check(Path file) {
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
115 fileRevision = null;
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
116 checkResult = null;
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
117 renamed = false;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
118 if (cset == null || file == null || file.isDirectory()) {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
119 throw new IllegalArgumentException();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
120 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
121 HgDataFile dataFile = repo.getFileNode(file);
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
122 if (!dataFile.exists()) {
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
123 checkResult = new Status(Status.Kind.OK, String.format("File named %s is not known in the repository", file));
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
124 return checkResult;
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
125 }
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
126 Nodeid toExtract = null;
415
ee8264d80747 Explicit constant for regular file flags, access to flags for a given file revision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 396
diff changeset
127 HgManifest.Flags extractRevFlags = null;
396
0ae53c32ecef Straighten out exceptions thrown when file access failed - three is too much
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 374
diff changeset
128 String phaseMsg = "Extract manifest revision failed";
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
129 try {
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
130 if (cachedManifest == null) {
367
2fadf8695f8a Use 'revision index' instead of the vague 'local revision number' concept in the API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 361
diff changeset
131 int csetRev = repo.getChangelog().getRevisionIndex(cset);
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
132 cachedManifest = new ManifestRevision(null, null); // XXX how about context and cached manifest revisions
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
133 repo.getManifest().walk(csetRev, csetRev, cachedManifest);
367
2fadf8695f8a Use 'revision index' instead of the vague 'local revision number' concept in the API
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 361
diff changeset
134 // cachedManifest shall be meaningful - changelog.getRevisionIndex() above ensures we've got version that exists.
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
135 }
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
136 toExtract = cachedManifest.nodeid(file);
415
ee8264d80747 Explicit constant for regular file flags, access to flags for a given file revision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 396
diff changeset
137 extractRevFlags = cachedManifest.flags(file);
396
0ae53c32ecef Straighten out exceptions thrown when file access failed - three is too much
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 374
diff changeset
138 phaseMsg = "Follow copy/rename failed";
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
139 if (toExtract == null && followRenames) {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
140 while (toExtract == null && dataFile.isCopy()) {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
141 renamed = true;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
142 file = dataFile.getCopySourceName();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
143 dataFile = repo.getFileNode(file);
285
6dbbc53fc46d Use Path instead of plain String for manifest file names
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 274
diff changeset
144 toExtract = cachedManifest.nodeid(file);
415
ee8264d80747 Explicit constant for regular file flags, access to flags for a given file revision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 396
diff changeset
145 extractRevFlags = cachedManifest.flags(file);
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
146 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
147 }
396
0ae53c32ecef Straighten out exceptions thrown when file access failed - three is too much
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 374
diff changeset
148 } catch (HgException ex) {
0ae53c32ecef Straighten out exceptions thrown when file access failed - three is too much
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 374
diff changeset
149 checkResult = new Status(Status.Kind.ERROR, phaseMsg, ex);
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
150 return checkResult;
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
151 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
152 if (toExtract != null) {
415
ee8264d80747 Explicit constant for regular file flags, access to flags for a given file revision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 396
diff changeset
153 fileRevision = new HgFileRevision(repo, toExtract, extractRevFlags, dataFile.getPath());
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
154 checkResult = new Status(Status.Kind.OK, String.format("File %s, revision %s found at changeset %s", dataFile.getPath(), toExtract.shortNotation(), cset.shortNotation()));
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
155 return checkResult;
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
156 }
374
c7a513d8ce20 Bad message fixed
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 367
diff changeset
157 checkResult = new Status(Status.Kind.OK, String.format("File %s nor its origins were known at repository %s revision", file, cset.shortNotation()));
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
158 return checkResult;
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
159 }
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
160
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
161 /**
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
162 * Re-get latest check status object
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
163 */
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
164 public Status getCheckStatus() {
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
165 assertCheckRan();
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
166 return checkResult;
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
167 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
168
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
169 /**
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
170 * @return result of the last {@link #check(Path)} call.
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
171 */
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
172 public boolean exists() {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
173 assertCheckRan();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
174 return fileRevision != null;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
175 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
176
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
177 /**
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
178 * @return <code>true</code> if checked file was known by another name at the time of specified changeset.
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
179 */
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
180 public boolean hasAnotherName() {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
181 assertCheckRan();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
182 return renamed;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
183 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
184
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
185 /**
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
186 * @return holder for file revision information
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
187 */
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
188 public HgFileRevision getFileRevision() {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
189 assertCheckRan();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
190 return fileRevision;
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
191 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
192
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
193 /**
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
194 * Name of the checked file as it was known at the time of the specified changeset.
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
195 *
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
196 * @return handy shortcut for <code>getFileRevision().getPath()</code>
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
197 */
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
198 public Path filename() {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
199 assertCheckRan();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
200 return fileRevision.getPath();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
201 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
202
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
203 /**
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
204 * Revision of the checked file
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
205 *
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
206 * @return handy shortcut for <code>getFileRevision().getRevision()</code>
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
207 */
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
208 public Nodeid revision() {
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
209 assertCheckRan();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
210 return fileRevision.getRevision();
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
211 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
212
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
213 private void assertCheckRan() {
361
8099939af5fa Utilize status object to supply more information about manifest check for specific file
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 354
diff changeset
214 if (checkResult == null) {
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
215 throw new HgBadStateException("Shall invoke #check(Path) first");
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
216 }
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
217 }
417
ccd7d25e5aea New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents: 415
diff changeset
218
248
3fbfce107f94 Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff changeset
219 }