Mercurial > jhg
annotate src/org/tmatesoft/hg/internal/Internals.java @ 526:2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 15 Jan 2013 17:07:19 +0100 |
parents | 0be5be8d57e9 |
children | 0f6fa88e2162 |
rev | line source |
---|---|
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
1 /* |
526
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
2 * Copyright (c) 2011-2013 TMate Software Ltd |
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
3 * |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
4 * This program is free software; you can redistribute it and/or modify |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
6 * the Free Software Foundation; version 2 of the License. |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
7 * |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
8 * This program is distributed in the hope that it will be useful, |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
11 * GNU General Public License for more details. |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
12 * |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
13 * For information on how to redistribute this software under |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
14 * the terms of a license other than GNU General Public License |
102
a3a2e5deb320
Updated contact address to support@hg4j.com
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
83
diff
changeset
|
15 * contact TMate Software at support@hg4j.com |
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
16 */ |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
17 package org.tmatesoft.hg.internal; |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
18 |
456
909306e412e2
Refactor LogFacility and SessionContext, better API for both
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
425
diff
changeset
|
19 import static org.tmatesoft.hg.util.LogFacility.Severity.Error; |
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
20 |
202
706bcc7cfee4
Basic test for HgIncomingCommand. Fix RepositoryComparator for cases when whole repository is unknown. Respect freshly initialized (empty) repositories in general.
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
150
diff
changeset
|
21 import java.io.File; |
706bcc7cfee4
Basic test for HgIncomingCommand. Fix RepositoryComparator for cases when whole repository is unknown. Respect freshly initialized (empty) repositories in general.
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
150
diff
changeset
|
22 import java.io.IOException; |
411
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
23 import java.nio.charset.Charset; |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
24 import java.util.ArrayList; |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
25 import java.util.Arrays; |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
26 import java.util.Collections; |
407
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
27 import java.util.Iterator; |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
28 import java.util.LinkedHashSet; |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
29 import java.util.List; |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
30 import java.util.StringTokenizer; |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
31 |
382
82336b7c54f4
Per-repository UpdateConfigCommand completed. Access to system properties through SessionContext to ease alternation
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
379
diff
changeset
|
32 import org.tmatesoft.hg.core.SessionContext; |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
33 import org.tmatesoft.hg.repo.HgDataFile; |
525
0be5be8d57e9
Repository checkout support, first iteration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
504
diff
changeset
|
34 import org.tmatesoft.hg.repo.HgInternals; |
331
a37ce7145c3f
Access to repository configuration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
295
diff
changeset
|
35 import org.tmatesoft.hg.repo.HgRepoConfig.ExtensionsSection; |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
36 import org.tmatesoft.hg.repo.HgRepository; |
526
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
37 import org.tmatesoft.hg.repo.HgRepositoryFiles; |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
38 import org.tmatesoft.hg.repo.HgRepositoryLock; |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
39 import org.tmatesoft.hg.repo.HgRuntimeException; |
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
40 import org.tmatesoft.hg.util.PathRewrite; |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
41 |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
42 /** |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
43 * Fields/members that shall not be visible |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
44 * |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
45 * @author Artem Tikhomirov |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
46 * @author TMate Software Ltd. |
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
47 */ |
501
d2f6ab541330
Change the way extensions are accessed (with ExtensionsManager now), add preliminary Rebase extension support
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
493
diff
changeset
|
48 public final class Internals implements SessionContext.Source { |
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
49 |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
50 /** |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
51 * Allows to specify Mercurial installation directory to detect installation-wide configurations. |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
52 * Without this property set, hg4j would attempt to deduce this value locating hg executable. |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
53 */ |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
54 public static final String CFG_PROPERTY_HG_INSTALL_ROOT = "hg4j.hg.install_root"; |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
55 |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
56 /** |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
57 * Tells repository not to cache files/revlogs |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
58 * XXX perhaps, need to respect this property not only for data files, but for manifest and changelog as well? |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
59 * (@see HgRepository#getChangelog and #getManifest()) |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
60 */ |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
61 public static final String CFG_PROPERTY_REVLOG_STREAM_CACHE = "hg4j.repo.disable_revlog_cache"; |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
62 |
411
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
63 /** |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
64 * Name of charset to use when translating Unicode filenames to Mercurial storage paths, string, |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
65 * to resolve with {@link Charset#forName(String)}. |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
66 * E.g. <code>"cp1251"</code> or <code>"Latin-1"</code>. |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
67 * |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
68 * <p>Mercurial uses system encoding when mangling storage paths. Default value |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
69 * based on 'file.encoding' Java system property is usually fine here, however |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
70 * in certain scenarios it may be desirable to force a different one, and this |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
71 * property is exactly for this purpose. |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
72 * |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
73 * <p>E.g. Eclipse defaults to project encoding (Launch config, Common page) when launching an application, |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
74 * and if your project happen to use anything but filesystem default (say, UTF8 on cp1251 system), |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
75 * native storage paths won't match |
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
76 */ |
412
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
77 public static final String CFG_PROPERTY_FS_FILENAME_ENCODING = "hg.fs.filename.encoding"; |
411
464b4404e75d
Issue 29: Bad storage path translation - translate Unicode chars to filesystem encoding
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
409
diff
changeset
|
78 |
504
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
79 /** |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
80 * Timeout, in seconds, to acquire filesystem {@link HgRepositoryLock lock}. |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
81 * |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
82 * Mercurial provides 'ui.timeout' in hgrc (defaults to 600 seconds) to specify how long |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
83 * it shall try to acquire a lock for storage or working directory prior to fail. |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
84 * |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
85 * This configuration property allows to override timeout value from Mercurial's configuration |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
86 * file and use Hg4J-specific value instead. |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
87 * |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
88 * Integer value, use negative for attempts to acquire lock until success, and zero to try once and fail immediately. |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
89 */ |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
90 public static final String CFG_PROPERTY_FS_LOCK_TIMEOUT = "hg4j.fs.lock.timeout"; |
bf352ce2b97f
Allow to override lock timeout from within Hg4J
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
501
diff
changeset
|
91 |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
92 private List<Filter.Factory> filterFactories; |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
93 private final HgRepository repo; |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
94 private final File repoDir; |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
95 private final boolean isCaseSensitiveFileSystem; |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
96 private final boolean shallCacheRevlogsInRepo; |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
97 private final DataAccessProvider dataAccess; |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
98 |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
99 @SuppressWarnings("unused") |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
100 private final int requiresFlags; |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
101 |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
102 private final PathRewrite dataPathHelper; // access to file storage area (usually under .hg/store/data/), with filenames mangled |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
103 private final PathRewrite repoPathHelper; // access to system files (under .hg/store if requires has 'store' flag) |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
104 |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
105 public Internals(HgRepository hgRepo, File hgDir) throws HgRuntimeException { |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
106 repo = hgRepo; |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
107 repoDir = hgDir; |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
108 isCaseSensitiveFileSystem = !runningOnWindows(); |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
109 SessionContext ctx = repo.getSessionContext(); |
456
909306e412e2
Refactor LogFacility and SessionContext, better API for both
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
425
diff
changeset
|
110 shallCacheRevlogsInRepo = new PropertyMarshal(ctx).getBoolean(CFG_PROPERTY_REVLOG_STREAM_CACHE, true); |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
111 dataAccess = new DataAccessProvider(ctx); |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
112 RepoInitializer repoInit = new RepoInitializer().initRequiresFromFile(repoDir); |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
113 requiresFlags = repoInit.getRequires(); |
501
d2f6ab541330
Change the way extensions are accessed (with ExtensionsManager now), add preliminary Rebase extension support
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
493
diff
changeset
|
114 dataPathHelper = repoInit.buildDataFilesHelper(getSessionContext()); |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
115 repoPathHelper = repoInit.buildStoreFilesHelper(); |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
116 } |
295
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
292
diff
changeset
|
117 |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
118 public boolean isInvalid() { |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
119 return !repoDir.exists() || !repoDir.isDirectory(); |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
120 } |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
121 |
526
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
122 public File getRepositoryFile(HgRepositoryFiles f) { |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
123 return f.residesUnderRepositoryRoot() ? getFileFromRepoDir(f.getName()) : getFileFromDataDir(f.getName()); |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
124 } |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
125 |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
126 /** |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
127 * Access files under ".hg/". |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
128 * File not necessarily exists, this method is merely a factory for Files at specific, configuration-dependent location. |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
129 * |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
130 * @param name shall be normalized path |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
131 */ |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
132 public File getFileFromRepoDir(String name) { |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
133 return new File(repoDir, name); |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
134 } |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
135 |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
136 /** |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
137 * Access files under ".hg/store/" or ".hg/" depending on use of 'store' in requires. |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
138 * File not necessarily exists, this method is merely a factory for Files at specific, configuration-dependent location. |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
139 * |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
140 * @param name shall be normalized path |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
141 */ |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
142 public File getFileFromStoreDir(String name) { |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
143 CharSequence location = repoPathHelper.rewrite(name); |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
144 return new File(repoDir, location.toString()); |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
145 } |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
146 |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
147 /** |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
148 * Access files under ".hg/store/data", ".hg/store/dh/" or ".hg/data" according to settings in requires file. |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
149 * File not necessarily exists, this method is merely a factory for Files at specific, configuration-dependent location. |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
150 * |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
151 * @param name shall be normalized path, without .i or .d suffixes |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
152 */ |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
153 public File getFileFromDataDir(CharSequence path) { |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
154 CharSequence storagePath = dataPathHelper.rewrite(path); |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
155 return new File(repoDir, storagePath.toString()); |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
156 } |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
157 |
501
d2f6ab541330
Change the way extensions are accessed (with ExtensionsManager now), add preliminary Rebase extension support
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
493
diff
changeset
|
158 public SessionContext getSessionContext() { |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
159 return repo.getSessionContext(); |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
160 } |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
161 |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
162 public HgRepository getRepo() { |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
163 return repo; |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
164 } |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
165 |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
166 public DataAccessProvider getDataAccess() { |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
167 return dataAccess; |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
168 } |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
169 |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
170 public PathRewrite buildNormalizePathRewrite() { |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
171 if (runningOnWindows()) { |
409
0f5696623512
Support glob path pattern rewrite to facilitate use of globs with Windows path separator
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
407
diff
changeset
|
172 return new WinToNixPathRewrite(); |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
173 } else { |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
174 return new PathRewrite.Empty(); // or strip leading slash, perhaps? |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
175 } |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
176 } |
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
177 |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
178 public List<Filter.Factory> getFilters() { |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
179 if (filterFactories == null) { |
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
180 filterFactories = new ArrayList<Filter.Factory>(); |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
181 ExtensionsSection cfg = repo.getConfiguration().getExtensions(); |
331
a37ce7145c3f
Access to repository configuration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
295
diff
changeset
|
182 if (cfg.isEnabled("eol")) { |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
183 NewlineFilter.Factory ff = new NewlineFilter.Factory(); |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
184 ff.initialize(repo); |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
185 filterFactories.add(ff); |
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
186 } |
331
a37ce7145c3f
Access to repository configuration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
295
diff
changeset
|
187 if (cfg.isEnabled("keyword")) { |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
188 KeywordFilter.Factory ff = new KeywordFilter.Factory(); |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
189 ff.initialize(repo); |
114
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
190 filterFactories.add(ff); |
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
191 } |
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
192 } |
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
193 return filterFactories; |
46291ec605a0
Filters to read and initialize according to configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
102
diff
changeset
|
194 } |
202
706bcc7cfee4
Basic test for HgIncomingCommand. Fix RepositoryComparator for cases when whole repository is unknown. Respect freshly initialized (empty) repositories in general.
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
150
diff
changeset
|
195 |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
196 public boolean isCaseSensitiveFileSystem() { |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
197 return isCaseSensitiveFileSystem; |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
198 } |
412
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
199 |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
200 public EncodingHelper buildFileNameEncodingHelper() { |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
201 SessionContext ctx = repo.getSessionContext(); |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
202 return new EncodingHelper(getFileEncoding(ctx), ctx); |
412
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
203 } |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
204 |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
205 /*package-local*/ static Charset getFileEncoding(SessionContext ctx) { |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
206 Object altEncoding = ctx.getConfigurationProperty(CFG_PROPERTY_FS_FILENAME_ENCODING, null); |
412
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
207 Charset cs; |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
208 if (altEncoding == null) { |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
209 cs = Charset.defaultCharset(); |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
210 } else { |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
211 try { |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
212 cs = Charset.forName(altEncoding.toString()); |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
213 } catch (IllegalArgumentException ex) { |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
214 // both IllegalCharsetNameException and UnsupportedCharsetException are subclasses of IAE, too |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
215 // not severe enough to throw an exception, imo. Just record the fact it's bad ad we ignore it |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
216 ctx.getLog().dump(Internals.class, Error, ex, String.format("Bad configuration value for filename encoding %s", altEncoding)); |
412
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
217 cs = Charset.defaultCharset(); |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
218 } |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
219 } |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
220 return cs; |
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
411
diff
changeset
|
221 } |
493
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
222 |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
223 /** |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
224 * Access to mangled name of a file in repository storage, may come handy for debug. |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
225 * @return mangled path of the repository file |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
226 */ |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
227 public CharSequence getStoragePath(HgDataFile df) { |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
228 return dataPathHelper.rewrite(df.getPath().toString()); |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
229 } |
ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
490
diff
changeset
|
230 |
526
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
231 |
292
a415fe296a50
Refactor PathRewrite to accept any char sequence, not only string
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
202
diff
changeset
|
232 public static boolean runningOnWindows() { |
a415fe296a50
Refactor PathRewrite to accept any char sequence, not only string
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
202
diff
changeset
|
233 return System.getProperty("os.name").indexOf("Windows") != -1; |
a415fe296a50
Refactor PathRewrite to accept any char sequence, not only string
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
202
diff
changeset
|
234 } |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
235 |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
236 /** |
419
7f136a3fa671
Clean javadoc to fix obvious warnings
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
418
diff
changeset
|
237 * @param fsHint optional hint pointing to filesystem of interest (generally, it's possible to mount |
413
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
238 * filesystems with different capabilities and repository's capabilities would depend on which fs it resides) |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
239 * @return <code>true</code> if executable files deserve tailored handling |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
240 */ |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
241 public static boolean checkSupportsExecutables(File fsHint) { |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
242 // *.exe are not executables for Mercurial |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
243 return !runningOnWindows(); |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
244 } |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
245 |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
246 /** |
419
7f136a3fa671
Clean javadoc to fix obvious warnings
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
418
diff
changeset
|
247 * @param fsHint optional hint pointing to filesystem of interest (generally, it's possible to mount |
413
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
248 * filesystems with different capabilities and repository's capabilities would depend on which fs it resides) |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
249 * @return <code>true</code> if filesystem knows what symbolic links are |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
250 */ |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
251 public static boolean checkSupportsSymlinks(File fsHint) { |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
252 // Windows supports soft symbolic links starting from Vista |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
253 // However, as of Mercurial 2.1.1, no support for this functionality |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
254 // XXX perhaps, makes sense to override with a property a) to speed up when no links are in use b) investigate how this runs windows |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
255 return !runningOnWindows(); |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
256 } |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
257 |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
258 |
7f27122011c3
Support and respect for symbolic links and executable flag, with /bin/ls backed implementation to discover these
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
259 /** |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
260 * For Unix, returns installation root, which is the parent directory of the hg executable (or symlink) being run. |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
261 * For Windows, it's Mercurial installation directory itself |
382
82336b7c54f4
Per-repository UpdateConfigCommand completed. Access to system properties through SessionContext to ease alternation
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
379
diff
changeset
|
262 * @param ctx |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
263 */ |
382
82336b7c54f4
Per-repository UpdateConfigCommand completed. Access to system properties through SessionContext to ease alternation
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
379
diff
changeset
|
264 private static File findHgInstallRoot(SessionContext ctx) { |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
265 // let clients to override Hg install location |
456
909306e412e2
Refactor LogFacility and SessionContext, better API for both
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
425
diff
changeset
|
266 String p = (String) ctx.getConfigurationProperty(CFG_PROPERTY_HG_INSTALL_ROOT, null); |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
267 if (p != null) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
268 return new File(p); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
269 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
270 StringTokenizer st = new StringTokenizer(System.getenv("PATH"), System.getProperty("path.separator"), false); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
271 final boolean runsOnWin = runningOnWindows(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
272 while (st.hasMoreTokens()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
273 String pe = st.nextToken(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
274 File execCandidate = new File(pe, runsOnWin ? "hg.exe" : "hg"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
275 if (execCandidate.exists() && execCandidate.isFile()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
276 File execDir = execCandidate.getParentFile(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
277 // e.g. on Unix runs "/shared/tools/bin/hg", directory of interest is "/shared/tools/" |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
278 return runsOnWin ? execDir : execDir.getParentFile(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
279 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
280 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
281 return null; |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
282 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
283 |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
284 /** |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
285 * @see http://www.selenic.com/mercurial/hgrc.5.html |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
286 */ |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
287 public ConfigFile readConfiguration() throws IOException { |
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
288 SessionContext sessionCtx = repo.getSessionContext(); |
483
e31e85cf4d4c
Handle include and unset directives in config files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
456
diff
changeset
|
289 ConfigFile configFile = new ConfigFile(sessionCtx); |
e31e85cf4d4c
Handle include and unset directives in config files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
456
diff
changeset
|
290 File hgInstallRoot = findHgInstallRoot(sessionCtx); // may be null |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
291 // |
351
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
292 if (runningOnWindows()) { |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
293 if (hgInstallRoot != null) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
294 for (File f : getWindowsConfigFilesPerInstall(hgInstallRoot)) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
295 configFile.addLocation(f); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
296 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
297 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
298 LinkedHashSet<String> locations = new LinkedHashSet<String>(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
299 locations.add(System.getenv("USERPROFILE")); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
300 locations.add(System.getenv("HOME")); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
301 locations.remove(null); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
302 for (String loc : locations) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
303 File location = new File(loc); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
304 configFile.addLocation(new File(location, "Mercurial.ini")); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
305 configFile.addLocation(new File(location, ".hgrc")); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
306 } |
351
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
307 } else { |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
308 if (hgInstallRoot != null) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
309 File d = new File(hgInstallRoot, "etc/mercurial/hgrc.d/"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
310 if (d.isDirectory() && d.canRead()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
311 for (File f : listConfigFiles(d)) { |
351
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
312 configFile.addLocation(f); |
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
313 } |
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
314 } |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
315 configFile.addLocation(new File(hgInstallRoot, "etc/mercurial/hgrc")); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
316 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
317 // same, but with absolute paths |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
318 File d = new File("/etc/mercurial/hgrc.d/"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
319 if (d.isDirectory() && d.canRead()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
320 for (File f : listConfigFiles(d)) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
321 configFile.addLocation(f); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
322 } |
351
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
323 } |
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
324 configFile.addLocation(new File("/etc/mercurial/hgrc")); |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
325 configFile.addLocation(new File(System.getenv("HOME"), ".hgrc")); |
351
5abba41751e6
Read extra predefined locations with mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
331
diff
changeset
|
326 } |
331
a37ce7145c3f
Access to repository configuration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
295
diff
changeset
|
327 // last one, overrides anything else |
a37ce7145c3f
Access to repository configuration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
295
diff
changeset
|
328 // <repo>/.hg/hgrc |
490
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
483
diff
changeset
|
329 configFile.addLocation(getFileFromRepoDir("hgrc")); |
331
a37ce7145c3f
Access to repository configuration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
295
diff
changeset
|
330 return configFile; |
a37ce7145c3f
Access to repository configuration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
295
diff
changeset
|
331 } |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
332 |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
333 private static List<File> getWindowsConfigFilesPerInstall(File hgInstallDir) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
334 File f = new File(hgInstallDir, "Mercurial.ini"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
335 if (f.exists()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
336 return Collections.singletonList(f); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
337 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
338 f = new File(hgInstallDir, "hgrc.d/"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
339 if (f.canRead() && f.isDirectory()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
340 return listConfigFiles(f); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
341 } |
418
528b6780a8bd
A bit of FIXME cleanup (mostly degraded to TODO post 1.0), comments and javadoc
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
415
diff
changeset
|
342 // TODO post-1.0 query registry, e.g. with |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
343 // Runtime.exec("reg query HKLM\Software\Mercurial") |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
344 // |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
345 f = new File("C:\\Mercurial\\Mercurial.ini"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
346 if (f.exists()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
347 return Collections.singletonList(f); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
348 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
349 return Collections.emptyList(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
350 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
351 |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
352 private static List<File> listConfigFiles(File dir) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
353 assert dir.canRead(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
354 assert dir.isDirectory(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
355 final File[] allFiles = dir.listFiles(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
356 // File is Comparable, lexicographically by default |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
357 Arrays.sort(allFiles); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
358 ArrayList<File> rv = new ArrayList<File>(allFiles.length); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
359 for (File f : allFiles) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
360 if (f.getName().endsWith(".rc")) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
361 rv.add(f); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
362 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
363 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
364 return rv; |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
365 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
366 |
382
82336b7c54f4
Per-repository UpdateConfigCommand completed. Access to system properties through SessionContext to ease alternation
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
379
diff
changeset
|
367 public static File getInstallationConfigurationFileToWrite(SessionContext ctx) { |
82336b7c54f4
Per-repository UpdateConfigCommand completed. Access to system properties through SessionContext to ease alternation
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
379
diff
changeset
|
368 File hgInstallRoot = findHgInstallRoot(ctx); // may be null |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
369 // choice of which hgrc to pick here is according to my own pure discretion |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
370 if (hgInstallRoot != null) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
371 // use this location only if it's writable |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
372 File cfg = new File(hgInstallRoot, runningOnWindows() ? "Mercurial.ini" : "etc/mercurial/hgrc"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
373 if (cfg.canWrite() || cfg.getParentFile().canWrite()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
374 return cfg; |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
375 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
376 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
377 // fallback |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
378 if (runningOnWindows()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
379 if (hgInstallRoot == null) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
380 return new File("C:\\Mercurial\\Mercurial.ini"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
381 } else { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
382 // yes, we tried this file already (above) and found it non-writable |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
383 // let caller fail with can't write |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
384 return new File(hgInstallRoot, "Mercurial.ini"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
385 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
386 } else { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
387 return new File("/etc/mercurial/hgrc"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
388 } |
378
9fb990c8a724
Investigate approaches to alter Mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
351
diff
changeset
|
389 } |
9fb990c8a724
Investigate approaches to alter Mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
351
diff
changeset
|
390 |
382
82336b7c54f4
Per-repository UpdateConfigCommand completed. Access to system properties through SessionContext to ease alternation
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
379
diff
changeset
|
391 public static File getUserConfigurationFileToWrite(SessionContext ctx) { |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
392 LinkedHashSet<String> locations = new LinkedHashSet<String>(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
393 final boolean runsOnWindows = runningOnWindows(); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
394 if (runsOnWindows) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
395 locations.add(System.getenv("USERPROFILE")); |
378
9fb990c8a724
Investigate approaches to alter Mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
351
diff
changeset
|
396 } |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
397 locations.add(System.getenv("HOME")); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
398 locations.remove(null); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
399 for (String loc : locations) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
400 File location = new File(loc); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
401 File rv = new File(location, ".hgrc"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
402 if (rv.exists() && rv.canWrite()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
403 return rv; |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
404 } |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
405 if (runsOnWindows) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
406 rv = new File(location, "Mercurial.ini"); |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
407 if (rv.exists() && rv.canWrite()) { |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
408 return rv; |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
409 } |
378
9fb990c8a724
Investigate approaches to alter Mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
351
diff
changeset
|
410 } |
9fb990c8a724
Investigate approaches to alter Mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
351
diff
changeset
|
411 } |
379
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
412 // fallback to default, let calling code fail with Exception if can't write |
fa2be7a05af6
Implement discovery of mercurial installation, use it to read/write configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
378
diff
changeset
|
413 return new File(System.getProperty("user.home"), ".hgrc"); |
378
9fb990c8a724
Investigate approaches to alter Mercurial configuration files
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
351
diff
changeset
|
414 } |
388
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
415 |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
416 public boolean shallCacheRevlogs() { |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
417 return shallCacheRevlogsInRepo; |
b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
382
diff
changeset
|
418 } |
407
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
419 |
526
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
420 // marker method |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
421 public static IllegalStateException notImplemented() { |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
422 return new IllegalStateException("Not implemented"); |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
423 } |
2f9ed6bcefa2
Initial support for Revert command with accompanying minor refactoring
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
525
diff
changeset
|
424 |
525
0be5be8d57e9
Repository checkout support, first iteration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
504
diff
changeset
|
425 public static Internals getInstance(HgRepository repo) { |
0be5be8d57e9
Repository checkout support, first iteration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
504
diff
changeset
|
426 return HgInternals.getImplementationRepo(repo); |
0be5be8d57e9
Repository checkout support, first iteration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
504
diff
changeset
|
427 } |
0be5be8d57e9
Repository checkout support, first iteration
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
504
diff
changeset
|
428 |
407
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
429 public static <T> CharSequence join(Iterable<T> col, CharSequence separator) { |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
430 if (col == null) { |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
431 return String.valueOf(col); |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
432 } |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
433 Iterator<T> it = col.iterator(); |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
434 if (!it.hasNext()) { |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
435 return "[]"; |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
436 } |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
437 String v = String.valueOf(it.next()); |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
438 StringBuilder sb = new StringBuilder(v); |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
439 while (it.hasNext()) { |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
440 sb.append(separator); |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
441 v = String.valueOf(it.next()); |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
442 sb.append(v); |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
443 } |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
444 return sb; |
30922c728341
Better multiline log printout; options to tune default log output
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
388
diff
changeset
|
445 } |
420
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
446 |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
447 /** |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
448 * keep an eye on all long to int downcasts to get a chance notice the lost of data |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
449 * Use if there's even subtle chance there might be loss |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
450 * (ok not to use if there's no way for l to be greater than int) |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
451 */ |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
452 public static int ltoi(long l) { |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
453 int i = (int) l; |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
454 assert ((long) i) == l : "Loss of data!"; |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
455 return i; |
6c22bdc0bdfd
Respect long offsets in revlogs
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
419
diff
changeset
|
456 } |
74
6f1b88693d48
Complete refactoring to org.tmatesoft
Artem Tikhomirov <tikhomirov.artem@gmail.com>
parents:
diff
changeset
|
457 } |