comparison src/org/tmatesoft/hg/internal/RevlogStream.java @ 396:0ae53c32ecef

Straighten out exceptions thrown when file access failed - three is too much
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 23 Feb 2012 01:06:24 +0100
parents 86f049e6bcae
children c76c57f6b961
comparison
equal deleted inserted replaced
395:4732fffff58a 396:0ae53c32ecef
1 /* 1 /*
2 * Copyright (c) 2010-2011 TMate Software Ltd 2 * Copyright (c) 2010-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 *
54 */ 54 */
55 private int[] indexRecordOffset; 55 private int[] indexRecordOffset;
56 private int[] baseRevisions; 56 private int[] baseRevisions;
57 private boolean inline = false; 57 private boolean inline = false;
58 private final File indexFile; 58 private final File indexFile;
59 private File dataFile;
59 private final DataAccessProvider dataAccess; 60 private final DataAccessProvider dataAccess;
60 61
61 // if we need anything else from HgRepo, might replace DAP parameter with HgRepo and query it for DAP. 62 // if we need anything else from HgRepo, might replace DAP parameter with HgRepo and query it for DAP.
62 public RevlogStream(DataAccessProvider dap, File indexFile) { 63 public RevlogStream(DataAccessProvider dap, File indexFile) {
63 this.dataAccess = dap; 64 this.dataAccess = dap;
69 // to avoid mmap files when only few bytes are to be read (i.e. #dataLength()) 70 // to avoid mmap files when only few bytes are to be read (i.e. #dataLength())
70 return dataAccess.create(indexFile); 71 return dataAccess.create(indexFile);
71 } 72 }
72 73
73 /*package*/ DataAccess getDataStream() { 74 /*package*/ DataAccess getDataStream() {
74 final String indexName = indexFile.getName(); 75 return dataAccess.create(getDataFile());
75 File dataFile = new File(indexFile.getParentFile(), indexName.substring(0, indexName.length() - 1) + "d"); 76 }
76 return dataAccess.create(dataFile); 77
77 } 78 /**
79 * Constructs file object that corresponds to .d revlog counterpart.
80 * Note, it's caller responsibility to ensure this file makes any sense (i.e. check {@link #inline} attribute)
81 */
82 private File getDataFile() {
83 if (dataFile == null) {
84 final String indexName = indexFile.getName();
85 dataFile = new File(indexFile.getParentFile(), indexName.substring(0, indexName.length() - 1) + "d");
86 }
87 return dataFile;
88 }
89
90 // initialize exception with the file where revlog structure information comes from
91 public HgInvalidControlFileException initWithIndexFile(HgInvalidControlFileException ex) {
92 return ex.setFile(indexFile);
93 }
94
95 // initialize exception with the file where revlog data comes from
96 public HgInvalidControlFileException initWithDataFile(HgInvalidControlFileException ex) {
97 // exceptions are usually raised after read attepmt, hence inline shall be initialized
98 // although honest approach is to call #initOutline() first
99 return ex.setFile(inline ? indexFile : getDataFile());
100 }
101
78 102
79 public int revisionCount() { 103 public int revisionCount() {
80 initOutline(); 104 initOutline();
81 return baseRevisions.length; 105 return baseRevisions.length;
82 } 106 }