Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

AlternatesTest.java 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*
  2. * Copyright (C) 2017, Matthias Sohn <matthias.sohn@sap.com> and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.internal.storage.file;
  11. import static org.eclipse.jgit.lib.Constants.INFO_ALTERNATES;
  12. import static org.junit.Assert.assertTrue;
  13. import java.io.File;
  14. import java.io.IOException;
  15. import java.nio.file.Path;
  16. import org.eclipse.jgit.api.Git;
  17. import org.eclipse.jgit.api.errors.AbortedByHookException;
  18. import org.eclipse.jgit.api.errors.ConcurrentRefUpdateException;
  19. import org.eclipse.jgit.api.errors.GitAPIException;
  20. import org.eclipse.jgit.api.errors.NoFilepatternException;
  21. import org.eclipse.jgit.api.errors.NoHeadException;
  22. import org.eclipse.jgit.api.errors.NoMessageException;
  23. import org.eclipse.jgit.api.errors.UnmergedPathsException;
  24. import org.eclipse.jgit.api.errors.WrongRepositoryStateException;
  25. import org.eclipse.jgit.junit.JGitTestUtil;
  26. import org.eclipse.jgit.lib.ObjectId;
  27. import org.eclipse.jgit.revwalk.RevCommit;
  28. import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase;
  29. import org.junit.Test;
  30. public class AlternatesTest extends SampleDataRepositoryTestCase {
  31. private FileRepository db2;
  32. @Override
  33. public void setUp() throws Exception {
  34. super.setUp();
  35. db2 = createWorkRepository();
  36. }
  37. private void setAlternate(FileRepository from, FileRepository to)
  38. throws IOException {
  39. File alt = new File(from.getObjectDatabase().getDirectory(),
  40. INFO_ALTERNATES);
  41. alt.getParentFile().mkdirs();
  42. File fromDir = from.getObjectDatabase().getDirectory();
  43. File toDir = to.getObjectDatabase().getDirectory();
  44. Path relative = fromDir.toPath().relativize(toDir.toPath());
  45. write(alt, relative.toString() + "\n");
  46. }
  47. @Test
  48. public void testAlternate() throws Exception {
  49. setAlternate(db2, db);
  50. RevCommit c = createCommit();
  51. assertCommit(c);
  52. assertAlternateObjects(db2);
  53. }
  54. @Test
  55. public void testAlternateCyclic2() throws Exception {
  56. setAlternate(db2, db);
  57. setAlternate(db, db2);
  58. RevCommit c = createCommit();
  59. assertCommit(c);
  60. assertAlternateObjects(db2);
  61. }
  62. @Test
  63. public void testAlternateCyclic3() throws Exception {
  64. FileRepository db3 = createBareRepository();
  65. setAlternate(db2, db3);
  66. setAlternate(db3, db);
  67. setAlternate(db, db2);
  68. RevCommit c = createCommit();
  69. assertCommit(c);
  70. assertAlternateObjects(db2);
  71. }
  72. private RevCommit createCommit() throws IOException, GitAPIException,
  73. NoFilepatternException, NoHeadException, NoMessageException,
  74. UnmergedPathsException, ConcurrentRefUpdateException,
  75. WrongRepositoryStateException, AbortedByHookException {
  76. JGitTestUtil.writeTrashFile(db, "test", "test");
  77. Git git = Git.wrap(db2);
  78. git.add().addFilepattern("test").call();
  79. RevCommit c = git.commit().setMessage("adding test").call();
  80. return c;
  81. }
  82. private void assertCommit(RevCommit c) {
  83. ObjectDirectory od = db2.getObjectDatabase();
  84. assertTrue("can't find expected commit" + c.name(),
  85. od.has(c.toObjectId()));
  86. }
  87. private void assertAlternateObjects(FileRepository repo) {
  88. // check some objects in alternate
  89. final ObjectId alternateObjects[] = new ObjectId[] {
  90. ObjectId.fromString("49322bb17d3acc9146f98c97d078513228bbf3c0"),
  91. ObjectId.fromString("d0114ab8ac326bab30e3a657a0397578c5a1af88"),
  92. ObjectId.fromString("f73b95671f326616d66b2afb3bdfcdbbce110b44"),
  93. ObjectId.fromString("6020a3b8d5d636e549ccbd0c53e2764684bb3125"),
  94. ObjectId.fromString("0a3d7772488b6b106fb62813c4d6d627918d9181"),
  95. ObjectId.fromString("da0f8ed91a8f2f0f067b3bdf26265d5ca48cf82c"),
  96. ObjectId.fromString(
  97. "cd4bcfc27da62c6b840de700be1c60a7e69952a5") };
  98. ObjectDirectory od = repo.getObjectDatabase();
  99. for (ObjectId o : alternateObjects) {
  100. assertTrue(String.format("can't find object %s in alternate",
  101. o.getName()), od.has(o));
  102. }
  103. }
  104. }