forked from git-tfs/git-tfs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RemoteConfigConverter.cs
70 lines (65 loc) · 2.91 KB
/
RemoteConfigConverter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Collections.Generic;
using System.Linq;
using LibGit2Sharp;
namespace Sep.Git.Tfs.Core
{
public class RemoteConfigConverter
{
public IEnumerable<RemoteInfo> Load(IEnumerable<ConfigurationEntry<string>> config)
{
var remotes = new Dictionary<string, RemoteInfo>();
foreach (var entry in config)
{
var keyParts = entry.Key.Split('.');
if (keyParts.Length >= 3 && keyParts[0] == "tfs-remote")
{
// The branch name may contain dots ("maint-1.0.0") which must be considered since split on "."
var id = string.Join(".", keyParts, 1, keyParts.Length - 2);
var key = keyParts.Last();
var remote = remotes.GetOrAdd(id);
remote.Id = id;
if (key == "url")
remote.Url = entry.Value;
else if (key == "repository")
remote.Repository = entry.Value;
else if (key == "username")
remote.Username = entry.Value;
else if (key == "password")
remote.Password = entry.Value;
else if (key == "ignore-paths")
remote.IgnoreRegex = entry.Value;
else if (key == "legacy-urls")
remote.Aliases = entry.Value.Split(',');
else if (key == "autotag")
remote.Autotag = bool.Parse(entry.Value);
}
}
return remotes.Values.Where(r => !string.IsNullOrWhiteSpace(r.Url));
}
public IEnumerable<KeyValuePair<string, string>> Dump(RemoteInfo remote)
{
if (!string.IsNullOrWhiteSpace(remote.Id))
{
var prefix = "tfs-remote." + remote.Id + ".";
yield return c(prefix + "url", remote.Url);
yield return c(prefix + "repository", remote.Repository);
yield return c(prefix + "username", remote.Username);
yield return c(prefix + "password", remote.Password);
yield return c(prefix + "ignore-paths", remote.IgnoreRegex);
yield return c(prefix + "legacy-urls", remote.Aliases == null ? null : string.Join(",", remote.Aliases));
yield return c(prefix + "autotag", remote.Autotag ? "true" : null);
}
}
private KeyValuePair<string, string> c(string key, string value)
{
return new KeyValuePair<string, string>(key, value);
}
public IEnumerable<KeyValuePair<string, string>> Delete(string remoteId)
{
if (string.IsNullOrWhiteSpace(remoteId))
return new List<KeyValuePair<string, string>>();
return Dump(new RemoteInfo {Id = remoteId});
}
}
}