forked from git-tfs/git-tfs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
87 lines (81 loc) · 3.02 KB
/
Program.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using Sep.Git.Tfs.Core;
using Sep.Git.Tfs.Core.Changes.Git;
using Sep.Git.Tfs.Core.TfsInterop;
using Sep.Git.Tfs.Util;
using StructureMap;
using StructureMap.Graph;
namespace Sep.Git.Tfs
{
public class Program
{
public static void Main(string [] args)
{
try
{
//Trace.Listeners.Add(new ConsoleTraceListener());
var container = Initialize();
container.GetInstance<GitTfs>().Run(new List<string>(args));
}
catch(GitTfsException e)
{
Trace.WriteLine(e);
Console.WriteLine(e.Message);
if (!e.RecommendedSolutions.IsEmpty())
{
Console.WriteLine("You may be able to resolve this problem.");
foreach (var solution in e.RecommendedSolutions)
{
Console.WriteLine("- " + solution);
}
}
Environment.ExitCode = -1;
}
catch (Exception e)
{
Trace.WriteLine(e);
Console.WriteLine(e);
Environment.ExitCode = -1;
}
}
private static IContainer Initialize()
{
return new Container(Initialize);
}
private static void Initialize(ConfigurationExpression initializer)
{
var tfsPlugin = TfsPlugin.Find();
initializer.Scan(x => { Initialize(x); tfsPlugin.Initialize(x); });
initializer.ForRequestedType<TextWriter>().TheDefault.Is.ConstructedBy(() => Console.Out);
initializer.InstanceOf<IGitRepository>().Is.OfConcreteType<GitRepository>();
AddGitChangeTypes(initializer);
DoCustomConfiguration(initializer);
tfsPlugin.Initialize(initializer);
}
public static void AddGitChangeTypes(ConfigurationExpression initializer)
{
initializer.InstanceOf<IGitChangedFile>().Is.OfConcreteType<Add>().WithName("A");
initializer.InstanceOf<IGitChangedFile>().Is.OfConcreteType<Modify>().WithName("M");
initializer.InstanceOf<IGitChangedFile>().Is.OfConcreteType<Delete>().WithName("D");
initializer.InstanceOf<IGitChangedFile>().Is.OfConcreteType<RenameEdit>().WithName("R");
}
private static void Initialize(IAssemblyScanner scan)
{
scan.WithDefaultConventions();
scan.TheCallingAssembly();
}
private static void DoCustomConfiguration(ConfigurationExpression initializer)
{
foreach(var type in typeof(Program).Assembly.GetTypes())
{
foreach(ConfiguresStructureMap attribute in type.GetCustomAttributes(typeof(ConfiguresStructureMap), false))
{
attribute.Initialize(initializer, type);
}
}
}
}
}