| /* | |
| * Copyright (C) 2016, Christian Halstrick <christian.halstrick@sap.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 static org.eclipse.jgit.lib.Constants.OBJECTS; | |
| import java.io.IOException; | |
| import java.nio.file.Files; | |
| import java.nio.file.Path; | |
| import org.eclipse.jgit.lfs.lib.AnyLongObjectId; | |
| import org.eclipse.jgit.lfs.lib.Constants; | |
| import org.eclipse.jgit.lib.Repository; | |
| /** | |
| * Class which represents the lfs folder hierarchy inside a {@code .git} folder | |
| * | |
| * @since 4.6 | |
| */ | |
| public class Lfs { | |
| private Path root; | |
| private Path objDir; | |
| private Path tmpDir; | |
| /** | |
| * Constructor for Lfs. | |
| * | |
| * @param db | |
| * the associated repo | |
| * | |
| * @since 4.11 | |
| */ | |
| public Lfs(Repository db) { | |
| this.root = db.getDirectory().toPath().resolve(Constants.LFS); | |
| } | |
| /** | |
| * Get the LFS root directory | |
| * | |
| * @return the path to the LFS directory | |
| */ | |
| public Path getLfsRoot() { | |
| return root; | |
| } | |
| /** | |
| * Get the path to the temporary directory used by LFS. | |
| * | |
| * @return the path to the temporary directory used by LFS. Will be | |
| * {@code <repo>/.git/lfs/tmp} | |
| */ | |
| public Path getLfsTmpDir() { | |
| if (tmpDir == null) { | |
| tmpDir = root.resolve("tmp"); //$NON-NLS-1$ | |
| } | |
| return tmpDir; | |
| } | |
| /** | |
| * Get the object directory used by LFS | |
| * | |
| * @return the path to the object directory used by LFS. Will be | |
| * {@code <repo>/.git/lfs/objects} | |
| */ | |
| public Path getLfsObjDir() { | |
| if (objDir == null) { | |
| objDir = root.resolve(OBJECTS); | |
| } | |
| return objDir; | |
| } | |
| /** | |
| * Get the media file which stores the original content | |
| * | |
| * @param id | |
| * the id of the mediafile | |
| * @return the file which stores the original content. Its path will look | |
| * like | |
| * {@code "<repo>/.git/lfs/objects/<firstTwoLettersOfID>/<remainingLettersOfID>"} | |
| */ | |
| public Path getMediaFile(AnyLongObjectId id) { | |
| String idStr = id.name(); | |
| return getLfsObjDir().resolve(idStr.substring(0, 2)) | |
| .resolve(idStr.substring(2, 4)).resolve(idStr); | |
| } | |
| /** | |
| * Create a new temp file in the LFS directory | |
| * | |
| * @return a new temporary file in the LFS directory | |
| * @throws java.io.IOException | |
| * when the temp file could not be created | |
| */ | |
| public Path createTmpFile() throws IOException { | |
| return Files.createTempFile(getLfsTmpDir(), null, null); | |
| } | |
| } |