-
Notifications
You must be signed in to change notification settings - Fork 120
Expand file tree
/
Copy pathmain.das
More file actions
141 lines (129 loc) · 4.98 KB
/
Copy pathmain.das
File metadata and controls
141 lines (129 loc) · 4.98 KB
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
options gen2
options indenting = 4
options persistent_heap
options no_global_variables = false
require daslib/fio
require daslib/clargs
require utils
require index
require commands
// daspkg — daslang package manager
// daspkg's help mixes a hand-written subcommand block (which clargs doesn't
// model) with the auto-generated flag table from clargs.
def print_usage() {
print("daspkg — daslang package manager\n\n")
print("Commands:\n")
print(" install <url|name|path>[@version] Install a package\n")
print(" remove <name> Remove a package\n")
print(" update [name] Re-install at pinned version\n")
print(" upgrade [name] Upgrade to latest version\n")
print(" list List installed packages\n")
print(" search [query] Search the package index\n")
print(" introduce [url] Add a package to the index via PR\n")
print(" withdraw <name> Remove a package from the index via PR\n")
print(" update-index Refresh all index metadata from repos\n")
print(" build Build C/C++ packages\n")
print(" check Verify installed packages\n")
print(" cleanup Remove modules/ and daspkg.lock for a fresh install\n")
print(" doctor Check environment (git, cmake, gh)\n")
print(" release [--out <dir>] [--tune-fast]\n")
print(" Bundle project as a redistributable standalone\n\n")
print(format_help_with_auto_help(get_command_info(type<DaspkgArgs>), "daspkg"))
}
[export]
def main() {
let argv <- get_user_args()
// Help / no-args path: print the full daspkg usage (subcommand block +
// clargs flags) and exit 0. Done manually rather than via
// parse_args_with_help so we can prepend the subcommand block.
if (empty(argv) || find_index(argv, "--help") != -1 || find_index(argv, "-h") != -1) {
print_usage()
return 0
}
var parse_r <- parse_args(type<DaspkgArgs>, argv)
if (parse_r |> is_err) {
to_log(LOG_ERROR, "daspkg: {parse_r |> unwrap_err}\n\n")
print_usage()
return 1
}
let parsed <- parse_r |> move_unwrap
apply_global_flags(parsed)
let command = parsed.command ?? ""
let command_arg = parsed.command_arg ?? ""
if (empty(command)) {
print_usage()
return 0
}
let root = get_full_file_name(parsed.root)
log_init(root)
let is_global = parsed.global_flag
var rc = 0
if (command == "list") {
rc = cmd_list(root, parsed.json, is_global)
} elif (command == "install") {
if (empty(command_arg)) {
rc = cmd_install_all(root, parsed.force, is_global)
} else {
rc = cmd_install(root, command_arg, parsed.force, is_global, "", parsed.branch)
}
} elif (command == "remove") {
if (empty(command_arg)) {
to_log(LOG_ERROR, "Error: remove requires a package name\n")
rc = 1
} else {
rc = cmd_remove(root, command_arg, is_global)
}
} elif (command == "update") {
if (empty(command_arg)) {
rc = cmd_update_all(root, is_global)
} else {
rc = cmd_update(root, command_arg, is_global)
}
} elif (command == "upgrade") {
if (empty(command_arg)) {
rc = cmd_upgrade_all(root, is_global)
} else {
rc = cmd_upgrade(root, command_arg, is_global)
}
} elif (command == "build") {
if (parsed.wasm) {
rc = cmd_build_wasm(root, parsed.wasm_lib_dir)
} else {
rc = cmd_build(root, is_global)
}
} elif (command == "check") {
rc = cmd_check(root, parsed.json, is_global)
} elif (command == "cleanup") {
rc = cmd_cleanup(root, parsed.force, is_global)
} elif (command == "release") {
if (command_arg == "wasm") {
rc = cmd_release_wasm(root, parsed.out, parsed.wasm_lib_dir)
} else {
rc = cmd_release(root, parsed.out, parsed.tune_fast)
}
} elif (command == "doctor") {
rc = cmd_doctor()
} elif (command == "search") {
if (empty(command_arg)) {
rc = cmd_search_all(root, parsed.json)
} else {
rc = cmd_search(root, command_arg, parsed.json)
}
} elif (command == "update-index") {
rc = cmd_update_index(root)
} elif (command == "introduce") {
rc = cmd_introduce(root, command_arg)
} elif (command == "withdraw") {
if (empty(command_arg)) {
to_log(LOG_ERROR, "Error: withdraw requires a package name\n")
rc = 1
} else {
rc = cmd_withdraw(root, command_arg)
}
} else {
to_log(LOG_ERROR, "Unknown command: {command}\n\n")
print_usage()
rc = 1
}
return rc
}