8000 Add optional RespositoryOptions to Repository.Init call · ben/libgit2sharp@d1a5c57 · GitHub
[go: up one dir, main page]

Skip to content

Commit d1a5c57

Browse files
Saamannulltoken
authored andcommitted
Add optional RespositoryOptions to Repository.Init call
Partially fix libgit2#263
1 parent cb893b5 commit d1a5c57

File tree

4 files changed

+77
-44
lines changed

4 files changed

+77
-44
lines changed

LibGit2Sharp.Tests/ConfigurationFixture.cs

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.IO;
33
using System.Linq;
4-
using System.Text;
54
using LibGit2Sharp.Tests.TestHelpers;
65
using Xunit;
76

@@ -365,46 +364,5 @@ public void CanTellIfASpecificStoreContainsAKey()
365364
Assert.Null(repo.Config.Get<string>("MCHammer.You-cant-touch-this", ConfigurationLevel.System));
366365
}
367366
}
368-
369-
private RepositoryOptions BuildFakeConfigs(SelfCleaningDirectory scd)
370-
{
371-
var options = BuildFakeRepositoryOptions(scd);
372-
373-
StringBuilder sb = new StringBuilder()
374-
.AppendFormat("[Woot]{0}", Environment.NewLine)
375-
.AppendFormat("this-rocks = global{0}", Environment.NewLine)
376-
.AppendFormat("[Wow]{0}", Environment.NewLine)
377-
.AppendFormat("Man-I-am-totally-global = 42{0}", Environment.NewLine);
378-
File.WriteAllText(options.GlobalConfigurationLocation, sb.ToString());
379-
380-
sb = new StringBuilder()
381-
.AppendFormat("[Woot]{0}", Environment.NewLine)
382-
.AppendFormat("this-rocks = system{0}", Environment.NewLine);
383-
File.WriteAllText(options.SystemConfigurationLocation, sb.ToString());
384-
385-
sb = new StringBuilder()
386-
.AppendFormat("[Woot]{0}", Environment.NewLine)
387-
.AppendFormat("this-rocks = xdg{0}", Environment.NewLine);
388-
File.WriteAllText(options.XdgConfigurationLocation, sb.ToString());
389-
390-
return options;
391-
}
392-
393-
private RepositoryOptions BuildFakeRepositoryOptions(SelfCleaningDirectory scd)
394-
{
395-
string confs = Path.Combine(scd.DirectoryPath, "confs");
396-
Directory.CreateDirectory(confs);
397-
398-
string globalLocation = Path.Combine(confs, "my-global-config");
399-
string xdgLocation = Path.Combine(confs, "my-xdg-config");
400-
string systemLocation = Path.Combine(confs, "my-system-config");
401-
402-
return new RepositoryOptions
403-
{
404-
GlobalConfigurationLocation = globalLocation,
405-
XdgConfigurationLocation = xdgLocation,
406-
SystemConfigurationLocation = systemLocation,
407-
};
408-
}
409367
}
410368
}

LibGit2Sharp.Tests/RepositoryOptionsFixture.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,5 +179,37 @@ public void CanProvideDifferentConfigurationFilesToARepository()
179179

180180
AssertValueInConfigFile(systemLocation, "xpaulbettsx");
181181
}
182+
183+
[Fact]
184+
public void CanProvideDifferentWorkingDirOnInit()
185+
{
186+
SelfCleaningDirectory scd = BuildSelfCleaningDirectory();
187+
var options = new RepositoryOptions {WorkingDirectoryPath = newWorkdir};
188+
189+
using (var repo = Repository.Init(scd.DirectoryPath, false, options))
190+
{
191+
Assert.Equal(Path.GetFullPath(newWorkdir) + Path.DirectorySeparatorChar, repo.Info.WorkingDirectory);
192+
}
193+
}
194+
195+
[Fact]
196+
public void CanProvideDifferentConfigurationFilesOnInit()
197+
{
198+
SelfCleaningDirectory scd = BuildSelfCleaningDirectory();
199+
var options = BuildFakeConfigs(scd);
200+
201+
using (var repo = Repository.Init(scd.DirectoryPath, false, options))
202+
{
203+
Assert.True(repo.Config.HasConfig(ConfigurationLevel.Global));
204+
Assert.Equal("global", repo.Config.Get<string>("woot.this-rocks").Value);
205+
Assert.Equal(42, repo.Config.Get<int>("wow.man-I-am-totally-global").Value);
206+
207+
Assert.True(repo.Config.HasConfig(ConfigurationLevel.Xdg));
208+
Assert.Equal("xdg", repo.Config.Get<string>("woot.this-rocks", ConfigurationLevel.Xdg).Value);
209+
210+
Assert.True(repo.Config.HasConfig(ConfigurationLevel.System));
211+
Assert.Equal("system", repo.Config.Get<string>("woot.this-rocks", ConfigurationLevel.System).Value);
212+
}
213+
}
182214
}
183215
}

LibGit2Sharp.Tests/TestHelpers/BaseFixture.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.IO;
4+
using System.Text;
45
using System.Text.RegularExpressions;
56
using LibGit2Sharp.Core;
67
using Xunit;
@@ -110,5 +111,46 @@ protected static void AssertValueInConfigFile(string configFilePath, string rege
110111
var r = new Regex(regex, RegexOptions.Multiline).Match(text);
111112
Assert.True(r.Success, text);
112113
}
114+
115+
public RepositoryOptions BuildFakeConfigs(SelfCleaningDirectory scd)
116+
{
117+
var options = BuildFakeRepositoryOptions(scd);
118+
119+
StringBuilder sb = new StringBuilder()
120+
.AppendFormat("[Woot]{0}", Environment.NewLine)
121+
.AppendFormat("this-rocks = global{0}", Environment.NewLine)
122+
.AppendFormat("[Wow]{0}", Environment.NewLine)
123+
.AppendFormat("Man-I-am-totally-global = 42{0}", Environment.NewLine);
124+
File.WriteAllText(options.GlobalConfigurationLocation, sb.ToString());
125+
126+
sb = new StringBuilder()
127+
.AppendFormat("[Woot]{0}", Environment.NewLine)
128+
.AppendFormat("this-rocks = system{0}", Environment.NewLine);
129+
File.WriteAllText(options.SystemConfigurationLocation, sb.ToString());
130+
131+
sb = new StringBuilder()
132+
.AppendFormat("[Woot]{0}", Environment.NewLine)
133+
.AppendFormat("this-rocks = xdg{0}", Environment.NewLine);
134+
File.WriteAllText(options.XdgConfigurationLocation, sb.ToString());
135+
136+
return options;
137+
}
138+
139+
private static RepositoryOptions BuildFakeRepositoryOptions(SelfCleaningDirectory scd)
140+
{
141+
string confs = Path.Combine(scd.DirectoryPath, "confs");
142+
Directory.CreateDirectory(confs);
143+
144+
string globalLocation = Path.Combine(confs, "my-global-config");
145+
string xdgLocation = Path.Combine(confs, "my-xdg-config");
146+
string systemLocation = Path.Combine(confs, "my-system-config");
147+
148+
return new RepositoryOptions
149+
{
150+
GlobalConfigurationLocation = globalLocation,
151+
XdgConfigurationLocation = xdgLocation,
152+
SystemConfigurationLocation = systemLocation,
153+
};
154+
}
113155
}
114156
}

LibGit2Sharp/Repository.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,15 +265,16 @@ protected virtual void Dispose(bool disposing)
265265
/// </summary>
266266
/// <param name = "path">The path to the working folder when initializing a standard ".git" repository. Otherwise, when initializing a bare repository, the path to the expected location of this later.</param>
267267
/// <param name = "isBare">true to initialize a bare repository. False otherwise, to initialize a standard ".git" repository.</param>
268+
/// <param name="options">Overrides to the way a repository is opened.</param>
268269
/// <returns> a new instance of the <see cref = "Repository" /> class. The client code is responsible for calling <see cref = "Dispose()" /> on this instance.</returns>
269-
public static Repository Init(string path, bool isBare = false)
270+
public static Repository Init(string path, bool isBare = false, RepositoryOptions options = null)
270271
{
271272
Ensure.ArgumentNotNullOrEmptyString(path, "path");
272273

273274
using (RepositorySafeHandle repo = Proxy.git_repository_init(path, isBare))
274275
{
275276
FilePath repoPath = Proxy.git_repository_path(repo);
276-
return new Repository(repoPath.Native);
277+
return new Repository(repoPath.Native, options);
277278
}
278279
}
279280

0 commit comments

Comments
 (0)
0