Skip to content

Commit c3725d8

Browse files
authored
Merge pull request #29 from mazong1123/fix-28-nonstandard-layout
Added integration tests for non-standard layout.
2 parents 074c271 + 13c9762 commit c3725d8

File tree

3 files changed

+78
-8
lines changed

3 files changed

+78
-8
lines changed

src/Grabber.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ public void Clone()
5757
{
5858
// Non-standard repository layout.
5959
// The repository root is effectively trunk.
60-
arguments.AppendFormat("--trunk=\"{0}\"", _svnUrl);
60+
//
61+
// Note: There's a bug of git svn init so that we cannot assign the svn url to --trunk.
62+
// We assign "/" to --trunk to tell git svn init we're using root as trunk.
63+
arguments.Append("--trunk=\"/\" ");
6164
}
6265
else
6366
{
@@ -96,10 +99,10 @@ public void Clone()
9699
arguments.AppendFormat("--branches=\"{0}\" ", b);
97100
}
98101
}
99-
100-
arguments.Append(_svnUrl);
101102
}
102103

104+
arguments.Append(_svnUrl);
105+
103106
Log($"Running command: git {arguments.ToString()}");
104107
if (_commandRunner.RunGitSvnInteractiveCommand(arguments.ToString(), _options.Password) != 0)
105108
{

tests/integrationtests/End2EndTest.cs

+68-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ namespace Svn2GitNet.Tests
1313
public class End2EndTest
1414
{
1515
private const string PUBLIC_CLASSIC_LAYOUT_REPOSITORY_URL = "https://svn.code.sf.net/p/svn2gitnetclassicstructure/code";
16+
private const string PUBLIC_NON_STANDARD_LAYOUT_REPOSITORY_URL = "https://svn.code.sf.net/p/svn2gitnetnonstandard/code";
17+
private const string PUBLIC_NON_STANDARD_LAYOUT_NO_BRANCH_NO_TAG_REPOSITORY_URL = "https://svn.code.sf.net/p/svn2gitnetnonstandardsole/code";
1618

1719
[Fact]
1820
public void PrivateRepositoryEnd2EndTest()
@@ -50,7 +52,7 @@ public void PublicClassicLayoutRepositoryEnd2EndBranchTest()
5052
{
5153
string subWorkingFolder = "PublicRepoBranchTest";
5254
string expectedBranchInfo = " dev dev@1* master";
53-
int exitCode = RunCommand(BuildSvn2GitNetProcessStartInfo($"{PUBLIC_CLASSIC_LAYOUT_REPOSITORY_URL} -v", "PublicRepoBranchTest"));
55+
int exitCode = RunCommand(BuildSvn2GitNetProcessStartInfo($"{PUBLIC_CLASSIC_LAYOUT_REPOSITORY_URL} -v", subWorkingFolder));
5456

5557
Assert.Equal(0, exitCode);
5658

@@ -83,6 +85,71 @@ public void PublicClassicLayoutRepositoryEnd2EndTagTest()
8385
Assert.Equal(expectedTagInfo, actualTagInfo);
8486
}
8587

88+
[Fact]
89+
public void PublicNonstandardLayoutRepositoryEnd2EndSmokeTest()
90+
{
91+
int exitCode = RunCommand(BuildSvn2GitNetProcessStartInfo($"{PUBLIC_NON_STANDARD_LAYOUT_REPOSITORY_URL} --rootistrunk -v", "PublicNonStandardRepoSmokeTest"));
92+
93+
Assert.Equal(0, exitCode);
94+
}
95+
96+
[Fact]
97+
public void PublicNonstandardLayoutRepositoryEnd2EndNoBranchNoTagTest()
98+
{
99+
string subWorkingFolder = "PublicNonStandardRepoNoBranchNoTagTest";
100+
string expectedBranchInfo = "* master";
101+
int exitCode = RunCommand(BuildSvn2GitNetProcessStartInfo($"{PUBLIC_NON_STANDARD_LAYOUT_NO_BRANCH_NO_TAG_REPOSITORY_URL} --rootistrunk -v", subWorkingFolder));
102+
103+
Assert.Equal(0, exitCode);
104+
105+
ICommandRunner commandRunner = new CommandRunner();
106+
107+
string actualBranchInfo = string.Empty;
108+
string dummyError = string.Empty;
109+
commandRunner.Run("git", "branch", out actualBranchInfo, out dummyError, Path.Combine(GetIntegrationTestsTempFolderPath(), subWorkingFolder));
110+
111+
Assert.Equal(0, exitCode);
112+
Assert.Equal(expectedBranchInfo, actualBranchInfo);
113+
}
114+
115+
[Fact]
116+
public void PublicNonstandardLayoutRepositoryEnd2EndBranchTest()
117+
{
118+
string subWorkingFolder = "PublicNonStandardRepoBranchTest";
119+
string expectedBranchInfo = " 1.0.0 1.0.0@1 1.0.0@3 br1 br1@17 br1@3* master";
120+
int exitCode = RunCommand(BuildSvn2GitNetProcessStartInfo($"{PUBLIC_NON_STANDARD_LAYOUT_REPOSITORY_URL} --trunk main --branches dev --tags rel -v", subWorkingFolder));
121+
122+
Assert.Equal(0, exitCode);
123+
124+
ICommandRunner commandRunner = new CommandRunner();
125+
126+
string actualBranchInfo = string.Empty;
127+
string dummyError = string.Empty;
128+
commandRunner.Run("git", "branch", out actualBranchInfo, out dummyError, Path.Combine(GetIntegrationTestsTempFolderPath(), subWorkingFolder));
129+
130+
Assert.Equal(0, exitCode);
131+
Assert.Equal(expectedBranchInfo, actualBranchInfo);
132+
}
133+
134+
[Fact]
135+
public void PublicNonstandardLayoutRepositoryEnd2EndTagTest()
136+
{
137+
string subWorkingFolder = "PublicNonStandardRepoTagTest";
138+
string expectedBranchInfo = "1.0.01.0.0@3";
139+
int exitCode = RunCommand(BuildSvn2GitNetProcessStartInfo($"{PUBLIC_NON_STANDARD_LAYOUT_REPOSITORY_URL} --trunk main --branches dev --tags rel -v", subWorkingFolder));
140+
141+
Assert.Equal(0, exitCode);
142+
143+
ICommandRunner commandRunner = new CommandRunner();
144+
145+
string actualBranchInfo = string.Empty;
146+
string dummyError = string.Empty;
147+
commandRunner.Run("git", "tag", out actualBranchInfo, out dummyError, Path.Combine(GetIntegrationTestsTempFolderPath(), subWorkingFolder));
148+
149+
Assert.Equal(0, exitCode);
150+
Assert.Equal(expectedBranchInfo, actualBranchInfo);
151+
}
152+
86153
private ProcessStartInfo BuildSvn2GitNetProcessStartInfo(string arguments, string subWorkingFolder = "")
87154
{
88155
string platformSepcifier = GetPlatformSpecifier();

tests/unittests/GrabberTest.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ public void CloneWhenRootIsTrunkWithAllParametersTest()
326326
RootIsTrunk = true
327327
};
328328

329-
string expectedArguments = $"svn init --prefix=svn/ --username=\"userName\" --no-metadata --no-minimize-url --trunk=\"{_testSvnUrl}\"";
329+
string expectedArguments = $"svn init --prefix=svn/ --username=\"userName\" --no-metadata --no-minimize-url --trunk=\"/\" {_testSvnUrl}";
330330

331331
mock.Setup(f => f.Run("git", It.IsAny<string>())).Returns(0);
332332

@@ -354,7 +354,7 @@ public void CloneWhenRootIsTrunkWithoutUserNameAndPasswordTest()
354354
RootIsTrunk = true
355355
};
356356

357-
string expectedArguments = $"svn init --prefix=svn/ --no-metadata --no-minimize-url --trunk=\"{_testSvnUrl}\"";
357+
string expectedArguments = $"svn init --prefix=svn/ --no-metadata --no-minimize-url --trunk=\"/\" {_testSvnUrl}";
358358

359359
mock.Setup(f => f.Run("git", It.IsAny<string>())).Returns(0);
360360

@@ -382,7 +382,7 @@ public void CloneWhenRootIsTrunkHasMetaDataTest()
382382
RootIsTrunk = true
383383
};
384384

385-
string expectedArguments = $"svn init --prefix=svn/ --no-minimize-url --trunk=\"{_testSvnUrl}\"";
385+
string expectedArguments = $"svn init --prefix=svn/ --no-minimize-url --trunk=\"/\" {_testSvnUrl}";
386386

387387
mock.Setup(f => f.Run("git", It.IsAny<string>())).Returns(0);
388388

@@ -410,7 +410,7 @@ public void CloneWhenRootIsTrunkHasMinimizeUrlTest()
410410
RootIsTrunk = true
411411
};
412412

413-
string expectedArguments = $"svn init --prefix=svn/ --no-minimize-url --trunk=\"{_testSvnUrl}\"";
413+
string expectedArguments = $"svn init --prefix=svn/ --no-minimize-url --trunk=\"/\" {_testSvnUrl}";
414414

415415
mock.Setup(f => f.Run("git", It.IsAny<string>())).Returns(0);
416416

0 commit comments

Comments
 (0)