From 16f24b5004653a5403855ea931d9fd9b757cd59c Mon Sep 17 00:00:00 2001
From: Michael Breu <Michael.Breu@arctis.at>
Date: Thu, 18 Aug 2022 13:37:27 +0200
Subject: [PATCH] Umstellung auf gitIgnore Pattern

---
 .../service/ShoppingBasketService.java        | 30 +++++++--------
 .../service/ShoppingBasketServiceTest.java    | 37 ++++++++++++++++++-
 2 files changed, 51 insertions(+), 16 deletions(-)

diff --git a/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java b/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java
index 14e892b15..b35b4f4a9 100644
--- a/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java
+++ b/src/main/java/at/ac/uibk/gitsearch/service/ShoppingBasketService.java
@@ -18,13 +18,15 @@ import org.checkerframework.checker.nullness.qual.Nullable;
 import org.codeability.sharing.plugins.api.ShoppingBasket;
 import org.codeability.sharing.plugins.api.ShoppingBasket.UserInfo;
 import org.codeability.sharing.plugins.api.search.SearchResultDTO;
+import org.eclipse.jgit.errors.InvalidPatternException;
+import org.eclipse.jgit.ignore.FastIgnoreRule;
+import org.eclipse.jgit.ignore.IMatcher;
 import org.gitlab4j.api.GitLabApi;
 import org.gitlab4j.api.GitLabApiException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.AntPathMatcher;
 import org.springframework.util.StreamUtils;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -417,25 +419,23 @@ public class ShoppingBasketService {
 			boolean isDirectory) {
 		if (filePath == null)
 			return false;
-		AntPathMatcher antPathMatcher = new AntPathMatcher();
         for (String filter : filterOut) {
 			if (filter == null) {
 				log.warn("filter should never be null!");
 				continue;
 			}
-			String filePathToTest = filePath;
-			// just adapt current path to pattern
-			if (filePathToTest
-							.startsWith(AntPathMatcher.DEFAULT_PATH_SEPARATOR)
-					&& !filter
-							.startsWith(AntPathMatcher.DEFAULT_PATH_SEPARATOR))
-				filePathToTest = filePathToTest.substring(1);
-			if (!filePathToTest
-							.startsWith(AntPathMatcher.DEFAULT_PATH_SEPARATOR)
-					&& filter.startsWith(AntPathMatcher.DEFAULT_PATH_SEPARATOR))
-				filePathToTest = AntPathMatcher.DEFAULT_PATH_SEPARATOR
-						+ filePathToTest;
-			if (antPathMatcher.match(filter, filePathToTest)) {
+			IMatcher matcher;
+			try {
+				if (filter.endsWith(FastIgnoreRule.PATH_SEPARATOR + ""))
+					matcher = IMatcher.createPathMatcher(
+							filter.substring(0, filter.length() - 1), true);
+				else
+					matcher = IMatcher.createPathMatcher(filter, false);
+			} catch (InvalidPatternException e) {
+				log.warn("Cannot parse pattern {}", filter);
+				continue;
+			}
+			if (matcher.matches(filePath, isDirectory, false)) {
 				return true;
 			}
         }
diff --git a/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceTest.java b/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceTest.java
index c28e9e305..e3df41061 100644
--- a/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceTest.java
+++ b/src/test/java/at/ac/uibk/gitsearch/service/ShoppingBasketServiceTest.java
@@ -32,6 +32,11 @@ public class ShoppingBasketServiceTest {
 				new String[]{"**/some*.pdf"}, false));
 		assertTrue(ShoppingBasketService.filterOut("/someFile.txt",
 				new String[]{"**/some*.txt"}, false));
+
+		assertTrue(ShoppingBasketService.filterOut("parent/someFile.txt",
+				new String[]{"**/some*.txt"}, false));
+		assertFalse(ShoppingBasketService.filterOut("parent/someFile.txt",
+				new String[]{"**/someFile.txt/"}, false));
 	}
 
 	@Test
@@ -50,12 +55,42 @@ public class ShoppingBasketServiceTest {
 				new String[]{"*/some/"}, true));
 		assertFalse(ShoppingBasketService.filterOut("parent/someDir",
 				new String[]{"*/some/"}, true));
-		assertFalse(ShoppingBasketService.filterOut("parent/someDir",
+		assertTrue(ShoppingBasketService.filterOut("parent/someDir",
 				new String[]{"someDir/"}, true));
+		assertTrue(ShoppingBasketService.filterOut("parent/someDir",
+				new String[]{"*/someDir"}, true));
+		assertTrue(ShoppingBasketService.filterOut("parent/someDir",
+				new String[]{"*/some*"}, true));
 		assertTrue(ShoppingBasketService.filterOut("parent/someDir",
 				new String[]{"**/someDir"}, true));
 		assertTrue(ShoppingBasketService.filterOut("parent/someDir",
 				new String[]{"**/some*"}, true));
 
+		assertTrue(ShoppingBasketService.filterOut("parent/someDir",
+				new String[]{"parent"}, true));
+
 	}
+
+	@Test
+	public void filterOutTestsWithPathes() {
+		assertFalse(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{}, true));
+		assertFalse(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{"parent/some"}, true));
+		assertTrue(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{"*/*rent/some*"}, true));
+		assertFalse(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{"parent/some*"}, true));
+		assertFalse(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{"par*/some*"}, true));
+		assertTrue(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{"*/parent/some*"}, true));
+		assertTrue(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{"*/*/some*"}, true));
+		assertTrue(ShoppingBasketService.filterOut("/root/parent/someDir",
+				new String[]{"**/some*"}, true));
+
+
+	}
+
 }
-- 
GitLab