Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgSubrepoLocation.java @ 442:6865eb742883
Tests for subrepo API, refactor status tests for reuse, better subrepos API
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 27 Apr 2012 20:57:20 +0200 |
| parents | 9c9c442b5f2e |
| children | 51d682cf9cdc |
comparison
equal
deleted
inserted
replaced
| 441:2a08466838d3 | 442:6865eb742883 |
|---|---|
| 17 package org.tmatesoft.hg.repo; | 17 package org.tmatesoft.hg.repo; |
| 18 | 18 |
| 19 import java.io.File; | 19 import java.io.File; |
| 20 | 20 |
| 21 import org.tmatesoft.hg.core.HgRepositoryNotFoundException; | 21 import org.tmatesoft.hg.core.HgRepositoryNotFoundException; |
| 22 import org.tmatesoft.hg.core.Nodeid; | |
| 22 import org.tmatesoft.hg.internal.Experimental; | 23 import org.tmatesoft.hg.internal.Experimental; |
| 23 import org.tmatesoft.hg.util.Path; | 24 import org.tmatesoft.hg.util.Path; |
| 24 | 25 |
| 25 /** | 26 /** |
| 26 * WORK IN PROGRESS, DO NOT USE | 27 * WORK IN PROGRESS, DO NOT USE |
| 28 * | |
| 29 * @see http://mercurial.selenic.com/wiki/Subrepository | |
| 27 * @author Artem Tikhomirov | 30 * @author Artem Tikhomirov |
| 28 * @author TMate Software Ltd. | 31 * @author TMate Software Ltd. |
| 29 */ | 32 */ |
| 30 @Experimental(reason="Work in progress") | 33 @Experimental(reason="Work in progress") |
| 31 public class HgSubrepoLocation { | 34 public class HgSubrepoLocation { |
| 32 | 35 |
| 33 private final HgRepository owner; | 36 private final HgRepository owner; |
| 34 private final Kind kind; | 37 private final Kind kind; |
| 35 private final Path location; | 38 private final Path location; |
| 36 private final String source; | 39 private final String source; |
| 37 private final String revInfo; | 40 private final Nodeid revInfo; |
| 38 | 41 |
| 39 public enum Kind { Hg, SVN, Git, } | 42 public enum Kind { Hg, SVN, Git, } |
| 40 | 43 |
| 41 public HgSubrepoLocation(HgRepository parentRepo, String repoLocation, String actualLocation, Kind type, String revision) { | 44 /** |
| 45 * | |
| 46 * @param parentRepo | |
| 47 * @param repoLocation path, shall be valid directory (i.e. even if .hgsub doesn't specify trailing slash, this one shall) | |
| 48 * @param actualLocation | |
| 49 * @param type | |
| 50 * @param revision may be <code>null</code> | |
| 51 */ | |
| 52 /*package-local*/ HgSubrepoLocation(HgRepository parentRepo, Path repoLocation, String actualLocation, Kind type, Nodeid revision) { | |
| 42 owner = parentRepo; | 53 owner = parentRepo; |
| 43 location = Path.create(repoLocation); | 54 location = repoLocation; |
| 44 source = actualLocation; | 55 source = actualLocation; |
| 45 kind = type; | 56 kind = type; |
| 46 revInfo = revision; | 57 revInfo = revision; |
| 47 } | 58 } |
| 48 | 59 |
| 49 // as defined in .hgsub, key value | 60 /** |
| 61 * Sub-repository's location within owning repository, always directory, <code>path/to/nested</code>. | |
| 62 * <p> | |
| 63 * May differ from left-hand, key value from <code>.hgsub</code> if the latter doesn't include trailing slash, which is required | |
| 64 * for {@link Path} objects | |
| 65 * | |
| 66 * @return path to nested repository relative to owner's location | |
| 67 */ | |
| 50 public Path getLocation() { | 68 public Path getLocation() { |
| 51 return location; | 69 return location; |
| 52 } | 70 } |
| 53 | 71 |
| 54 // value from .hgsub | 72 /** |
| 73 * Right-hand value from <code>.hgsub</code>, with <code>[kind]</code> stripped, if any. | |
| 74 * @return sub-repository's source | |
| 75 */ | |
| 55 public String getSource() { | 76 public String getSource() { |
| 56 return source; | 77 return source; |
| 57 } | 78 } |
| 58 | 79 |
| 80 /** | |
| 81 * Sub-repository kind, either Mercurial, Subversion or Git | |
| 82 * @return one of predefined constants | |
| 83 */ | |
| 59 public Kind getType() { | 84 public Kind getType() { |
| 60 return kind; | 85 return kind; |
| 61 } | 86 } |
| 62 | 87 |
| 63 public String getRevision() { | 88 /** |
| 89 * For a nested repository that has been committed at least once, returns | |
| 90 * its revision as known from <code>.hgsubstate</code> | |
| 91 * | |
| 92 * <p>Note, this revision belongs to the nested repository history, not that of owning repository. | |
| 93 * | |
| 94 * @return revision of the nested repository, or <code>null</code> if not yet committed | |
| 95 */ | |
| 96 public Nodeid getRevision() { | |
| 64 return revInfo; | 97 return revInfo; |
| 65 } | 98 } |
| 66 | 99 |
| 67 /** | 100 /** |
| 68 * @return whether this sub repository is known only locally | 101 * Answers whether this sub repository has ever been part of a commit of the owner repository |
| 102 * | |
| 103 * @return <code>true</code> if owning repository records {@link #getRevision() revision} of this sub-repository | |
| 69 */ | 104 */ |
| 70 public boolean isCommitted() { | 105 public boolean isCommitted() { |
| 71 return revInfo != null; | 106 return revInfo != null; |
| 72 } | 107 } |
| 73 | 108 |
| 74 /** | 109 /** |
| 75 * @return <code>true</code> when there are local changes in the sub repository | 110 * Answers whether there are local changes in the sub-repository, |
| 111 * @return <code>true</code> if it's dirty | |
| 76 */ | 112 */ |
| 77 public boolean hasChanges() { | 113 public boolean hasChanges() { |
| 78 throw HgRepository.notImplemented(); | 114 throw HgRepository.notImplemented(); |
| 79 } | 115 } |
| 80 | 116 |
| 81 // public boolean isLocal() { | 117 /** |
| 82 // } | 118 * Access repository that owns nested one described by this object |
| 83 | 119 */ |
| 84 public HgRepository getOwner() { | 120 public HgRepository getOwner() { |
| 85 return owner; | 121 return owner; |
| 86 } | 122 } |
| 87 | 123 |
| 88 /** | 124 /** |
| 125 * Access nested repository as a full-fledged Mercurial repository | |
| 89 * | 126 * |
| 90 * @return object to access sub-repository | 127 * @return object to access sub-repository |
| 91 * @throws HgRepositoryNotFoundException if failed to find repository | 128 * @throws HgRepositoryNotFoundException if failed to find repository |
| 92 * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em> | 129 * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em> |
| 93 */ | 130 */ |
