From 7b02766581c0945f09a91e3d4409e1d1db312602 Mon Sep 17 00:00:00 2001 From: esoe Date: Fri, 11 Nov 2022 20:45:58 +0300 Subject: [PATCH] open repo --- .../molokoin/sourceListener/GitListener.java | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 src/main/java/ru/molokoin/sourceListener/GitListener.java diff --git a/src/main/java/ru/molokoin/sourceListener/GitListener.java b/src/main/java/ru/molokoin/sourceListener/GitListener.java new file mode 100644 index 0000000..2ced3a3 --- /dev/null +++ b/src/main/java/ru/molokoin/sourceListener/GitListener.java @@ -0,0 +1,164 @@ +package ru.molokoin.sourceListener; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collection; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +import org.eclipse.jgit.api.FetchCommand; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.api.errors.InvalidRemoteException; +import org.eclipse.jgit.api.errors.TransportException; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.transport.FetchResult; + +import com.fasterxml.jackson.core.exc.StreamReadException; +import com.fasterxml.jackson.databind.DatabindException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import ru.molokoin.sourceListener.git.RepoCrafter; +import ru.molokoin.sourceListener.net.Service; +import ru.molokoin.sourceListener.opt.Options; + +public class GitListener { + public Options opt; + public String optionsPath = "options-home.json"; + private Repository repo; + public GitListener(){ + try { + opt = readOptions(); + } catch (StreamReadException e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } catch (DatabindException e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + } + } + /** + * Метод запускает бесконечный цикл проверки обновлений в репозитарии. + */ + public void live(){ + //TODO live() + } + /** + * Метод инициирует репозиторий / клонирует репозиторий + * по сути не нужный метод, реализующий одну команду. + * в коде надо использовать сразу клонирующую команду. + */ + public void initRepo(){ + try { + setRepo(RepoCrafter.copy(opt.getGitLink(), opt.getGitLocalPath())); + //repo.close(); + } catch (InvalidRemoteException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (TransportException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (GitAPIException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + /** + * Открываем репозитарий, ранее склонированный + * по хорошему делать статическим методом, возвращающим открытый репозитарий + * @throws IOException + */ + public void openRepo() throws IOException{ + Path repoPath = Paths.get("C:\\Users\\Strannik\\Documents\\esoe\\code\\sourceListener\\out\\repos"); + try (Git git = Git.open(repoPath.toFile())) { + this.repo = git.getRepository(); + git.close(); + } + + } + /** + * Извлечение данных из options.json + * @return + * @throws StreamReadException + * @throws DatabindException + * @throws IOException + */ + public Options readOptions() throws StreamReadException, DatabindException, IOException{ + Options opt; + ObjectMapper mapper = new ObjectMapper(); + opt = mapper.readValue(new File(optionsPath), Options.class); + return opt; + } + public Options getOpt() { + return opt; + } + /** + * распаковка архива + */ + public void extract()throws IOException{ + //считываем настройки извлечения + try (ZipFile file = new ZipFile(opt.getZipPath())){ + Enumeration zipEntries = file.entries(); + while (zipEntries.hasMoreElements()){ + ZipEntry zipEntry = zipEntries.nextElement(); + File newFile = new File(opt.getUnzipPath(), zipEntry.getName()); + newFile.getParentFile().mkdirs(); + if (!zipEntry.isDirectory()){ + try (FileOutputStream outputStream = new FileOutputStream(newFile)){ + BufferedInputStream inputStream = new BufferedInputStream(file.getInputStream(zipEntry)); + while (inputStream.available() > 0){ + outputStream.write(inputStream.read()); + } + inputStream.close(); + } + } + } + } + } + public void setRepo(Repository repo) { + this.repo = repo; + } + public Repository getRepo() { + return repo; + } + public static void main(String[] args) throws InvalidRemoteException, TransportException, GitAPIException { + GitListener ear = new GitListener(); + // try { + // Service.download(ear.opt.getZipLink(), ear.opt.getDownloadPath());; + // ear.extract(); + // } catch (IOException e) { + // System.out.println(e.getMessage()); + // } + + //клонируем репозитарий + // ear.initRepo(); + // Git git = new Git(ear.getRepo()); + + //открываем репозитарий из локального хранилища + try { + ear.openRepo(); + } catch (IOException e) { + System.out.println("Epic fail with >>>>> openRepo() ... "); + e.printStackTrace(); + } + Git git = new Git(ear.getRepo()); + + Collection c= git.lsRemote().call(); + for (Ref ref : c) { + System.out.println("ref >>>>>>>>>> " + ref); + } + git.close(); + } +}