123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- /*
- * 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;
- }
- }
- }
|