Mercurial > hg4j
comparison src/org/tmatesoft/hg/core/HgCloneCommand.java @ 539:9edfd5a223b8
Commit: handle empty repository case
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 13 Feb 2013 18:44:58 +0100 |
parents | 243202f1bda5 |
children | e4ee4bf4c7d0 |
comparison
equal
deleted
inserted
replaced
538:dd4f6311af52 | 539:9edfd5a223b8 |
---|---|
24 import java.io.File; | 24 import java.io.File; |
25 import java.io.FileOutputStream; | 25 import java.io.FileOutputStream; |
26 import java.io.IOException; | 26 import java.io.IOException; |
27 import java.util.ArrayList; | 27 import java.util.ArrayList; |
28 import java.util.Collections; | 28 import java.util.Collections; |
29 import java.util.LinkedList; | |
30 import java.util.TreeMap; | 29 import java.util.TreeMap; |
31 | 30 |
32 import org.tmatesoft.hg.internal.ByteArrayDataAccess; | 31 import org.tmatesoft.hg.internal.ByteArrayDataAccess; |
33 import org.tmatesoft.hg.internal.DataAccess; | 32 import org.tmatesoft.hg.internal.DataAccess; |
34 import org.tmatesoft.hg.internal.DataAccessProvider; | 33 import org.tmatesoft.hg.internal.DataAccessProvider; |
35 import org.tmatesoft.hg.internal.DataSerializer; | 34 import org.tmatesoft.hg.internal.DataSerializer; |
36 import org.tmatesoft.hg.internal.DigestHelper; | 35 import org.tmatesoft.hg.internal.DigestHelper; |
36 import org.tmatesoft.hg.internal.FNCacheFile; | |
37 import org.tmatesoft.hg.internal.Internals; | |
37 import org.tmatesoft.hg.internal.Lifecycle; | 38 import org.tmatesoft.hg.internal.Lifecycle; |
38 import org.tmatesoft.hg.internal.RepoInitializer; | 39 import org.tmatesoft.hg.internal.RepoInitializer; |
39 import org.tmatesoft.hg.internal.RevlogCompressor; | 40 import org.tmatesoft.hg.internal.RevlogCompressor; |
40 import org.tmatesoft.hg.internal.RevlogStreamWriter; | 41 import org.tmatesoft.hg.internal.RevlogStreamWriter; |
41 import org.tmatesoft.hg.repo.HgBundle; | 42 import org.tmatesoft.hg.repo.HgBundle; |
47 import org.tmatesoft.hg.repo.HgRemoteRepository; | 48 import org.tmatesoft.hg.repo.HgRemoteRepository; |
48 import org.tmatesoft.hg.repo.HgRepository; | 49 import org.tmatesoft.hg.repo.HgRepository; |
49 import org.tmatesoft.hg.repo.HgRuntimeException; | 50 import org.tmatesoft.hg.repo.HgRuntimeException; |
50 import org.tmatesoft.hg.util.CancelSupport; | 51 import org.tmatesoft.hg.util.CancelSupport; |
51 import org.tmatesoft.hg.util.CancelledException; | 52 import org.tmatesoft.hg.util.CancelledException; |
53 import org.tmatesoft.hg.util.Path; | |
52 import org.tmatesoft.hg.util.PathRewrite; | 54 import org.tmatesoft.hg.util.PathRewrite; |
53 import org.tmatesoft.hg.util.ProgressSupport; | 55 import org.tmatesoft.hg.util.ProgressSupport; |
54 | 56 |
55 /** | 57 /** |
56 * WORK IN PROGRESS, DO NOT USE | 58 * WORK IN PROGRESS, DO NOT USE |
153 private DataAccess prevRevContent; | 155 private DataAccess prevRevContent; |
154 private final DigestHelper dh = new DigestHelper(); | 156 private final DigestHelper dh = new DigestHelper(); |
155 // recently processed nodes last, so that index in the array may be used as a linkRevision or baseRevision | 157 // recently processed nodes last, so that index in the array may be used as a linkRevision or baseRevision |
156 private final ArrayList<Nodeid> revisionSequence = new ArrayList<Nodeid>(); | 158 private final ArrayList<Nodeid> revisionSequence = new ArrayList<Nodeid>(); |
157 | 159 |
158 private final LinkedList<String> fncacheFiles = new LinkedList<String>(); | 160 private FNCacheFile fncacheFile; |
159 private RepoInitializer repoInit; | 161 private RepoInitializer repoInit; |
160 private Lifecycle.Callback lifecycleCallback; | 162 private Lifecycle.Callback lifecycleCallback; |
161 private CancelledException cancelException; | 163 private CancelledException cancelException; |
162 | 164 |
163 private RevlogStreamWriter.HeaderWriter revlogHeader = new RevlogStreamWriter.HeaderWriter(true); | 165 private RevlogStreamWriter.HeaderWriter revlogHeader = new RevlogStreamWriter.HeaderWriter(true); |
174 revlogDataZip = new RevlogCompressor(sessionCtx); | 176 revlogDataZip = new RevlogCompressor(sessionCtx); |
175 } | 177 } |
176 | 178 |
177 public void initEmptyRepository() throws IOException { | 179 public void initEmptyRepository() throws IOException { |
178 repoInit.initEmptyRepository(hgDir); | 180 repoInit.initEmptyRepository(hgDir); |
181 try { | |
182 assert (repoInit.getRequires() & FNCACHE) != 0; | |
183 fncacheFile = new FNCacheFile(Internals.getInstance(new HgLookup(ctx).detect(hgDir))); | |
184 } catch (HgRepositoryNotFoundException ex) { | |
185 // SHALL NOT HAPPEN provided we initialized empty repository successfully | |
186 // TODO perhaps, with WriteDownMate moving to a more appropriate location, | |
187 // we could instantiate HgRepository (or Internals) by other means, without exception? | |
188 throw new IOException("Can't access fncache for newly created repository", ex); | |
189 } | |
179 } | 190 } |
180 | 191 |
181 public void complete() throws IOException { | 192 public void complete() throws IOException { |
182 FileOutputStream fncacheFile = new FileOutputStream(new File(hgDir, "store/fncache")); | 193 fncacheFile.write(); |
183 for (String s : fncacheFiles) { | |
184 fncacheFile.write(s.getBytes()); | |
185 fncacheFile.write(0x0A); // http://mercurial.selenic.com/wiki/fncacheRepoFormat | |
186 } | |
187 fncacheFile.close(); | |
188 } | 194 } |
189 | 195 |
190 public void changelogStart() { | 196 public void changelogStart() { |
191 try { | 197 try { |
192 revlogHeader.offset(0).baseRevision(-1); | 198 revlogHeader.offset(0).baseRevision(-1); |
235 | 241 |
236 public void fileStart(String name) { | 242 public void fileStart(String name) { |
237 try { | 243 try { |
238 revlogHeader.offset(0).baseRevision(-1); | 244 revlogHeader.offset(0).baseRevision(-1); |
239 revisionSequence.clear(); | 245 revisionSequence.clear(); |
240 fncacheFiles.add("data/" + name + ".i"); // TODO post-1.0 this is pure guess, | 246 fncacheFile.add(Path.create(name)); |
241 // need to investigate more how filenames are kept in fncache | |
242 File file = new File(hgDir, filename = storagePathHelper.rewrite(name).toString()); | 247 File file = new File(hgDir, filename = storagePathHelper.rewrite(name).toString()); |
243 file.getParentFile().mkdirs(); | 248 file.getParentFile().mkdirs(); |
244 indexFile = new FileOutputStream(file); | 249 indexFile = new FileOutputStream(file); |
245 } catch (IOException ex) { | 250 } catch (IOException ex) { |
246 String m = String.format("Failed to write file %s", filename); | 251 String m = String.format("Failed to write file %s", filename); |