| /* | |
| * Copyright (C) 2014 Google Inc. and others | |
| * | |
| * This program and the accompanying materials are made available under the | |
| * terms of the Eclipse Distribution License v. 1.0 which is available at | |
| * https://www.eclipse.org/org/documents/edl-v10.php. | |
| * | |
| * SPDX-License-Identifier: BSD-3-Clause | |
| */ | |
| package org.eclipse.jgit.pgm; | |
| import static org.junit.Assert.assertFalse; | |
| import static org.junit.Assert.assertTrue; | |
| import static org.junit.Assert.fail; | |
| import java.io.File; | |
| import java.util.Arrays; | |
| import org.eclipse.jgit.api.Git; | |
| import org.eclipse.jgit.junit.JGitTestUtil; | |
| import org.eclipse.jgit.lib.CLIRepositoryTestCase; | |
| import org.eclipse.jgit.lib.Repository; | |
| import org.junit.Before; | |
| import org.junit.Test; | |
| public class RepoTest extends CLIRepositoryTestCase { | |
| private Repository defaultDb; | |
| private Repository notDefaultDb; | |
| private Repository groupADb; | |
| private Repository groupBDb; | |
| private String rootUri; | |
| private String defaultUri; | |
| private String notDefaultUri; | |
| private String groupAUri; | |
| private String groupBUri; | |
| @Override | |
| @Before | |
| public void setUp() throws Exception { | |
| super.setUp(); | |
| defaultDb = createWorkRepository(); | |
| try (Git git = new Git(defaultDb)) { | |
| JGitTestUtil.writeTrashFile(defaultDb, "hello.txt", "world"); | |
| git.add().addFilepattern("hello.txt").call(); | |
| git.commit().setMessage("Initial commit").call(); | |
| } | |
| notDefaultDb = createWorkRepository(); | |
| try (Git git = new Git(notDefaultDb)) { | |
| JGitTestUtil.writeTrashFile(notDefaultDb, "world.txt", "hello"); | |
| git.add().addFilepattern("world.txt").call(); | |
| git.commit().setMessage("Initial commit").call(); | |
| } | |
| groupADb = createWorkRepository(); | |
| try (Git git = new Git(groupADb)) { | |
| JGitTestUtil.writeTrashFile(groupADb, "a.txt", "world"); | |
| git.add().addFilepattern("a.txt").call(); | |
| git.commit().setMessage("Initial commit").call(); | |
| } | |
| groupBDb = createWorkRepository(); | |
| try (Git git = new Git(groupBDb)) { | |
| JGitTestUtil.writeTrashFile(groupBDb, "b.txt", "world"); | |
| git.add().addFilepattern("b.txt").call(); | |
| git.commit().setMessage("Initial commit").call(); | |
| } | |
| resolveRelativeUris(); | |
| } | |
| @Test | |
| public void testMissingPath() throws Exception { | |
| try { | |
| execute("git repo"); | |
| fail("Must die"); | |
| } catch (Die e) { | |
| // expected, requires argument | |
| } | |
| } | |
| /** | |
| * See bug 484951: "git repo -h" should not print unexpected values | |
| * | |
| * @throws Exception | |
| */ | |
| @Test | |
| public void testZombieHelpArgument() throws Exception { | |
| String[] output = execute("git repo -h"); | |
| String all = Arrays.toString(output); | |
| assertTrue("Unexpected help output: " + all, | |
| all.contains("jgit repo")); | |
| assertFalse("Unexpected help output: " + all, | |
| all.contains("jgit repo VAL")); | |
| } | |
| @Test | |
| public void testAddRepoManifest() throws Exception { | |
| StringBuilder xmlContent = new StringBuilder(); | |
| xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n") | |
| .append("<manifest>") | |
| .append("<remote name=\"remote1\" fetch=\".\" />") | |
| .append("<default revision=\"master\" remote=\"remote1\" />") | |
| .append("<project path=\"foo\" name=\"") | |
| .append(defaultUri) | |
| .append("\" groups=\"a,test\" />") | |
| .append("<project path=\"bar\" name=\"") | |
| .append(notDefaultUri) | |
| .append("\" groups=\"notdefault\" />") | |
| .append("<project path=\"a\" name=\"") | |
| .append(groupAUri) | |
| .append("\" groups=\"a\" />") | |
| .append("<project path=\"b\" name=\"") | |
| .append(groupBUri) | |
| .append("\" groups=\"b\" />") | |
| .append("</manifest>"); | |
| writeTrashFile("manifest.xml", xmlContent.toString()); | |
| StringBuilder cmd = new StringBuilder("git repo --base-uri=\"") | |
| .append(rootUri) | |
| .append("\" --groups=\"all,-a\" \"") | |
| .append(db.getWorkTree().getAbsolutePath()) | |
| .append("/manifest.xml\""); | |
| execute(cmd.toString()); | |
| File file = new File(db.getWorkTree(), "foo/hello.txt"); | |
| assertFalse("\"all,-a\" doesn't have foo", file.exists()); | |
| file = new File(db.getWorkTree(), "bar/world.txt"); | |
| assertTrue("\"all,-a\" has bar", file.exists()); | |
| file = new File(db.getWorkTree(), "a/a.txt"); | |
| assertFalse("\"all,-a\" doesn't have a", file.exists()); | |
| file = new File(db.getWorkTree(), "b/b.txt"); | |
| assertTrue("\"all,-a\" has have b", file.exists()); | |
| } | |
| private void resolveRelativeUris() { | |
| // Find the longest common prefix ends with "/" as rootUri. | |
| defaultUri = defaultDb.getDirectory().toURI().toString(); | |
| notDefaultUri = notDefaultDb.getDirectory().toURI().toString(); | |
| groupAUri = groupADb.getDirectory().toURI().toString(); | |
| groupBUri = groupBDb.getDirectory().toURI().toString(); | |
| int start = 0; | |
| while (start <= defaultUri.length()) { | |
| int newStart = defaultUri.indexOf('/', start + 1); | |
| String prefix = defaultUri.substring(0, newStart); | |
| if (!notDefaultUri.startsWith(prefix) || | |
| !groupAUri.startsWith(prefix) || | |
| !groupBUri.startsWith(prefix)) { | |
| start++; | |
| rootUri = defaultUri.substring(0, start) + "manifest"; | |
| defaultUri = defaultUri.substring(start); | |
| notDefaultUri = notDefaultUri.substring(start); | |
| groupAUri = groupAUri.substring(start); | |
| groupBUri = groupBUri.substring(start); | |
| return; | |
| } | |
| start = newStart; | |
| } | |
| } | |
| } |