123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /*
- * 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();
- }
-
- }
|