/*
* 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.java.nio.fs.jgit;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.Repository;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.uberfire.java.nio.base.FileDiff;
import org.uberfire.java.nio.file.Path;
import org.uberfire.java.nio.fs.jgit.util.JGitUtil;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.uberfire.java.nio.fs.jgit.util.JGitUtil.commit;
import static org.uberfire.java.nio.fs.jgit.util.JGitUtil.createBranch;
public class JGitFileSystemProviderDiffTest extends AbstractTestInfra {
private Logger logger = LoggerFactory.getLogger(JGitFileSystemProviderDiffTest.class);
@Test
public void testDiffsBetweenBranches() throws IOException {
final File parentFolder = createTempDirectory();
final File gitSource = new File(parentFolder,
"repo.git");
final Git origin = JGitUtil.newRepository(gitSource,
true);
final Repository gitRepo = origin.getRepository();
commit(origin,
"master",
"name",
"name@example.com",
"master-1",
null,
null,
false,
new HashMap<String, File>() {{
put("file1.txt",
tempFile("temp1\ntemp1\ntemp3\nmiddle\nmoremiddle\nmoremiddle\nmoremiddle\nother\n"));
}});
createBranch(origin,
"master",
"develop");
commit(origin,
"develop",
"name",
"name@example.com",
"develop-1",
null,
null,
false,
new HashMap<String, File>() {{
put("file1.txt",
tempFile("temp1\ntemp2\nmiddle\nmoremiddle\nmoremiddle\nmoremiddle\n"));
}});
commit(origin,
"develop",
"name",
"name@example.com",
"develop-2",
null,
null,
false,
new HashMap<String, File>() {{
put("file3.txt",
tempFile("temp3"));
}});
commit(origin,
"develop",
"name",
"name@example.com",
"develop-3",
null,
null,
false,
new HashMap<String, File>() {{
put("file4.txt",
tempFile("temp4"));
}});
commit(origin,
"develop",
"name",
"name@example.com",
"develop-4",
null,
null,
false,
new HashMap<String, File>() {{
put("file5.txt",
tempFile("temp5"));
}});
final URI newRepo = URI.create("git://diff-repo");
final Map<String, Object> env = new HashMap<String, Object>() {{
put(JGitFileSystemProvider.GIT_ENV_KEY_DEFAULT_REMOTE_NAME,
origin.getRepository().getDirectory().toString());
}};
provider.newFileSystem(newRepo,
env);
final Path path = provider.getPath(newRepo);
final List<FileDiff> diffs = (List<FileDiff>) provider.readAttributes(path,
"diff:master,develop").get("diff");
diffs.forEach(elem -> logger.info(elem.toString()));
assertThat(diffs.size()).isEqualTo(5);
}
@Test
public void testBranchesDoNotHaveDifferences() throws IOException {
final File parentFolder = createTempDirectory();
final File gitSource = new File(parentFolder,
"repo.git");
final Git origin = JGitUtil.newRepository(gitSource,
true);
final Repository gitRepo = origin.getRepository();
commit(origin,
"master",
"name",
"name@example.com",
"master-1",
null,
null,
false,
new HashMap<String, File>() {{
put("file1.txt",
tempFile("temp1\ntemp1\ntemp3\nmiddle\nmoremiddle\nmoremiddle\nmoremiddle\nother\n"));
}});
commit(origin,
"master",
"name",
"name@example.com",
"develop-1",
null,
null,
false,
new HashMap<String, File>() {{
put("file1.txt",
tempFile("temp1\ntemp2\nmiddle\nmoremiddle\nmoremiddle\nmoremiddle\n"));
}});
createBranch(origin,
"master",
"develop");
final URI newRepo = URI.create("git://diff-repo");
final Map<String, Object> env = new HashMap<String, Object>() {{
put(JGitFileSystemProvider.GIT_ENV_KEY_DEFAULT_REMOTE_NAME,
origin.getRepository().getDirectory().toString());
}};
provider.newFileSystem(newRepo,
env);
final Path path = provider.getPath(newRepo);
final List<FileDiff> diffs = (List<FileDiff>) provider.readAttributes(path,
"diff:master,develop").get("diff");
diffs.forEach(elem -> logger.info(elem.toString()));
assertThat(diffs.size()).isEqualTo(0);
}
}