1 /* 2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 package org.openjdk.skara.vcs.openjdk.converter; 24 25 import org.openjdk.skara.test.TemporaryDirectory; 26 import org.openjdk.skara.vcs.*; 27 import org.openjdk.skara.vcs.openjdk.convert.HgToGitConverter; 28 29 import org.junit.jupiter.api.Test; 30 31 import java.io.IOException; 32 import java.nio.file.Files; 33 import java.util.*; 34 35 import static org.junit.jupiter.api.Assertions.assertEquals; 36 37 class HgToGitConverterTests { 38 @Test 39 void convertOneCommit() throws IOException { 40 try (var hgRoot = new TemporaryDirectory(); 41 var gitRoot = new TemporaryDirectory()) { 42 var hgRepo = Repository.init(hgRoot.path(), VCS.HG); 43 var readme = hgRoot.path().resolve("README.md"); 44 45 Files.writeString(readme, "Hello, world"); 46 hgRepo.add(readme); 47 hgRepo.commit("1234567: Added README", "foo", "foo@localhost"); 48 49 var gitRepo = Repository.init(gitRoot.path(), VCS.GIT); 50 51 var converter = new HgToGitConverter(Map.of(), Map.of(), Set.of(), Set.of(), 52 Map.of("foo", "Foo Bar <foo@openjdk.java.net>"), Map.of(), Map.of()); 53 var marks = converter.convert(hgRepo, gitRepo); 54 assertEquals(1, marks.size()); 55 56 var gitCommits = gitRepo.commits().asList(); 57 assertEquals(1, gitCommits.size()); 58 var gitCommit = gitCommits.get(0); 59 60 var hgCommits = hgRepo.commits().asList(); 61 assertEquals(1, hgCommits.size()); 62 var hgCommit = hgCommits.get(0); 63 64 assertEquals(gitCommit.author(), new Author("Foo Bar", "foo@openjdk.java.net")); 65 assertEquals(gitCommit.committer(), new Author("Foo Bar", "foo@openjdk.java.net")); 66 assertEquals(hgCommit.message(), gitCommit.message()); 67 assertEquals(hgCommit.date(), gitCommit.date()); 68 assertEquals(hgCommit.isInitialCommit(), gitCommit.isInitialCommit()); 69 assertEquals(hgCommit.isMerge(), gitCommit.isMerge()); 70 assertEquals(hgCommit.numParents(), gitCommit.numParents()); 71 72 var hgDiffs = hgCommit.parentDiffs(); 73 assertEquals(1, hgDiffs.size()); 74 var hgDiff = hgDiffs.get(0); 75 76 var gitDiffs = gitCommit.parentDiffs(); 77 assertEquals(1, gitDiffs.size()); 78 var gitDiff = gitDiffs.get(0); 79 80 var hgPatches = hgDiff.patches(); 81 assertEquals(1, hgPatches.size()); 82 var hgPatch = hgPatches.get(0).asTextualPatch(); 83 84 var gitPatches = gitDiff.patches(); 85 assertEquals(1, gitPatches.size()); 86 var gitPatch = gitPatches.get(0).asTextualPatch(); 87 assertEquals(hgPatch.stats(), gitPatch.stats()); 88 89 assertEquals(hgPatch.source().path(), gitPatch.source().path()); 90 assertEquals(hgPatch.source().type(), gitPatch.source().type()); 91 92 assertEquals(hgPatch.target().path(), gitPatch.target().path()); 93 assertEquals(hgPatch.target().type(), gitPatch.target().type()); 94 95 assertEquals(hgPatch.status(), gitPatch.status()); 96 97 var hgHunks = hgPatch.hunks(); 98 assertEquals(1, hgHunks.size()); 99 var hgHunk = hgHunks.get(0); 100 101 var gitHunks = gitPatch.hunks(); 102 assertEquals(1, gitHunks.size()); 103 var gitHunk = gitHunks.get(0); 104 105 assertEquals(hgHunk.source().range(), gitHunk.source().range()); 106 assertEquals(hgHunk.source().lines(), gitHunk.source().lines()); 107 108 assertEquals(hgHunk.target().range(), gitHunk.target().range()); 109 assertEquals(hgHunk.target().lines(), gitHunk.target().lines()); 110 111 assertEquals(hgHunk.added(), gitHunk.added()); 112 assertEquals(hgHunk.removed(), gitHunk.removed()); 113 assertEquals(hgHunk.modified(), gitHunk.modified()); 114 } 115 } 116 117 @Test 118 void convertOneSponsoredCommit() throws IOException { 119 try (var hgRoot = new TemporaryDirectory(); 120 var gitRoot = new TemporaryDirectory()) { 121 var hgRepo = Repository.init(hgRoot.path(), VCS.HG); 122 var readme = hgRoot.path().resolve("README.md"); 123 124 Files.writeString(readme, "Hello, world"); 125 hgRepo.add(readme); 126 var message = List.of("1234567: Added README", "Contributed-by: baz@domain.org"); 127 hgRepo.commit(String.join("\n", message), "foo", "foo@host.com"); 128 129 var gitRepo = Repository.init(gitRoot.path(), VCS.GIT); 130 131 var converter = new HgToGitConverter(Map.of(), Map.of(), Set.of(), Set.of(), 132 Map.of("foo", "Foo Bar <foo@openjdk.java.net>"), 133 Map.of("baz@domain.org", "Baz Bar <baz@domain.org>"), 134 Map.of("foo", List.of("foo@host.com"))); 135 var marks = converter.convert(hgRepo, gitRepo); 136 assertEquals(1, marks.size()); 137 138 var gitCommits = gitRepo.commits().asList(); 139 assertEquals(1, gitCommits.size()); 140 var gitCommit = gitCommits.get(0); 141 142 var hgCommits = hgRepo.commits().asList(); 143 assertEquals(1, hgCommits.size()); 144 var hgCommit = hgCommits.get(0); 145 146 assertEquals(new Author("Baz Bar", "baz@domain.org"), gitCommit.author()); 147 assertEquals(new Author("Foo Bar", "foo@openjdk.java.net"), gitCommit.committer()); 148 assertEquals(List.of("1234567: Added README"), gitCommit.message()); 149 } 150 } 151 152 @Test 153 void convertOneCoAuthoredCommit() throws IOException { 154 try (var hgRoot = new TemporaryDirectory(); 155 var gitRoot = new TemporaryDirectory()) { 156 var hgRepo = Repository.init(hgRoot.path(), VCS.HG); 157 var readme = hgRoot.path().resolve("README.md"); 158 159 Files.writeString(readme, "Hello, world"); 160 hgRepo.add(readme); 161 var message = List.of("1234567: Added README", "Contributed-by: baz@domain.org, foo@host.com"); 162 hgRepo.commit(String.join("\n", message), "foo", "foo@host.com"); 163 164 var gitRepo = Repository.init(gitRoot.path(), VCS.GIT); 165 166 var converter = new HgToGitConverter(Map.of(), Map.of(), Set.of(), Set.of(), 167 Map.of("foo", "Foo Bar <foo@openjdk.java.net>"), 168 Map.of("baz@domain.org", "Baz Bar <baz@domain.org>", 169 "foo@host.com", "Foo Bar <foo@host.com>"), 170 Map.of("foo", List.of("foo@host.com"))); 171 var marks = converter.convert(hgRepo, gitRepo); 172 assertEquals(1, marks.size()); 173 174 var gitCommits = gitRepo.commits().asList(); 175 assertEquals(1, gitCommits.size()); 176 var gitCommit = gitCommits.get(0); 177 178 var hgCommits = hgRepo.commits().asList(); 179 assertEquals(1, hgCommits.size()); 180 var hgCommit = hgCommits.get(0); 181 182 assertEquals(new Author("Foo Bar", "foo@openjdk.java.net"), gitCommit.author()); 183 assertEquals(new Author("Foo Bar", "foo@openjdk.java.net"), gitCommit.committer()); 184 assertEquals(List.of("1234567: Added README", "", "Co-authored-by: Baz Bar <baz@domain.org>"), 185 gitCommit.message()); 186 } 187 } 188 189 @Test 190 void convertCommitWithSummary() throws IOException { 191 try (var hgRoot = new TemporaryDirectory(); 192 var gitRoot = new TemporaryDirectory()) { 193 var hgRepo = Repository.init(hgRoot.path(), VCS.HG); 194 var readme = hgRoot.path().resolve("README.md"); 195 196 Files.writeString(readme, "Hello, world"); 197 hgRepo.add(readme); 198 var message = List.of("1234567: Added README", "Summary: additional text", "Contributed-by: baz@domain.org, foo@host.com"); 199 hgRepo.commit(String.join("\n", message), "foo", "foo@host.com"); 200 201 var gitRepo = Repository.init(gitRoot.path(), VCS.GIT); 202 203 var converter = new HgToGitConverter(Map.of(), Map.of(), Set.of(), Set.of(), 204 Map.of("foo", "Foo Bar <foo@openjdk.java.net>"), 205 Map.of("baz@domain.org", "Baz Bar <baz@domain.org>", 206 "foo@host.com", "Foo Bar <foo@host.com>"), 207 Map.of("foo", List.of("foo@host.com"))); 208 var marks = converter.convert(hgRepo, gitRepo); 209 assertEquals(1, marks.size()); 210 211 var gitCommits = gitRepo.commits().asList(); 212 assertEquals(1, gitCommits.size()); 213 var gitCommit = gitCommits.get(0); 214 215 var hgCommits = hgRepo.commits().asList(); 216 assertEquals(1, hgCommits.size()); 217 var hgCommit = hgCommits.get(0); 218 219 assertEquals(new Author("Foo Bar", "foo@openjdk.java.net"), gitCommit.author()); 220 assertEquals(new Author("Foo Bar", "foo@openjdk.java.net"), gitCommit.committer()); 221 assertEquals(List.of("1234567: Added README", "", "Additional text", "", "Co-authored-by: Baz Bar <baz@domain.org>"), 222 gitCommit.message()); 223 } 224 } 225 }