12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- use fmt;
- use errors;
- use os;
- use fs;
- use a::logger;
- export def MKDIR_MODE: fs::mode = 0
- | fs::mode::USER_RWX
- | fs::mode::GROUP_RX
- | fs::mode::OTHER_RX
- | 0;
- export fn get_archive(action: Action) str =
- match (action) {
- case let l: ActionList => return l.archive;
- case let x: ActionExtract => return x.archive;
- case let c: ActionCreate => return c.archive;
- case let a: ActionListArchives => abort("ActionListArchives does not have archive field");
- };
- export fn fatal(cfg: *const Config, fmt: str, args: fmt::field...) never = {
- match (cfg.logger) {
- case let l: logger::Logger => logger::error(l, fmt, args...);
- case => void;
- };
- os::exit(os::status::FAILURE);
- };
- export fn create_out_dir(cfg: *const Config) void = {
- let access: bool =
- match (os::access(cfg.out_dir, os::amode::F_OK)) {
- case let a: bool => yield a;
- case let e: fs::error =>
- yield match (e) {
- case errors::noentry => yield false;
- case =>
- fatal(cfg, "failed to check access for '{}': {}", cfg.out_dir, fs::strerror(e));
- };
- };
- if (!access)
- match (os::mkdirs(cfg.out_dir, MKDIR_MODE)) {
- case let e: fs::error =>
- fatal(cfg, "failed to create directory '{}': {}", cfg.out_dir, fs::strerror(e));
- case void => void;
- };
- };
|