From 8aabe7e6e6f0def05f0af49e6c538d6f65df1395 Mon Sep 17 00:00:00 2001
From: Gero Lueckemeyer <gero.lueckemeyer@hft-stuttgart.de>
Date: Tue, 30 Jan 2024 10:25:41 +0100
Subject: [PATCH] added solution idea comments for issue #8

---
 .../dtabackend/utils/JGitUtil.java            | 128 ++++++++++--------
 1 file changed, 75 insertions(+), 53 deletions(-)

diff --git a/src/main/java/de/hftstuttgart/dtabackend/utils/JGitUtil.java b/src/main/java/de/hftstuttgart/dtabackend/utils/JGitUtil.java
index 0a7667f..1407721 100644
--- a/src/main/java/de/hftstuttgart/dtabackend/utils/JGitUtil.java
+++ b/src/main/java/de/hftstuttgart/dtabackend/utils/JGitUtil.java
@@ -1,53 +1,75 @@
-package de.hftstuttgart.dtabackend.utils;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.eclipse.jgit.api.CloneCommand;
-import org.eclipse.jgit.api.Git;
-import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
-import org.springframework.stereotype.Component;
-import org.springframework.util.FileSystemUtils;
-
-import java.io.File;
-import java.util.regex.Matcher;
-
-@Component
-public class JGitUtil {
-
-    private static final Logger LOG = LogManager.getLogger(JGitUtil.class);
-
-    public JGitUtil() {}
-
-    public void cloneRepository(Matcher config, String targetPath) {
-        LOG.debug(String.format("cloning repository: %s", config.group(1)));
-
-        File targetDirectory = new File(targetPath);
-        if (targetDirectory.exists()) {
-            LOG.debug("clone target directory existing yet, deleting now");
-            FileSystemUtils.deleteRecursively(targetDirectory);
-        }
-
-        try {
-            LOG.debug("preparing clone");
-            CloneCommand cloneCommand = Git.cloneRepository()
-                .setDirectory(targetDirectory)
-                .setURI(config.group(1));
-
-            if (!config.group(2).equals("none") && !config.group(3).equals("none")) {
-                LOG.debug("setting credentials");
-                cloneCommand.setCredentialsProvider(
-                    new UsernamePasswordCredentialsProvider(config.group(2), config.group(3)));
-            }
-
-            LOG.debug("cloning...");
-            cloneCommand.call()
-                .close();
-        }
-        catch (GitAPIException e) {
-            LOG.error(String.format("Error while cloning from %s", config.group(1)), e);
-        }
-
-        LOG.debug(String.format("cloned from %s to %s", config.group(1), targetDirectory));
-    }
-}
+package de.hftstuttgart.dtabackend.utils;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.eclipse.jgit.api.CloneCommand;
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
+import org.springframework.stereotype.Component;
+import org.springframework.util.FileSystemUtils;
+
+import java.io.File;
+import java.util.regex.Matcher;
+
+@Component
+public class JGitUtil {
+
+    private static final Logger LOG = LogManager.getLogger(JGitUtil.class);
+
+    public JGitUtil() {}
+
+    public void cloneRepository(Matcher config, String targetPath) {
+        LOG.debug(String.format("cloning repository: %s", config.group(1)));
+
+        File targetDirectory = new File(targetPath);
+        if (targetDirectory.exists()) {
+            LOG.debug("clone target directory existing yet, deleting now");
+            FileSystemUtils.deleteRecursively(targetDirectory);
+        }
+
+        //create companion checkout dir "targetPath"+"_checkout"
+        File checkoutDirectory = new File(targetPath+"_checkout");
+        if (targetDirectory.exists()) {
+            LOG.debug("clone checkout directory existing yet, deleting now");
+            FileSystemUtils.deleteRecursively(checkoutDirectory);
+        }
+
+        try {
+        	//check group(1) for possible directory
+        	//if(!config.group(1).endsWith(".git"))
+        		//cut off the directory part
+        			//pos=instr(".git/")
+        			//cloneURI=config.group(1).substr(1, pos+3)
+        	//else
+        		//cloneURI=config.group(1)
+            LOG.debug("preparing clone");
+            CloneCommand cloneCommand = Git.cloneRepository()
+                .setDirectory(checkoutDirectory)
+                //.setURI(cloneURI)
+                .setURI(config.group(1));
+
+            if (!config.group(2).equals("none") && !config.group(3).equals("none")) {
+                LOG.debug("setting credentials");
+                cloneCommand.setCredentialsProvider(
+                    new UsernamePasswordCredentialsProvider(config.group(2), config.group(3)));
+            }
+
+            LOG.debug("cloning...");
+            cloneCommand.call()
+                .close();
+            
+            //copy appropriate path from checkout directory to target directory
+            //if(!config.group(1).endsWith(".git"))
+            	//copy checkout+config.group(1).substr(pos+4) to target directory
+            //else
+            	//copy checkout directory to target directory directly
+            
+        }
+        catch (GitAPIException e) {
+            LOG.error(String.format("Error while cloning from %s", config.group(1)), e);
+        }
+
+        LOG.debug(String.format("cloned from %s to %s", config.group(1), targetDirectory));
+    }
+}
-- 
GitLab