Raise error if FileNotFoundException is caught for an existing file
File, FileInputStream and friends may throw FileNotFoundException even if the file is existing e.g. when file permissions don't allow to access the file content. In most cases this is a severe error we should not suppress hence rethrow the FileNotFoundException in this case. This may also fix bug 451508. Bug: 451508 Change-Id: If4a94217fb5b7cfd4c04d881902f3e86193c7008 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
15e60b646e
commit
d2faec27a7
|
@ -451,6 +451,7 @@ packfileIsTruncated=Packfile {0} is truncated.
|
|||
packfileIsTruncatedNoParam=Packfile is truncated.
|
||||
packHandleIsStale=Pack file {0} handle is stale, removing it from pack list
|
||||
packHasUnresolvedDeltas=pack has unresolved deltas
|
||||
packInaccessible=Pack file {0} now inaccessible; removing it from pack list
|
||||
packingCancelledDuringObjectsWriting=Packing cancelled during objects writing
|
||||
packObjectCountMismatch=Pack object count mismatch: pack {0} index {1}: {2}
|
||||
packRefs=Pack refs
|
||||
|
|
|
@ -980,6 +980,9 @@ private PersonIdent parseAuthor() throws IOException {
|
|||
try {
|
||||
raw = IO.readFully(authorScriptFile);
|
||||
} catch (FileNotFoundException notFound) {
|
||||
if (authorScriptFile.exists()) {
|
||||
throw notFound;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return parseAuthor(raw);
|
||||
|
|
|
@ -510,6 +510,7 @@ public static JGitText get() {
|
|||
/***/ public String packfileIsTruncatedNoParam;
|
||||
/***/ public String packHandleIsStale;
|
||||
/***/ public String packHasUnresolvedDeltas;
|
||||
/***/ public String packInaccessible;
|
||||
/***/ public String packingCancelledDuringObjectsWriting;
|
||||
/***/ public String packObjectCountMismatch;
|
||||
/***/ public String packRefs;
|
||||
|
|
|
@ -227,6 +227,10 @@ public void copyCurrentContent() throws IOException {
|
|||
fis.close();
|
||||
}
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
if (ref.exists()) {
|
||||
unlock();
|
||||
throw fnfe;
|
||||
}
|
||||
// Don't worry about a file that doesn't exist yet, it
|
||||
// conceptually has no current content to copy.
|
||||
//
|
||||
|
|
|
@ -433,16 +433,14 @@ ObjectLoader openPackedObject(WindowCursor curs, AnyObjectId objectId) {
|
|||
|
||||
ObjectLoader openLooseObject(WindowCursor curs, AnyObjectId id)
|
||||
throws IOException {
|
||||
try {
|
||||
File path = fileFor(id);
|
||||
FileInputStream in = new FileInputStream(path);
|
||||
try {
|
||||
unpackedObjectCache.add(id);
|
||||
return UnpackedObject.open(in, path, id, curs);
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
File path = fileFor(id);
|
||||
try (FileInputStream in = new FileInputStream(path)) {
|
||||
unpackedObjectCache.add(id);
|
||||
return UnpackedObject.open(in, path, id, curs);
|
||||
} catch (FileNotFoundException noFile) {
|
||||
if (path.exists()) {
|
||||
throw noFile;
|
||||
}
|
||||
unpackedObjectCache.remove(id);
|
||||
return null;
|
||||
}
|
||||
|
@ -513,15 +511,14 @@ private long getPackedObjectSize(WindowCursor curs, AnyObjectId id) {
|
|||
|
||||
private long getLooseObjectSize(WindowCursor curs, AnyObjectId id)
|
||||
throws IOException {
|
||||
try {
|
||||
FileInputStream in = new FileInputStream(fileFor(id));
|
||||
try {
|
||||
unpackedObjectCache.add(id);
|
||||
return UnpackedObject.getSize(in, id, curs);
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
File f = fileFor(id);
|
||||
try (FileInputStream in = new FileInputStream(f)) {
|
||||
unpackedObjectCache.add(id);
|
||||
return UnpackedObject.getSize(in, id, curs);
|
||||
} catch (FileNotFoundException noFile) {
|
||||
if (f.exists()) {
|
||||
throw noFile;
|
||||
}
|
||||
unpackedObjectCache.remove(id);
|
||||
return -1;
|
||||
}
|
||||
|
@ -561,7 +558,11 @@ private void handlePackError(IOException e, PackFile p) {
|
|||
// Assume the pack is corrupted, and remove it from the list.
|
||||
removePack(p);
|
||||
} else if (e instanceof FileNotFoundException) {
|
||||
warnTmpl = JGitText.get().packWasDeleted;
|
||||
if (p.getPackFile().exists()) {
|
||||
warnTmpl = JGitText.get().packInaccessible;
|
||||
} else {
|
||||
warnTmpl = JGitText.get().packWasDeleted;
|
||||
}
|
||||
removePack(p);
|
||||
} else if (FileUtils.isStaleFileHandle(e)) {
|
||||
warnTmpl = JGitText.get().packHandleIsStale;
|
||||
|
|
|
@ -788,6 +788,9 @@ private PackedRefList readPackedRefs() throws IOException {
|
|||
new DigestInputStream(new FileInputStream(packedRefsFile),
|
||||
digest), CHARSET));
|
||||
} catch (FileNotFoundException noPackedRefs) {
|
||||
if (packedRefsFile.exists()) {
|
||||
throw noPackedRefs;
|
||||
}
|
||||
// Ignore it and leave the new list empty.
|
||||
return PackedRefList.NO_PACKED_REFS;
|
||||
}
|
||||
|
@ -944,7 +947,10 @@ LooseRef scanRef(LooseRef ref, String name) throws IOException {
|
|||
try {
|
||||
buf = IO.readSome(path, limit);
|
||||
} catch (FileNotFoundException noFile) {
|
||||
return null; // doesn't exist; not a reference.
|
||||
if (path.exists() && path.isFile()) {
|
||||
throw noFile;
|
||||
}
|
||||
return null; // doesn't exist or no file; not a reference.
|
||||
}
|
||||
|
||||
int n = buf.length;
|
||||
|
|
|
@ -96,6 +96,9 @@ public ReflogEntry getReverseEntry(int number) throws IOException {
|
|||
try {
|
||||
log = IO.readFully(logName);
|
||||
} catch (FileNotFoundException e) {
|
||||
if (logName.exists()) {
|
||||
throw e;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -118,6 +121,9 @@ public List<ReflogEntry> getReverseEntries(int max) throws IOException {
|
|||
try {
|
||||
log = IO.readFully(logName);
|
||||
} catch (FileNotFoundException e) {
|
||||
if (logName.exists()) {
|
||||
throw e;
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
|
|
|
@ -399,6 +399,9 @@ public ObjectStream openStream() throws MissingObjectException,
|
|||
try {
|
||||
in = buffer(new FileInputStream(path));
|
||||
} catch (FileNotFoundException gone) {
|
||||
if (path.exists()) {
|
||||
throw gone;
|
||||
}
|
||||
// If the loose file no longer exists, it may have been
|
||||
// moved into a pack file in the mean time. Try again
|
||||
// to locate the object.
|
||||
|
|
|
@ -1590,6 +1590,9 @@ private String readCommitMsgFile(String msgFilename) throws IOException {
|
|||
try {
|
||||
return RawParseUtils.decode(IO.readFully(mergeMsgFile));
|
||||
} catch (FileNotFoundException e) {
|
||||
if (mergeMsgFile.exists()) {
|
||||
throw e;
|
||||
}
|
||||
// the file has disappeared in the meantime ignore it
|
||||
return null;
|
||||
}
|
||||
|
@ -1621,6 +1624,9 @@ private byte[] readGitDirectoryFile(String filename) throws IOException {
|
|||
byte[] raw = IO.readFully(file);
|
||||
return raw.length > 0 ? raw : null;
|
||||
} catch (FileNotFoundException notFound) {
|
||||
if (file.exists()) {
|
||||
throw notFound;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -163,6 +163,9 @@ public void load() throws IOException, ConfigInvalidException {
|
|||
hash = newHash;
|
||||
}
|
||||
} catch (FileNotFoundException noFile) {
|
||||
if (configFile.exists()) {
|
||||
throw noFile;
|
||||
}
|
||||
clear();
|
||||
snapshot = newSnapshot;
|
||||
} catch (IOException e) {
|
||||
|
|
Loading…
Reference in New Issue