-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.d
77 lines (70 loc) · 2.21 KB
/
cli.d
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
// cli.d
//
// Copyright Peter Williams 2013 <pwil3058@bigpond.net.au>.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
module cli;
import std.stdio;
import std.file;
import std.getopt;
import std.regex;
import std.path;
bool verbose;
bool force;
string module_name;
string input_file_path;
string output_file_path;
string state_file_path;
string prefix_path;
uint expected_number_of_conflicts;
bool process_command_line(string[] args)
{
getopt(args,
"f|force", &force,
"m|module", &module_name,
"v|verbose", &verbose,
"o|output", &output_file_path,
"p|prefix", &prefix_path,
"e|expect", &expected_number_of_conflicts,
"s|states", &state_file_path,
);
if (args.length != 2) {
print_usage(args[0]);
return false;
}
input_file_path = args[1];
// if the output file path isn't specified then generate it
if (output_file_path.length == 0) {
if (module_name.length > 0) {
output_file_path = module_file_path(module_name, prefix_path);
if (!isValidPath(output_file_path)) {
stderr.writefln("%s: is not a valid file path", output_file_path);
return false;
}
} else {
output_file_path = stripExtension(input_file_path) ~ ".d";
}
}
// Don't overwrite existing files without specific authorization
if (!force && exists(output_file_path)) {
stderr.writefln("%s: already exists: use --force (or -f) to overwrite", output_file_path);
return false;
}
return true;
}
void print_usage(string command)
{
writefln("Usage: %s [--force|-f] [--verbose|-v] [(--module|-m)=<module name>] [(--expect|-e)=<number>] [(--output|-0)=<output file name>] <input file>", command);
}
string module_file_path(string module_name, string prefix_path)
{
static auto split_re = regex(r"\.");
string[] parts;
if (prefix_path.length == 0) {
return buildPath(split(module_name, split_re)) ~ ".d";
} else {
return buildNormalizedPath([prefix_path] ~ split(module_name, split_re)) ~ ".d";
}
}