comparison src/org/tmatesoft/hg/internal/CommitFacility.java @ 636:ffce73efa2c2

HgCommitCommand: save last commit message
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 06 Jun 2013 19:39:06 +0200
parents 6526d8adbc0f
children cd77bf51b562
comparison
equal deleted inserted replaced
635:4ec2d44e2bf3 636:ffce73efa2c2
16 */ 16 */
17 package org.tmatesoft.hg.internal; 17 package org.tmatesoft.hg.internal;
18 18
19 import static org.tmatesoft.hg.repo.HgRepository.DEFAULT_BRANCH_NAME; 19 import static org.tmatesoft.hg.repo.HgRepository.DEFAULT_BRANCH_NAME;
20 import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION; 20 import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION;
21 import static org.tmatesoft.hg.repo.HgRepositoryFiles.*;
21 import static org.tmatesoft.hg.repo.HgRepositoryFiles.Branch; 22 import static org.tmatesoft.hg.repo.HgRepositoryFiles.Branch;
22 import static org.tmatesoft.hg.repo.HgRepositoryFiles.UndoBranch; 23 import static org.tmatesoft.hg.repo.HgRepositoryFiles.UndoBranch;
23 import static org.tmatesoft.hg.util.LogFacility.Severity.Error; 24 import static org.tmatesoft.hg.util.LogFacility.Severity.Error;
24 25
25 import java.io.File; 26 import java.io.File;
26 import java.io.FileOutputStream; 27 import java.io.FileOutputStream;
28 import java.io.FileWriter;
27 import java.io.IOException; 29 import java.io.IOException;
28 import java.util.ArrayList; 30 import java.util.ArrayList;
29 import java.util.HashMap; 31 import java.util.HashMap;
30 import java.util.LinkedHashMap; 32 import java.util.LinkedHashMap;
31 import java.util.Map; 33 import java.util.Map;
133 // 135 //
134 // Forget removed 136 // Forget removed
135 for (Path p : removals) { 137 for (Path p : removals) {
136 newManifestRevision.remove(p); 138 newManifestRevision.remove(p);
137 } 139 }
140 //
141 saveCommitMessage(message);
138 // 142 //
139 // Register new/changed 143 // Register new/changed
140 LinkedHashMap<Path, RevlogStream> newlyAddedFiles = new LinkedHashMap<Path, RevlogStream>(); 144 LinkedHashMap<Path, RevlogStream> newlyAddedFiles = new LinkedHashMap<Path, RevlogStream>();
141 ArrayList<Path> touchInDirstate = new ArrayList<Path>(); 145 ArrayList<Path> touchInDirstate = new ArrayList<Path>();
142 for (Pair<HgDataFile, DataSource> e : files.values()) { 146 for (Pair<HgDataFile, DataSource> e : files.values()) {
233 // TODO Revisit: might be reasonable to send out a "Repo changed" notification, to clear 237 // TODO Revisit: might be reasonable to send out a "Repo changed" notification, to clear
234 // e.g. cached branch, tags and so on, not to rely on file change detection methods? 238 // e.g. cached branch, tags and so on, not to rely on file change detection methods?
235 // The same notification might come useful once Pull is implemented 239 // The same notification might come useful once Pull is implemented
236 return changesetRev; 240 return changesetRev;
237 } 241 }
242
243 private void saveCommitMessage(String message) throws HgIOException {
244 File lastMessage = repo.getRepositoryFile(LastMessage);
245 // do not attempt to write if we are going to fail anyway
246 if ((lastMessage.isFile() && !lastMessage.canWrite()) || !lastMessage.getParentFile().canWrite()) {
247 return;
248 }
249 FileWriter w = null;
250 try {
251 w = new FileWriter(lastMessage);
252 w.write(message == null ? new String() : message);
253 w.flush();
254 } catch (IOException ex) {
255 throw new HgIOException("Failed to save last commit message", ex, lastMessage);
256 } finally {
257 new FileUtils(repo.getLog()).closeQuietly(w, lastMessage);
258 }
259 }
238 /* 260 /*
239 private Pair<Integer, Integer> getManifestParents() { 261 private Pair<Integer, Integer> getManifestParents() {
240 return new Pair<Integer, Integer>(extractManifestRevisionIndex(p1Commit), extractManifestRevisionIndex(p2Commit)); 262 return new Pair<Integer, Integer>(extractManifestRevisionIndex(p1Commit), extractManifestRevisionIndex(p2Commit));
241 } 263 }
242 264