1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * Copyright (C) 2015, 2021 Dariusz Luksza <dariusz@luksza.org> 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.lib;
-
- import java.io.IOException;
-
- import org.eclipse.jgit.errors.IncorrectObjectTypeException;
- import org.eclipse.jgit.errors.MissingObjectException;
- import org.eclipse.jgit.lfs.LfsPointer;
- import org.eclipse.jgit.lib.ObjectId;
- import org.eclipse.jgit.lib.ObjectLoader;
- import org.eclipse.jgit.lib.ObjectStream;
- import org.eclipse.jgit.treewalk.TreeWalk;
- import org.eclipse.jgit.treewalk.filter.TreeFilter;
-
- /**
- * Detects Large File pointers, as described in [1] in Git repository.
- *
- * [1] https://github.com/github/git-lfs/blob/master/docs/spec.md
- *
- * @since 4.7
- */
- public class LfsPointerFilter extends TreeFilter {
-
- private LfsPointer pointer;
-
- /**
- * Get the field <code>pointer</code>.
- *
- * @return {@link org.eclipse.jgit.lfs.LfsPointer} or {@code null}
- */
- public LfsPointer getPointer() {
- return pointer;
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean include(TreeWalk walk) throws MissingObjectException,
- IncorrectObjectTypeException, IOException {
- pointer = null;
- if (walk.isSubtree()) {
- return walk.isRecursive();
- }
- ObjectId objectId = walk.getObjectId(0);
- ObjectLoader object = walk.getObjectReader().open(objectId);
- if (object.getSize() > 1024) {
- return false;
- }
-
- try (ObjectStream stream = object.openStream()) {
- pointer = LfsPointer.parseLfsPointer(stream);
- return pointer != null;
- } catch (RuntimeException e) {
- return false;
- }
- }
-
- /** {@inheritDoc} */
- @Override
- public boolean shouldBeRecursive() {
- return false;
- }
-
- /** {@inheritDoc} */
- @Override
- public TreeFilter clone() {
- return new LfsPointerFilter();
- }
- }
|