| /* |
| * 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.io.InputStream; |
| import java.io.PrintStream; |
| |
| import org.eclipse.jgit.annotations.Nullable; |
| import org.eclipse.jgit.attributes.Attribute; |
| import org.eclipse.jgit.hooks.PrePushHook; |
| import org.eclipse.jgit.lib.ConfigConstants; |
| import org.eclipse.jgit.lib.ObjectLoader; |
| import org.eclipse.jgit.lib.Repository; |
| import org.eclipse.jgit.util.LfsFactory; |
| |
| /** |
| * Implementation of {@link LfsFactory}, using built-in (optional) LFS support. |
| * |
| * @since 4.11 |
| */ |
| public class BuiltinLFS extends LfsFactory { |
| |
| private BuiltinLFS() { |
| SmudgeFilter.register(); |
| CleanFilter.register(); |
| } |
| |
| /** |
| * Activates the built-in LFS support. |
| */ |
| public static void register() { |
| setInstance(new BuiltinLFS()); |
| } |
| |
| @Override |
| public boolean isAvailable() { |
| return true; |
| } |
| |
| @Override |
| public ObjectLoader applySmudgeFilter(Repository db, ObjectLoader loader, |
| Attribute attribute) throws IOException { |
| if (isEnabled(db) && (attribute == null || isEnabled(db, attribute))) { |
| return LfsBlobFilter.smudgeLfsBlob(db, loader); |
| } |
| return loader; |
| } |
| |
| @Override |
| public LfsInputStream applyCleanFilter(Repository db, InputStream input, |
| long length, Attribute attribute) throws IOException { |
| if (isEnabled(db, attribute)) { |
| return new LfsInputStream(LfsBlobFilter.cleanLfsBlob(db, input)); |
| } |
| return new LfsInputStream(input, length); |
| } |
| |
| @Override |
| @Nullable |
| public PrePushHook getPrePushHook(Repository repo, |
| PrintStream outputStream) { |
| if (isEnabled(repo)) { |
| return new LfsPrePushHook(repo, outputStream); |
| } |
| return null; |
| } |
| |
| @Override |
| @Nullable |
| public PrePushHook getPrePushHook(Repository repo, PrintStream outputStream, |
| PrintStream errorStream) { |
| if (isEnabled(repo)) { |
| return new LfsPrePushHook(repo, outputStream, errorStream); |
| } |
| return null; |
| } |
| |
| /** |
| * @param db |
| * the repository |
| * @return whether LFS is requested for the given repo. |
| */ |
| @Override |
| public boolean isEnabled(Repository db) { |
| if (db == null) { |
| return false; |
| } |
| return db.getConfig().getBoolean(ConfigConstants.CONFIG_FILTER_SECTION, |
| ConfigConstants.CONFIG_SECTION_LFS, |
| ConfigConstants.CONFIG_KEY_USEJGITBUILTIN, |
| false); |
| } |
| |
| /** |
| * @param db |
| * the repository |
| * @param attribute |
| * the attribute to check |
| * @return whether LFS filter is enabled for the given .gitattribute |
| * attribute. |
| */ |
| private boolean isEnabled(Repository db, Attribute attribute) { |
| if (attribute == null) { |
| return false; |
| } |
| return isEnabled(db) && ConfigConstants.CONFIG_SECTION_LFS |
| .equals(attribute.getValue()); |
| } |
| |
| @Override |
| public LfsInstallCommand getInstallCommand() { |
| return new InstallBuiltinLfsCommand(); |
| } |
| |
| } |