List of usage examples for org.eclipse.jgit.api Git wrap
public static Git wrap(Repository repo)
From source file:br.com.ingenieux.mojo.beanstalk.bundle.CodeCommitFastDeployMojo.java
License:Apache License
@Override protected Git getGitRepo() throws Exception { if (stagingDirectory.exists() && new File(stagingDirectory, "HEAD").exists()) { Git git = Git.open(stagingDirectory); git.fetch().setRemote(getRemoteUrl(null, null)).setProgressMonitor(new TextProgressMonitor()) .setRefSpecs(new RefSpec("refs/heads/master")).call(); } else {//w w w. jav a 2 s .c o m Git.cloneRepository().setURI(getRemoteUrl(null, null)).setProgressMonitor(new TextProgressMonitor()) .setDirectory(stagingDirectory).setNoCheckout(true).setBare(true).call(); } Repository r = null; RepositoryBuilder b = new RepositoryBuilder().setGitDir(stagingDirectory).setWorkTree(sourceDirectory); r = b.build(); final Git git = Git.wrap(r); return git; }
From source file:br.com.riselabs.cotonet.builder.NetworkBuilder.java
License:Open Source License
/** * Returns the conflicting merge scenarios * /*from w w w. j a v a2 s . com*/ * @return - a list of merge scenarios. it may be empty in case of no * conflict. * @throws IOException */ private List<MergeScenario> getMergeScenarios() throws IOException { List<MergeScenario> result = new ArrayList<MergeScenario>(); List<RevCommit> mergeCommits = new ArrayList<RevCommit>(); Iterable<RevCommit> gitlog; try { Git git = Git.wrap(getProject().getRepository()); gitlog = git.log().call(); for (RevCommit commit : gitlog) { if (commit.getParentCount() == 2) { mergeCommits.add(commit); // collecting merge commits // we know there is only to parents RevCommit leftParent = commit.getParent(0); RevCommit rightParent = commit.getParent(1); ThreeWayMerger merger = MergeStrategy.RECURSIVE.newMerger(getProject().getRepository(), true); // selecting the conflicting ones boolean noConflicts = false; try { noConflicts = merger.merge(leftParent, rightParent); } catch (NoMergeBaseException e) { StringBuilder sb = new StringBuilder(); sb.append("[" + project.getName() + ":" + project.getUrl() + "] " + "Skipping merge scenario due to '" + e.getMessage() + "'\n"); sb.append("---> Skipped scenario:\n"); sb.append("::Base (<several>): \n"); sb.append("::Left (" + leftParent.getAuthorIdent().getWhen().toString() + "):" + leftParent.getName() + "\n"); sb.append("::Right (" + rightParent.getAuthorIdent().getWhen().toString() + "):" + rightParent.getName() + "\n"); Logger.log(log, sb.toString()); Logger.logStackTrace(log, e); continue; } if (noConflicts) { continue; } RevWalk walk = new RevWalk(getProject().getRepository()); // for merges without a base commit if (merger.getBaseCommitId() == null) continue; RevCommit baseCommit = walk.lookupCommit(merger.getBaseCommitId()); walk.close(); Timestamp mergeDate = new Timestamp(commit.getAuthorIdent().getWhen().getTime()); result.add(new MergeScenario(baseCommit, leftParent, rightParent, commit, mergeDate)); } } } catch (GitAPIException e) { Logger.logStackTrace(log, e); } return result; }
From source file:br.com.riselabs.cotonet.builder.NetworkBuilder.java
License:Open Source License
/** * Returns the conflicting files of the given scenario. * /* w ww . ja v a 2s .co m*/ * @param scenario * @return * @throws CheckoutConflictException * @throws GitAPIException */ private List<File> getConflictingFiles(MergeScenario scenario) throws CheckoutConflictException, GitAPIException { Git git = Git.wrap(getProject().getRepository()); // this is for the cases of restarting after exception in a conflict // scenario analysis try { git.reset().setRef(scenario.getLeft().getName()).setMode(ResetType.HARD).call(); } catch (JGitInternalException e) { Logger.log(log, "[" + project.getName() + "] JGit Reset Command ended with exception." + " Trying external reset command."); ExternalGitCommand egit = new ExternalGitCommand(); try { egit.setType(CommandType.RESET).setDirectory(project.getRepository().getDirectory().getParentFile()) .call(); } catch (BlameException e1) { Logger.logStackTrace(log, e1); return null; } } CheckoutCommand ckoutCmd = git.checkout(); ckoutCmd.setName(scenario.getLeft().getName()); ckoutCmd.setStartPoint(scenario.getLeft()); ckoutCmd.call(); MergeCommand mergeCmd = git.merge(); mergeCmd.setCommit(false); mergeCmd.setStrategy(MergeStrategy.RECURSIVE); mergeCmd.include(scenario.getRight()); Set<String> conflictingPaths; try { // dealing with MissingObjectException MergeResult mResult = mergeCmd.call(); // dealing with Ghosts conflicts conflictingPaths = mResult.getConflicts().keySet(); } catch (NullPointerException | JGitInternalException e) { StringBuilder sb = new StringBuilder(); sb.append("[" + project.getName() + ":" + project.getUrl() + "] " + "Skipping merge scenario due to '" + e.getMessage() + "'\n"); sb.append("--> Exception: " + e.getClass()); sb.append("--> Skipped scenario:\n"); sb.append("::Base:" + scenario.getBase().getName() + "\n"); sb.append("::Left:" + scenario.getLeft().getName() + "\n"); sb.append("::Right:" + scenario.getRight().getName() + "\n"); Logger.log(log, sb.toString()); return null; } List<File> result = new ArrayList<File>(); for (String path : conflictingPaths) { result.add(new File(getProject().getRepository().getDirectory().getParent(), path)); } return result; }
From source file:br.com.riselabs.cotonet.test.helpers.ConflictBasedRepositoryTestCase.java
License:Open Source License
public MergeResult runMerge(MergeScenario scenario) throws RefAlreadyExistsException, RefNotFoundException, InvalidRefNameException, CheckoutConflictException, GitAPIException { Git git = Git.wrap(db); CheckoutCommand ckoutCmd = git.checkout(); ckoutCmd.setName(scenario.getLeft().getName()); ckoutCmd.setStartPoint(scenario.getLeft()); ckoutCmd.call();/*w w w . j av a 2 s . c o m*/ MergeCommand mergeCmd = git.merge(); mergeCmd.setCommit(false); mergeCmd.include(scenario.getRight()); return mergeCmd.call(); }
From source file:br.com.riselabs.cotonet.test.helpers.ConflictBasedRepositoryTestCase.java
License:Open Source License
public static void logAllCommits(Repository repo) throws Exception { Git git = Git.wrap(repo); Iterable<RevCommit> commits = git.log().all().call(); for (RevCommit c : commits) { System.out.println("time(s): " + c.getCommitTime() + ", author: " + c.getAuthorIdent().getName()); }// w w w . java2 s . c o m }
From source file:br.com.riselabs.cotonet.test.helpers.ConflictBasedRepositoryTestCase.java
License:Open Source License
/** * Creates a collaboration scenario with five developers (Devs A, B, C, D, * and E) and two files (Foo.java and Bar.java). * //from w ww . j av a 2 s. c o m * @return * @throws Exception */ public MergeScenario setCollaborationScenarioInTempRepository() throws Exception { Git git = Git.wrap(db); RevCommit mergeBaseCommit, lastMasterCommit, lastSideCommit; // first versions of Foo and Bar writeTrashFile("Foo.java", "1"); writeTrashFile("Bar.java", "1"); git.add().addFilepattern("Foo.java").addFilepattern("Bar.java").call(); git.commit().setMessage("initial commit").setAuthor(devs.get("devY")).call(); writeTrashFile("Foo.java", "1\n2\n3\n4\n5\n6\n7\n8\n"); writeTrashFile("Bar.java", "1\n2\n3\n4\n"); git.add().addFilepattern("Foo.java").addFilepattern("Bar.java").call(); mergeBaseCommit = git.commit().setMessage("m0").setAuthor(devs.get("devX")).call(); // Dev E changes Foo writeTrashFile("Foo.java", "1\n2\n3\n4\n5-master\n6\n7\n8\n"); git.add().addFilepattern("Foo.java").call(); git.commit().setMessage("m1").setAuthor(devs.get("devE")).call(); // Dev C changes Foo writeTrashFile("Foo.java", "1\n2\n3\n4-master\n5\n6\n7\n8\n"); writeTrashFile("Bar.java", "1\n2\n3-master\n4-master\n"); git.add().addFilepattern("Foo.java").addFilepattern("Bar.java").call(); git.commit().setMessage("m2").setAuthor(devs.get("devC")).call(); // Dev B changes writeTrashFile("Bar.java", "1\n2\n3\n4-master\n"); git.add().addFilepattern("Bar.java").call(); lastMasterCommit = git.commit().setMessage("m3").setAuthor(devs.get("devB")).call(); // updating the tree with the changes createBranch(mergeBaseCommit, "refs/heads/side"); checkoutBranch("refs/heads/side"); // Dev D changes Foo writeTrashFile("Foo.java", "1\n2\n3\n4-side\n5\n6\n7\n8\n"); git.add().addFilepattern("Foo.java").call(); git.commit().setMessage("s1").setAuthor(devs.get("devD")).call(); // Dev E changes Bar writeTrashFile("Bar.java", "1\n2\n3\n4\n5\n"); git.add().addFilepattern("Bar.java").call(); git.commit().setMessage("s2").setAuthor(devs.get("devE")).call(); // Dev A changes Bar writeTrashFile("Bar.java", "1\n2\n3-side\n4-side\n5\n"); git.add().addFilepattern("Bar.java").call(); lastSideCommit = git.commit().setMessage("s3").setAuthor(devs.get("devA")).call(); return new MergeScenario(null, mergeBaseCommit, lastMasterCommit, lastSideCommit, null, null); }
From source file:br.com.riselabs.cotonet.test.helpers.ConflictBasedRepositoryTestCase.java
License:Open Source License
/** * Creates a collaboration scenario with five developers (Devs A, B, C, D, * and E) and two files (Foo.java and Bar.java). * //from w w w . j a v a 2 s . c o m * @return * @throws Exception */ public MergeScenario setCollaborationScenarioInBareRepository() throws Exception { Git git = Git.wrap(db); RevCommit mergeBaseCommit, lastMasterCommit, lastSideCommit; TestRepository<Repository> db_t = new TestRepository<Repository>(db); BranchBuilder master = db_t.branch("master"); // first versions of Foo and Bar master.commit().add("Foo.java", "1").add("Bar.java", "1").message("initial commit").author(devs.get("devY")) .create(); mergeBaseCommit = master.commit().add("Foo.java", "1\n2\n3\n4\n5\n6\n7\n8\n") .add("Bar.java", "1\n2\n3\n4\n").message("m0").author(devs.get("devX")).create(); // Dev E changes Foo master.commit().add("Foo.java", "1\n2\n3\n4\n5-master\n6\n7\n8\n").message("m1").author(devs.get("devE")) .create(); // Dev C changes Foo master.commit().add("Foo.java", "1\n2\n3\n4-master\n5\n6\n7\n8\n") .add("Bar.java", "1\n2\n3-master\n4-master\n").message("m2").author(devs.get("devC")).create(); // Dev B changes lastMasterCommit = master.commit().add("Bar.java", "1\n2\n3\n4-master\n").message("m3") .author(devs.get("devB")).create(); // updating the tree with the changes db_t.getRevWalk().parseCommit(mergeBaseCommit); // creating a new branc: side BranchBuilder side = db_t.branch("side"); // Dev D changes Foo side.commit().parent(mergeBaseCommit).add("Foo.java", "1\n2\n3\n4-side\n5\n6\n7\n8\n").message("s1") .author(devs.get("devD")).create(); // Dev E changes Bar side.commit().add("Bar.java", "1\n2\n3\n4\n5\n").message("s2").author(devs.get("devE")).create(); // Dev A changes Bar lastSideCommit = side.commit().add("Bar.java", "1\n2\n3-side\n4-side\n5\n").message("s3") .author(devs.get("devA")).create(); git.checkout().setName("master").setStartPoint(lastMasterCommit).call(); return new MergeScenario(null, mergeBaseCommit, lastMasterCommit, lastSideCommit, null, null); }
From source file:br.com.riselabs.cotonet.test.helpers.ConflictBasedRepositoryTestCase.java
License:Open Source License
/** * Merges the scenario created by/* w ww . j a v a 2 s. c o m*/ * {@code #setCollaborationScenarioInBareRepository()} or * {@code #setCollaborationScenarioInTempRepository()} . * * @throws Exception */ public void setResolvedMergeConflictScenario() throws Exception { MergeScenario ms = setCollaborationScenarioInTempRepository(); Git git = Git.wrap(db); checkoutBranch("refs/heads/master"); // Dev Y changes Bar git.merge().include(ms.getRight()).call(); writeTrashFile("Bar.java", "1\n2\n3-merged\n4-merged\n5\n"); writeTrashFile("Foo.java", "1\n2\n3\n4-merged\n5\n6\n7\n8\n"); git.add().addFilepattern("Bar.java").addFilepattern("Foo.java").call(); git.commit().setMessage("merge s3 into m3").setAuthor(devs.get("devY")).call(); }
From source file:br.com.riselabs.cotonet.test.helpers.RepositoryTestCaseTest.java
License:Open Source License
@Before public void setup() { git = Git.wrap(db); }
From source file:com.cloudcontrolled.cctrl.maven.plugin.push.CloudcontrolledPush.java
License:Apache License
private String push(String remoteLocation) throws MojoExecutionException { Repository repository = null;//from w w w .j ava 2s .com Git git; try { repository = getRepository(); git = Git.wrap(repository); PushCommand pushCommand = git.push(); pushCommand.setRemote(remoteLocation); pushCommand.setRefSpecs(new RefSpec(repository.getFullBranch())); Iterable<PushResult> pushResult = pushCommand.call(); Iterator<PushResult> result = pushResult.iterator(); StringBuffer buffer = new StringBuffer(); if (result.hasNext()) { while (result.hasNext()) { String line = result.next().getMessages(); if (!line.isEmpty()) { buffer.append(line); if (result.hasNext()) { buffer.append(System.getProperty("line.separator")); } } } } return buffer.toString(); } catch (Exception e) { throw new MojoExecutionException(e.getClass().getSimpleName(), e); } finally { if (repository != null) { repository.close(); } } }