Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/RepoInitializer.java @ 493:ba36f66c32b4
Refactor to keep knowledge about repository control files and their location in respect to .hg/ in a single place (facilitate future adoption of shared repositories)
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 18 Oct 2012 18:36:13 +0200 |
parents | b3c16d1aede0 |
children | 4e6179bde4fc |
comparison
equal
deleted
inserted
replaced
492:e4eaa23e3442 | 493:ba36f66c32b4 |
---|---|
22 import java.io.FileOutputStream; | 22 import java.io.FileOutputStream; |
23 import java.io.IOException; | 23 import java.io.IOException; |
24 import java.nio.charset.Charset; | 24 import java.nio.charset.Charset; |
25 | 25 |
26 import org.tmatesoft.hg.core.SessionContext; | 26 import org.tmatesoft.hg.core.SessionContext; |
27 import org.tmatesoft.hg.repo.HgInvalidControlFileException; | |
27 import org.tmatesoft.hg.util.PathRewrite; | 28 import org.tmatesoft.hg.util.PathRewrite; |
28 | 29 |
29 /** | 30 /** |
30 * Responsible of `requires` processing both on repo read and repo write | 31 * Responsible of `requires` processing both on repo read and repo write |
31 * XXX needs better name, perhaps | 32 * XXX needs better name, perhaps |
37 private int requiresFlags; | 38 private int requiresFlags; |
38 | 39 |
39 public RepoInitializer() { | 40 public RepoInitializer() { |
40 } | 41 } |
41 | 42 |
43 public RepoInitializer initRequiresFromFile(File repoDir) throws HgInvalidControlFileException { | |
44 File requiresFile = new File(repoDir, "requires"); // not #getFileFromRepoDir() just in case it gets modified later | |
45 try { | |
46 int flags = new RequiresFile().parse(requiresFile); | |
47 return setRequires(flags); | |
48 } catch (IOException ex) { | |
49 throw new HgInvalidControlFileException("Parse failed", ex, requiresFile); | |
50 } | |
51 } | |
52 | |
42 public RepoInitializer setRequires(int flags) { | 53 public RepoInitializer setRequires(int flags) { |
43 requiresFlags = flags; | 54 requiresFlags = flags; |
44 return this; | 55 return this; |
45 } | 56 } |
46 | 57 |
47 public int getRequires() { | 58 public int getRequires() { |
48 return requiresFlags; | 59 return requiresFlags; |
49 } | 60 } |
50 | 61 |
51 public void initEmptyRepository(File hgDir) throws IOException { | 62 public void initEmptyRepository(File repoDir) throws IOException { |
52 hgDir.mkdir(); | 63 repoDir.mkdirs(); |
53 FileOutputStream requiresFile = new FileOutputStream(new File(hgDir, "requires")); | 64 FileOutputStream requiresFile = new FileOutputStream(new File(repoDir, "requires")); |
54 StringBuilder sb = new StringBuilder(40); | 65 StringBuilder sb = new StringBuilder(40); |
55 sb.append("revlogv1\n"); | 66 sb.append("revlogv1\n"); |
56 if ((requiresFlags & STORE) != 0) { | 67 if ((requiresFlags & STORE) != 0) { |
57 sb.append("store\n"); | 68 sb.append("store\n"); |
58 } | 69 } |
62 if ((requiresFlags & DOTENCODE) != 0) { | 73 if ((requiresFlags & DOTENCODE) != 0) { |
63 sb.append("dotencode\n"); | 74 sb.append("dotencode\n"); |
64 } | 75 } |
65 requiresFile.write(sb.toString().getBytes()); | 76 requiresFile.write(sb.toString().getBytes()); |
66 requiresFile.close(); | 77 requiresFile.close(); |
67 new File(hgDir, "store").mkdir(); // with that, hg verify says ok. | 78 new File(repoDir, "store").mkdir(); // with that, hg verify says ok. |
68 } | 79 } |
69 | 80 |
70 public PathRewrite buildDataFilesHelper(SessionContext ctx) { | 81 public PathRewrite buildDataFilesHelper(SessionContext ctx) { |
71 Charset cs = Internals.getFileEncoding(ctx); | 82 Charset cs = Internals.getFileEncoding(ctx); |
72 // StoragePathHelper needs fine-grained control over char encoding, hence doesn't use EncodingHelper | 83 // StoragePathHelper needs fine-grained control over char encoding, hence doesn't use EncodingHelper |
73 return new StoragePathHelper((requiresFlags & STORE) != 0, (requiresFlags & FNCACHE) != 0, (requiresFlags & DOTENCODE) != 0, cs); | 84 return new StoragePathHelper((requiresFlags & STORE) != 0, (requiresFlags & FNCACHE) != 0, (requiresFlags & DOTENCODE) != 0, cs); |
74 } | 85 } |
86 | |
87 public PathRewrite buildStoreFilesHelper() { | |
88 if ((requiresFlags & STORE) != 0) { | |
89 return new PathRewrite() { | |
90 public CharSequence rewrite(CharSequence path) { | |
91 return "store/" + path; | |
92 } | |
93 }; | |
94 } else { | |
95 return new PathRewrite.Empty(); | |
96 } | |
97 } | |
75 } | 98 } |