Mercurial > jhg
diff src/org/tmatesoft/hg/internal/DirstateBuilder.java @ 617:65c01508f002
Rollback support for commands that modify repository. Strategy to keep complete copy of a file being changed
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 15 May 2013 20:10:09 +0200 |
parents | bd5926e24aa3 |
children | 6526d8adbc0f |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/DirstateBuilder.java Tue May 14 17:31:35 2013 +0200 +++ b/src/org/tmatesoft/hg/internal/DirstateBuilder.java Wed May 15 20:10:09 2013 +0200 @@ -16,6 +16,9 @@ */ package org.tmatesoft.hg.internal; +import static org.tmatesoft.hg.repo.HgRepositoryFiles.Dirstate; +import static org.tmatesoft.hg.repo.HgRepositoryFiles.UndoDirstate; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -32,7 +35,6 @@ import org.tmatesoft.hg.repo.HgDirstate.Record; import org.tmatesoft.hg.repo.HgInvalidStateException; import org.tmatesoft.hg.repo.HgManifest.Flags; -import org.tmatesoft.hg.repo.HgRepositoryFiles; import org.tmatesoft.hg.util.Path; /** @@ -149,13 +151,15 @@ } } - public void serialize() throws HgIOException { - File dirstateFile = hgRepo.getRepositoryFile(HgRepositoryFiles.Dirstate); + public void serialize(Transaction tr) throws HgIOException { + File dirstateFile = tr.prepare(hgRepo.getRepositoryFile(Dirstate), hgRepo.getRepositoryFile(UndoDirstate)); try { FileChannel dirstate = new FileOutputStream(dirstateFile).getChannel(); serialize(dirstate); dirstate.close(); + tr.done(dirstateFile); } catch (IOException ex) { + tr.failure(dirstateFile, ex); throw new HgIOException("Can't write down new directory state", ex, dirstateFile); } }