Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/RequiresFile.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 | 981f9f50bb6c |
| children |
comparison
equal
deleted
inserted
replaced
| 492:e4eaa23e3442 | 493:ba36f66c32b4 |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 TMate Software Ltd | 2 * Copyright (c) 2011-2012 TMate Software Ltd |
| 3 * | 3 * |
| 4 * This program is free software; you can redistribute it and/or modify | 4 * This program is free software; you can redistribute it and/or modify |
| 5 * it under the terms of the GNU General Public License as published by | 5 * it under the terms of the GNU General Public License as published by |
| 6 * the Free Software Foundation; version 2 of the License. | 6 * the Free Software Foundation; version 2 of the License. |
| 7 * | 7 * |
| 26 * | 26 * |
| 27 * @author Artem Tikhomirov | 27 * @author Artem Tikhomirov |
| 28 * @author TMate Software Ltd. | 28 * @author TMate Software Ltd. |
| 29 */ | 29 */ |
| 30 public class RequiresFile { | 30 public class RequiresFile { |
| 31 public static final int STORE = 1; | 31 public static final int STORE = 1 << 0; |
| 32 public static final int FNCACHE = 2; | 32 public static final int FNCACHE = 1 << 1; |
| 33 public static final int DOTENCODE = 4; | 33 public static final int DOTENCODE = 1 << 2; |
| 34 public static final int REVLOGV0 = 1 << 31; | |
| 35 public static final int REVLOGV1 = 1 << 30; | |
| 34 | 36 |
| 35 public RequiresFile() { | 37 public RequiresFile() { |
| 36 } | 38 } |
| 37 | 39 |
| 38 public void parse(Internals repoImpl, File requiresFile) throws IOException { | 40 /** |
| 41 * Settings from requires file as bits | |
| 42 */ | |
| 43 public int parse(File requiresFile) throws IOException { | |
| 39 if (!requiresFile.exists()) { | 44 if (!requiresFile.exists()) { |
| 40 return; | 45 // TODO check what's going on in Mercurial if no requires exist |
| 46 return 0; | |
| 41 } | 47 } |
| 42 BufferedReader br = null; | 48 BufferedReader br = null; |
| 43 try { | 49 try { |
| 44 boolean revlogv1 = false; | |
| 45 boolean store = false; | |
| 46 boolean fncache = false; | |
| 47 boolean dotencode = false; | |
| 48 br = new BufferedReader(new InputStreamReader(new FileInputStream(requiresFile))); | 50 br = new BufferedReader(new InputStreamReader(new FileInputStream(requiresFile))); |
| 49 String line; | 51 String line; |
| 52 int flags = 0; | |
| 50 while ((line = br.readLine()) != null) { | 53 while ((line = br.readLine()) != null) { |
| 51 revlogv1 |= "revlogv1".equals(line); | 54 if ("revlogv1".equals(line)) { |
| 52 store |= "store".equals(line); | 55 flags |= REVLOGV1; |
| 53 fncache |= "fncache".equals(line); | 56 } else if ("store".equals(line)) { |
| 54 dotencode |= "dotencode".equals(line); | 57 flags |= STORE; |
| 58 } else if ("fncache".equals(line)) { | |
| 59 flags |= FNCACHE; | |
| 60 } else if ("dotencode".equals(line)) { | |
| 61 flags |= DOTENCODE; | |
| 62 } | |
| 55 } | 63 } |
| 56 int flags = 0; | 64 if ((flags & REVLOGV1) == 0) { |
| 57 flags += store ? STORE : 0; | 65 flags |= REVLOGV0; // TODO check if there's no special flag for V0 indeed |
| 58 flags += fncache ? FNCACHE : 0; | 66 } |
| 59 flags += dotencode ? DOTENCODE : 0; | 67 return flags; |
| 60 repoImpl.setStorageConfig(revlogv1 ? 1 : 0, flags); | |
| 61 } finally { | 68 } finally { |
| 62 if (br != null) { | 69 if (br != null) { |
| 63 br.close(); | 70 br.close(); |
| 64 } | 71 } |
| 65 } | 72 } |
