Mercurial > jhg
comparison src/org/tmatesoft/hg/core/HgCatCommand.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 | 8107b95f4280 |
| children | 9c9c442b5f2e |
comparison
equal
deleted
inserted
replaced
| 395:4732fffff58a | 396:0ae53c32ecef |
|---|---|
| 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 * |
| 18 | 18 |
| 19 import static org.tmatesoft.hg.repo.HgInternals.wrongRevisionIndex; | 19 import static org.tmatesoft.hg.repo.HgInternals.wrongRevisionIndex; |
| 20 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; | 20 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; |
| 21 import static org.tmatesoft.hg.repo.HgRepository.TIP; | 21 import static org.tmatesoft.hg.repo.HgRepository.TIP; |
| 22 | 22 |
| 23 import java.io.FileNotFoundException; | |
| 24 import java.io.IOException; | 23 import java.io.IOException; |
| 25 import java.nio.ByteBuffer; | 24 import java.nio.ByteBuffer; |
| 26 | 25 |
| 27 import org.tmatesoft.hg.repo.HgDataFile; | 26 import org.tmatesoft.hg.repo.HgDataFile; |
| 28 import org.tmatesoft.hg.repo.HgRepository; | 27 import org.tmatesoft.hg.repo.HgRepository; |
| 130 | 129 |
| 131 /** | 130 /** |
| 132 * Runs the command with current set of parameters and pipes data to provided sink. | 131 * Runs the command with current set of parameters and pipes data to provided sink. |
| 133 * | 132 * |
| 134 * @param sink output channel to write data to. | 133 * @param sink output channel to write data to. |
| 135 * @throws HgDataStreamException | 134 * |
| 135 * @throws HgBadArgumentException if no target file node found | |
| 136 * @throws HgInvalidControlFileException if access to revlog index/data entry failed | |
| 137 * @throws HgInvalidFileException if access to file in working directory failed | |
| 138 * @throws HgException in case of some other library issue | |
| 139 * @throws CancelledException if execution of the operation was cancelled | |
| 140 * @throws HgInvalidRevisionException if supplied argument doesn't represent revision index in this revlog (<em>runtime exception</em>) | |
| 136 * @throws IllegalArgumentException when command arguments are incomplete or wrong | 141 * @throws IllegalArgumentException when command arguments are incomplete or wrong |
| 137 */ | 142 */ |
| 138 public void execute(ByteChannel sink) throws HgDataStreamException, HgInvalidControlFileException, CancelledException { | 143 public void execute(ByteChannel sink) throws HgException, CancelledException { |
| 144 // XXX perhaps, IAE together with HgBadArgumentException is not the best idea | |
| 139 if (revisionIndex == BAD_REVISION && revision == null && cset == null) { | 145 if (revisionIndex == BAD_REVISION && revision == null && cset == null) { |
| 140 throw new IllegalArgumentException("File revision, corresponing local number, or a changset nodeid shall be specified"); | 146 throw new IllegalArgumentException("File revision, corresponing local number, or a changset nodeid shall be specified"); |
| 141 } | 147 } |
| 142 if (file == null) { | 148 if (file == null) { |
| 143 throw new IllegalArgumentException("Name of the file is missing"); | 149 throw new IllegalArgumentException("Name of the file is missing"); |
| 145 if (sink == null) { | 151 if (sink == null) { |
| 146 throw new IllegalArgumentException("Need an output channel"); | 152 throw new IllegalArgumentException("Need an output channel"); |
| 147 } | 153 } |
| 148 HgDataFile dataFile = repo.getFileNode(file); | 154 HgDataFile dataFile = repo.getFileNode(file); |
| 149 if (!dataFile.exists()) { | 155 if (!dataFile.exists()) { |
| 150 throw new HgDataStreamException(file, new FileNotFoundException(file.toString())); | 156 // TODO may benefit from repo.getStoragePath to print revlog location in addition to human-friendly file path |
| 157 throw new HgBadArgumentException(String.format("File %s not found in the repository", file), null).setFileName(file); | |
| 151 } | 158 } |
| 152 int revToExtract; | 159 int revToExtract; |
| 153 if (cset != null) { | 160 if (cset != null) { |
| 154 int csetRev = repo.getChangelog().getRevisionIndex(cset); | 161 int csetRev = repo.getChangelog().getRevisionIndex(cset); |
| 155 Nodeid toExtract = null; | 162 Nodeid toExtract = null; |
