Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/CommitFacility.java @ 588:41218d84842a
Update dirstate after commit
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 29 Apr 2013 16:37:57 +0200 |
parents | 73c20c648c1f |
children |
comparison
equal
deleted
inserted
replaced
587:a52f4cc56f9c | 588:41218d84842a |
---|---|
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.HgCommitCommand; |
32 import org.tmatesoft.hg.core.HgIOException; | |
32 import org.tmatesoft.hg.core.HgRepositoryLockException; | 33 import org.tmatesoft.hg.core.HgRepositoryLockException; |
33 import org.tmatesoft.hg.core.Nodeid; | 34 import org.tmatesoft.hg.core.Nodeid; |
34 import org.tmatesoft.hg.internal.ByteArrayChannel; | 35 import org.tmatesoft.hg.internal.ByteArrayChannel; |
35 import org.tmatesoft.hg.internal.ChangelogEntryBuilder; | 36 import org.tmatesoft.hg.internal.ChangelogEntryBuilder; |
37 import org.tmatesoft.hg.internal.DirstateBuilder; | |
38 import org.tmatesoft.hg.internal.DirstateReader; | |
36 import org.tmatesoft.hg.internal.Experimental; | 39 import org.tmatesoft.hg.internal.Experimental; |
37 import org.tmatesoft.hg.internal.FNCacheFile; | 40 import org.tmatesoft.hg.internal.FNCacheFile; |
41 import org.tmatesoft.hg.internal.Internals; | |
38 import org.tmatesoft.hg.internal.ManifestEntryBuilder; | 42 import org.tmatesoft.hg.internal.ManifestEntryBuilder; |
39 import org.tmatesoft.hg.internal.ManifestRevision; | 43 import org.tmatesoft.hg.internal.ManifestRevision; |
40 import org.tmatesoft.hg.internal.RevlogStream; | 44 import org.tmatesoft.hg.internal.RevlogStream; |
41 import org.tmatesoft.hg.internal.RevlogStreamWriter; | 45 import org.tmatesoft.hg.internal.RevlogStreamWriter; |
42 import org.tmatesoft.hg.util.Pair; | 46 import org.tmatesoft.hg.util.Pair; |
95 | 99 |
96 public void user(String userName) { | 100 public void user(String userName) { |
97 user = userName; | 101 user = userName; |
98 } | 102 } |
99 | 103 |
100 public Nodeid commit(String message) throws HgRepositoryLockException { | 104 public Nodeid commit(String message) throws HgIOException, HgRepositoryLockException { |
101 | 105 |
102 final HgChangelog clog = repo.getChangelog(); | 106 final HgChangelog clog = repo.getChangelog(); |
103 final int clogRevisionIndex = clog.getRevisionCount(); | 107 final int clogRevisionIndex = clog.getRevisionCount(); |
104 ManifestRevision c1Manifest = new ManifestRevision(null, null); | 108 ManifestRevision c1Manifest = new ManifestRevision(null, null); |
105 ManifestRevision c2Manifest = new ManifestRevision(null, null); | 109 ManifestRevision c2Manifest = new ManifestRevision(null, null); |
134 newManifestRevision.remove(p); | 138 newManifestRevision.remove(p); |
135 } | 139 } |
136 // | 140 // |
137 // Register new/changed | 141 // Register new/changed |
138 ArrayList<Path> newlyAddedFiles = new ArrayList<Path>(); | 142 ArrayList<Path> newlyAddedFiles = new ArrayList<Path>(); |
143 ArrayList<Path> touchInDirstate = new ArrayList<Path>(); | |
139 for (Pair<HgDataFile, ByteDataSupplier> e : files.values()) { | 144 for (Pair<HgDataFile, ByteDataSupplier> e : files.values()) { |
140 HgDataFile df = e.first(); | 145 HgDataFile df = e.first(); |
141 Pair<Integer, Integer> fp = fileParents.get(df.getPath()); | 146 Pair<Integer, Integer> fp = fileParents.get(df.getPath()); |
142 if (fp == null) { | 147 if (fp == null) { |
143 // NEW FILE | 148 // NEW FILE |
163 // (despite the fact the file is in there) | 168 // (despite the fact the file is in there) |
164 } | 169 } |
165 RevlogStreamWriter fileWriter = new RevlogStreamWriter(repo.getSessionContext(), contentStream); | 170 RevlogStreamWriter fileWriter = new RevlogStreamWriter(repo.getSessionContext(), contentStream); |
166 Nodeid fileRev = fileWriter.addRevision(bac.toArray(), clogRevisionIndex, fp.first(), fp.second()); | 171 Nodeid fileRev = fileWriter.addRevision(bac.toArray(), clogRevisionIndex, fp.first(), fp.second()); |
167 newManifestRevision.put(df.getPath(), fileRev); | 172 newManifestRevision.put(df.getPath(), fileRev); |
173 touchInDirstate.add(df.getPath()); | |
168 } | 174 } |
169 // | 175 // |
170 // Manifest | 176 // Manifest |
171 final ManifestEntryBuilder manifestBuilder = new ManifestEntryBuilder(); | 177 final ManifestEntryBuilder manifestBuilder = new ManifestEntryBuilder(); |
172 for (Map.Entry<Path, Nodeid> me : newManifestRevision.entrySet()) { | 178 for (Map.Entry<Path, Nodeid> me : newManifestRevision.entrySet()) { |
194 } catch (IOException ex) { | 200 } catch (IOException ex) { |
195 // see comment above for fnchache.read() | 201 // see comment above for fnchache.read() |
196 repo.getSessionContext().getLog().dump(getClass(), Severity.Error, ex, "Failed to write fncache, error ignored"); | 202 repo.getSessionContext().getLog().dump(getClass(), Severity.Error, ex, "Failed to write fncache, error ignored"); |
197 } | 203 } |
198 } | 204 } |
205 // bring dirstate up to commit state | |
206 Internals implRepo = Internals.getInstance(repo); | |
207 final DirstateBuilder dirstateBuilder = new DirstateBuilder(implRepo); | |
208 dirstateBuilder.fillFrom(new DirstateReader(implRepo, new Path.SimpleSource())); | |
209 for (Path p : removals) { | |
210 dirstateBuilder.recordRemoved(p); | |
211 } | |
212 for (Path p : touchInDirstate) { | |
213 dirstateBuilder.recordUncertain(p); | |
214 } | |
215 dirstateBuilder.parents(changesetRev, Nodeid.NULL); | |
216 dirstateBuilder.serialize(); | |
199 return changesetRev; | 217 return changesetRev; |
200 } | 218 } |
201 /* | 219 /* |
202 private Pair<Integer, Integer> getManifestParents() { | 220 private Pair<Integer, Integer> getManifestParents() { |
203 return new Pair<Integer, Integer>(extractManifestRevisionIndex(p1Commit), extractManifestRevisionIndex(p2Commit)); | 221 return new Pair<Integer, Integer>(extractManifestRevisionIndex(p1Commit), extractManifestRevisionIndex(p2Commit)); |