1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * Copyright (C) 2017, Markus Duft <markus.duft@ssi-schaefer.com> and others
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0 which is available at
- * https://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- package org.eclipse.jgit.lfs;
-
- import java.io.IOException;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.nio.file.attribute.BasicFileAttributes;
-
- import org.eclipse.jgit.errors.LargeObjectException;
- import org.eclipse.jgit.errors.MissingObjectException;
- import org.eclipse.jgit.lib.Constants;
- import org.eclipse.jgit.lib.ObjectLoader;
- import org.eclipse.jgit.lib.ObjectStream;
- import org.eclipse.jgit.storage.pack.PackConfig;
- import org.eclipse.jgit.util.IO;
-
- /**
- * An {@link ObjectLoader} implementation that reads a media file from the LFS
- * storage.
- *
- * @since 4.11
- */
- public class LfsBlobLoader extends ObjectLoader {
-
- private Path mediaFile;
-
- private BasicFileAttributes attributes;
-
- private byte[] cached;
-
- /**
- * Create a loader for the LFS media file at the given path.
- *
- * @param mediaFile
- * path to the file
- * @throws IOException
- * in case of an error reading attributes
- */
- public LfsBlobLoader(Path mediaFile) throws IOException {
- this.mediaFile = mediaFile;
- this.attributes = Files.readAttributes(mediaFile,
- BasicFileAttributes.class);
- }
-
- @Override
- public int getType() {
- return Constants.OBJ_BLOB;
- }
-
- @Override
- public long getSize() {
- return attributes.size();
- }
-
- @Override
- public byte[] getCachedBytes() throws LargeObjectException {
- if (getSize() > PackConfig.DEFAULT_BIG_FILE_THRESHOLD) {
- throw new LargeObjectException();
- }
-
- if (cached == null) {
- try {
- cached = IO.readFully(mediaFile.toFile());
- } catch (IOException ioe) {
- throw new LargeObjectException(ioe);
- }
- }
- return cached;
- }
-
- @Override
- public ObjectStream openStream()
- throws MissingObjectException, IOException {
- return new ObjectStream.Filter(getType(), getSize(),
- Files.newInputStream(mediaFile));
- }
-
- }
|