-
Notifications
You must be signed in to change notification settings - Fork 90
/
Copy pathCommandLineArgs.cs
158 lines (138 loc) · 4.26 KB
/
CommandLineArgs.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using System.Diagnostics.CodeAnalysis;
namespace Content.Packaging;
public sealed class CommandLineArgs
{
// PJB forgib me
/// <summary>
/// Generate client or server.
/// </summary>
public bool Client { get; set; }
/// <summary>
/// Should we also build the relevant project.
/// </summary>
public bool SkipBuild { get; set; }
/// <summary>
/// Should we wipe the release folder or ignore it.
/// </summary>
public bool WipeRelease { get; set; }
/// <summary>
/// Platforms for server packaging.
/// </summary>
public List<string>? Platforms { get; set; }
/// <summary>
/// Use HybridACZ for server packaging.
/// </summary>
public bool HybridAcz { get; set; }
/// <summary>
/// Configuration used for when packaging the server. (Release, Debug, Tools)
/// </summary>
public string Configuration { get; set; }
// CommandLineArgs, 3rd of her name.
public static bool TryParse(IReadOnlyList<string> args, [NotNullWhen(true)] out CommandLineArgs? parsed)
{
parsed = null;
bool? client = null;
var skipBuild = false;
var wipeRelease = true;
var hybridAcz = false;
var configuration = "Release";
List<string>? platforms = null;
using var enumerator = args.GetEnumerator();
var i = -1;
while (enumerator.MoveNext())
{
i++;
var arg = enumerator.Current;
if (i == 0)
{
if (arg == "client")
{
client = true;
}
else if (arg == "server")
{
client = false;
}
else
{
return false;
}
continue;
}
if (arg == "--skip-build")
{
skipBuild = true;
}
else if (arg == "--no-wipe-release")
{
wipeRelease = false;
}
else if (arg == "--hybrid-acz")
{
hybridAcz = true;
}
else if (arg == "--platform")
{
if (!enumerator.MoveNext())
{
Console.WriteLine("No platform provided");
return false;
}
platforms ??= new List<string>();
platforms.Add(enumerator.Current);
}
else if (arg == "--configuration")
{
if (!enumerator.MoveNext())
{
Console.WriteLine("No configuration provided");
return false;
}
configuration = enumerator.Current;
}
else if (arg == "--help")
{
PrintHelp();
return false;
}
else
{
Console.WriteLine("Unknown argument: {0}", arg);
}
}
if (client == null)
{
Console.WriteLine("Client / server packaging unspecified.");
return false;
}
parsed = new CommandLineArgs(client.Value, skipBuild, wipeRelease, hybridAcz, platforms, configuration);
return true;
}
private static void PrintHelp()
{
Console.WriteLine(@"
Usage: Content.Packaging [client/server] [options]
Options:
--skip-build Should we skip building the project and use what's already there.
--no-wipe-release Don't wipe the release folder before creating files.
--hybrid-acz Use HybridACZ for server builds.
--platform Platform for server builds. Default will output several x64 targets.
--configuration Configuration to use for building the server (Release, Debug, Tools). Default is Release.
");
}
private CommandLineArgs(
bool client,
bool skipBuild,
bool wipeRelease,
bool hybridAcz,
List<string>? platforms,
string configuration)
{
Client = client;
SkipBuild = skipBuild;
WipeRelease = wipeRelease;
HybridAcz = hybridAcz;
Platforms = platforms;
Configuration = configuration;
}
}