esoe
2 years ago
1 changed files with 164 additions and 0 deletions
@ -0,0 +1,164 @@
@@ -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<? extends ZipEntry> 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<Ref> c= git.lsRemote().call(); |
||||
for (Ref ref : c) { |
||||
System.out.println("ref >>>>>>>>>> " + ref); |
||||
} |
||||
git.close(); |
||||
} |
||||
} |
Loading…
Reference in new issue