From ce32f503cec0025c5ec9193669cd0a9a2da3480e Mon Sep 17 00:00:00 2001 From: Grzegorz Kossakowski Date: Mon, 19 Apr 2010 12:30:48 +0200 Subject: Extract implementation of fileType-based tree filter out of JGitSnapshot. Such a filter is general enough that it's better to extract it it's own object so it can be reused. Change-Id: I30635577f6d1ca8dbfacec99c85de9919451a9da Signed-off-by: Grzegorz Kossakowski --- .../com/google/gimd/jgit/FileTypeTreeFilter.scala | 38 ++++++++++++++++++++++ .../scala/com/google/gimd/jgit/JGitSnapshot.scala | 18 +--------- 2 files changed, 39 insertions(+), 17 deletions(-) create mode 100644 src/main/scala/com/google/gimd/jgit/FileTypeTreeFilter.scala diff --git a/src/main/scala/com/google/gimd/jgit/FileTypeTreeFilter.scala b/src/main/scala/com/google/gimd/jgit/FileTypeTreeFilter.scala new file mode 100644 index 0000000..217c693 --- /dev/null +++ b/src/main/scala/com/google/gimd/jgit/FileTypeTreeFilter.scala @@ -0,0 +1,38 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.gimd.jgit + +import org.spearce.jgit.lib.FileMode +import com.google.gimd.file.FileType +import org.spearce.jgit.treewalk.filter.{AndTreeFilter, PathFilter, PathSuffixFilter, TreeFilter} +import org.spearce.jgit.treewalk.TreeWalk + + +object FileTypeTreeFilter { + + def apply[T](fileType: FileType[T]): TreeFilter = + AndTreeFilter.create( + Array( + RegularFileFilter, + fileType.pathPrefix.map(PathFilter.create(_)).getOrElse(TreeFilter.ALL), + fileType.pathSuffix.map(PathSuffixFilter.create(_)).getOrElse(TreeFilter.ALL) + ) + ) + + private object RegularFileFilter extends TreeFilter { + def shouldBeRecursive = false + def include(treeWalk: TreeWalk) = + treeWalk.isSubtree || FileMode.REGULAR_FILE.equals(treeWalk.getFileMode(0)) + override def clone = this + } + +} diff --git a/src/main/scala/com/google/gimd/jgit/JGitSnapshot.scala b/src/main/scala/com/google/gimd/jgit/JGitSnapshot.scala index 094577a..ab1e7d3 100644 --- a/src/main/scala/com/google/gimd/jgit/JGitSnapshot.scala +++ b/src/main/scala/com/google/gimd/jgit/JGitSnapshot.scala @@ -27,7 +27,7 @@ final class JGitSnapshot(val branch: JGitBranch, val commit: RevCommit) extends val treeWalk = new TreeWalk(branch.repository) treeWalk.reset(commit.getTree) treeWalk.setRecursive(true) - treeWalk.setFilter(treeFilter(fileType)) + treeWalk.setFilter(FileTypeTreeFilter(fileType)) val fileIterator = new Iterator[File[T]] { private var doesHasNext = treeWalk.next @@ -44,20 +44,4 @@ final class JGitSnapshot(val branch: JGitBranch, val commit: RevCommit) extends fileIterator } - private def treeFilter[T](fileType: FileType[T]): TreeFilter = - AndTreeFilter.create( - Array( - RegularFileFilter, - fileType.pathPrefix.map(PathFilter.create(_)).getOrElse(TreeFilter.ALL), - fileType.pathSuffix.map(PathSuffixFilter.create(_)).getOrElse(TreeFilter.ALL) - ) - ) - - private object RegularFileFilter extends TreeFilter { - def shouldBeRecursive = false - def include(treeWalk: TreeWalk) = - treeWalk.isSubtree || FileMode.REGULAR_FILE.equals(treeWalk.getFileMode(0)) - override def clone = this - } - } -- cgit v1.2.3