Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/CommitFacility.java @ 586:73c20c648c1f
HgCommitCommand initial support
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 26 Apr 2013 18:38:41 +0200 |
| parents | ca56a36c2eea |
| children | 41218d84842a |
comparison
equal
deleted
inserted
replaced
| 585:b47ef0d2777b | 586:73c20c648c1f |
|---|---|
| 26 import java.util.Map; | 26 import java.util.Map; |
| 27 import java.util.Set; | 27 import java.util.Set; |
| 28 import java.util.TreeMap; | 28 import java.util.TreeMap; |
| 29 import java.util.TreeSet; | 29 import java.util.TreeSet; |
| 30 | 30 |
| 31 import org.tmatesoft.hg.core.HgCommitCommand; | |
| 31 import org.tmatesoft.hg.core.HgRepositoryLockException; | 32 import org.tmatesoft.hg.core.HgRepositoryLockException; |
| 32 import org.tmatesoft.hg.core.Nodeid; | 33 import org.tmatesoft.hg.core.Nodeid; |
| 33 import org.tmatesoft.hg.internal.ByteArrayChannel; | 34 import org.tmatesoft.hg.internal.ByteArrayChannel; |
| 34 import org.tmatesoft.hg.internal.ChangelogEntryBuilder; | 35 import org.tmatesoft.hg.internal.ChangelogEntryBuilder; |
| 35 import org.tmatesoft.hg.internal.Experimental; | 36 import org.tmatesoft.hg.internal.Experimental; |
| 42 import org.tmatesoft.hg.util.Path; | 43 import org.tmatesoft.hg.util.Path; |
| 43 import org.tmatesoft.hg.util.LogFacility.Severity; | 44 import org.tmatesoft.hg.util.LogFacility.Severity; |
| 44 | 45 |
| 45 /** | 46 /** |
| 46 * WORK IN PROGRESS | 47 * WORK IN PROGRESS |
| 48 * Name: CommitObject, FutureCommit or PendingCommit | |
| 49 * Only public API now: {@link HgCommitCommand}. TEMPORARILY lives in the oth.repo public packages, until code interdependencies are resolved | |
| 47 * | 50 * |
| 48 * @author Artem Tikhomirov | 51 * @author Artem Tikhomirov |
| 49 * @author TMate Software Ltd. | 52 * @author TMate Software Ltd. |
| 50 */ | 53 */ |
| 51 @Experimental(reason="Work in progress") | 54 @Experimental(reason="Work in progress") |
| 52 public final class CommitFacility { | 55 public final class CommitFacility { |
| 53 private final HgRepository repo; | 56 private final HgRepository repo; |
| 54 private final int p1Commit, p2Commit; | 57 private final int p1Commit, p2Commit; |
| 55 private Map<Path, Pair<HgDataFile, ByteDataSupplier>> files = new LinkedHashMap<Path, Pair<HgDataFile, ByteDataSupplier>>(); | 58 private Map<Path, Pair<HgDataFile, ByteDataSupplier>> files = new LinkedHashMap<Path, Pair<HgDataFile, ByteDataSupplier>>(); |
| 56 private Set<Path> removals = new TreeSet<Path>(); | 59 private Set<Path> removals = new TreeSet<Path>(); |
| 57 private String branch; | 60 private String branch, user; |
| 58 | 61 |
| 59 public CommitFacility(HgRepository hgRepo, int parentCommit) { | 62 public CommitFacility(HgRepository hgRepo, int parentCommit) { |
| 60 this(hgRepo, parentCommit, NO_REVISION); | 63 this(hgRepo, parentCommit, NO_REVISION); |
| 61 } | 64 } |
| 62 | 65 |
| 86 removals.add(dataFile.getPath()); | 89 removals.add(dataFile.getPath()); |
| 87 } | 90 } |
| 88 | 91 |
| 89 public void branch(String branchName) { | 92 public void branch(String branchName) { |
| 90 branch = branchName; | 93 branch = branchName; |
| 94 } | |
| 95 | |
| 96 public void user(String userName) { | |
| 97 user = userName; | |
| 91 } | 98 } |
| 92 | 99 |
| 93 public Nodeid commit(String message) throws HgRepositoryLockException { | 100 public Nodeid commit(String message) throws HgRepositoryLockException { |
| 94 | 101 |
| 95 final HgChangelog clog = repo.getChangelog(); | 102 final HgChangelog clog = repo.getChangelog(); |
| 170 // | 177 // |
| 171 // Changelog | 178 // Changelog |
| 172 final ChangelogEntryBuilder changelogBuilder = new ChangelogEntryBuilder(); | 179 final ChangelogEntryBuilder changelogBuilder = new ChangelogEntryBuilder(); |
| 173 changelogBuilder.setModified(files.keySet()); | 180 changelogBuilder.setModified(files.keySet()); |
| 174 changelogBuilder.branch(branch == null ? HgRepository.DEFAULT_BRANCH_NAME : branch); | 181 changelogBuilder.branch(branch == null ? HgRepository.DEFAULT_BRANCH_NAME : branch); |
| 182 changelogBuilder.user(String.valueOf(user)); | |
| 175 byte[] clogContent = changelogBuilder.build(manifestRev, message); | 183 byte[] clogContent = changelogBuilder.build(manifestRev, message); |
| 176 RevlogStreamWriter changelogWriter = new RevlogStreamWriter(repo.getSessionContext(), clog.content); | 184 RevlogStreamWriter changelogWriter = new RevlogStreamWriter(repo.getSessionContext(), clog.content); |
| 177 Nodeid changesetRev = changelogWriter.addRevision(clogContent, clogRevisionIndex, p1Commit, p2Commit); | 185 Nodeid changesetRev = changelogWriter.addRevision(clogContent, clogRevisionIndex, p1Commit, p2Commit); |
| 178 // FIXME move fncache update to an external facility, along with dirstate update | 186 // FIXME move fncache update to an external facility, along with dirstate update |
| 179 if (!newlyAddedFiles.isEmpty() && repo.getImplHelper().fncacheInUse()) { | 187 if (!newlyAddedFiles.isEmpty() && repo.getImplHelper().fncacheInUse()) { |
| 208 } | 216 } |
| 209 */ | 217 */ |
| 210 | 218 |
| 211 // unlike DataAccess (which provides structured access), this one | 219 // unlike DataAccess (which provides structured access), this one |
| 212 // deals with a sequence of bytes, when there's no need in structure of the data | 220 // deals with a sequence of bytes, when there's no need in structure of the data |
| 221 // FIXME java.nio.ReadableByteChannel or ByteStream/ByteSequence(read, length, reset) | |
| 222 // SHALL be inline with util.ByteChannel, reading bytes from HgDataFile, preferably DataAccess#readBytes(BB) to match API, | |
| 223 // and a wrap for ByteVector | |
| 213 public interface ByteDataSupplier { // TODO look if can resolve DataAccess in HgCloneCommand visibility issue | 224 public interface ByteDataSupplier { // TODO look if can resolve DataAccess in HgCloneCommand visibility issue |
| 214 // FIXME needs lifecycle, e.g. for supplier that reads from WC | 225 // FIXME needs lifecycle, e.g. for supplier that reads from WC |
| 215 int read(ByteBuffer buf); | 226 int read(ByteBuffer buf); |
| 216 } | 227 } |
| 217 | 228 |
