You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LfsPointerFilter.java 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Copyright (C) 2015, 2021 Dariusz Luksza <dariusz@luksza.org> and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.lfs.lib;
  11. import java.io.IOException;
  12. import org.eclipse.jgit.errors.IncorrectObjectTypeException;
  13. import org.eclipse.jgit.errors.MissingObjectException;
  14. import org.eclipse.jgit.lfs.LfsPointer;
  15. import org.eclipse.jgit.lib.ObjectId;
  16. import org.eclipse.jgit.lib.ObjectLoader;
  17. import org.eclipse.jgit.lib.ObjectStream;
  18. import org.eclipse.jgit.treewalk.TreeWalk;
  19. import org.eclipse.jgit.treewalk.filter.TreeFilter;
  20. /**
  21. * Detects Large File pointers, as described in [1] in Git repository.
  22. *
  23. * [1] https://github.com/github/git-lfs/blob/master/docs/spec.md
  24. *
  25. * @since 4.7
  26. */
  27. public class LfsPointerFilter extends TreeFilter {
  28. private LfsPointer pointer;
  29. /**
  30. * Get the field <code>pointer</code>.
  31. *
  32. * @return {@link org.eclipse.jgit.lfs.LfsPointer} or {@code null}
  33. */
  34. public LfsPointer getPointer() {
  35. return pointer;
  36. }
  37. /** {@inheritDoc} */
  38. @Override
  39. public boolean include(TreeWalk walk) throws MissingObjectException,
  40. IncorrectObjectTypeException, IOException {
  41. pointer = null;
  42. if (walk.isSubtree()) {
  43. return walk.isRecursive();
  44. }
  45. ObjectId objectId = walk.getObjectId(0);
  46. ObjectLoader object = walk.getObjectReader().open(objectId);
  47. if (object.getSize() > 1024) {
  48. return false;
  49. }
  50. try (ObjectStream stream = object.openStream()) {
  51. pointer = LfsPointer.parseLfsPointer(stream);
  52. return pointer != null;
  53. } catch (RuntimeException e) {
  54. return false;
  55. }
  56. }
  57. /** {@inheritDoc} */
  58. @Override
  59. public boolean shouldBeRecursive() {
  60. return false;
  61. }
  62. /** {@inheritDoc} */
  63. @Override
  64. public TreeFilter clone() {
  65. return new LfsPointerFilter();
  66. }
  67. }