diff options
Diffstat (limited to 'org/default_paths.org')
-rw-r--r-- | org/default_paths.org | 498 |
1 files changed, 284 insertions, 214 deletions
diff --git a/org/default_paths.org b/org/default_paths.org index dfaf362..369e71b 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -79,10 +79,10 @@ template PodManifest() { #+name: template_paths_src #+BEGIN_SRC d -template PodMatters() { +template PathMatters() { mixin SiSUrgxInit; static auto rgx = Rgx(); - auto PodMatters(O,E,P,F)( + auto PathMatters(O,E,P,F)( O _opt_actions, E _env, P _pth = "", @@ -91,99 +91,206 @@ template PodMatters() { ) { auto _manifest = PodManifest!()(_pth); struct ManifestMatters_ { - auto pwd() { - return _env["pwd"]; - } - auto home() { - return _env["home"]; - } - auto opt_action() { - return _opt_actions; - } - auto is_pod() { - auto _is_pod = (_manifest.pod_manifest_path.length > 0) ? true : false; - return _is_pod; - } - auto pod_manifest_list_of_filenames() { - return _manifest_fn_list; - } - auto pod_manifest_list_of_languages() { - string[] _lngs; - foreach (filename_; pod_manifest_list_of_filenames) { - string _k = "en"; - if (auto m = (filename_).match(rgx.language_code_and_filename)) { - _k = m.captures[1].to!string; + auto env() { + struct Env_ { + auto pwd() { + return _env["pwd"]; + } + auto home() { + return _env["home"]; } - _lngs ~= _k; // all the languages from the manifest list of filenames with paths } - return _lngs; - } - auto pod_manifest_filename() { - return _manifest.pod_manifest_filename; + return Env_(); } - auto pod_manifest_path() { - return _manifest.pod_manifest_path; - } - auto pod_manifest_file_with_path() { - return _manifest.pod_manifest_file_with_path; - } - auto pod_config_dirs() { // TODO - string[] _config_dirs; - return _config_dirs; - } - auto pod_image_dirs() { // TODO - string[] _image_dirs; - return _image_dirs; - } - auto src_path_and_fn() { - return _fns; + auto opt() { + struct Opt_ { + auto action() { // redundant + return _opt_actions; + } + } + return Opt_(); } - auto src_fn() { - auto _fn = (src_path_and_fn).match(rgx.src_pth_sst_or_ssm).captures["filename"]; - return _fn; + auto src_is_pod() { + auto _src_is_pod = (_manifest.pod_manifest_path.length > 0) ? true : false; + return _src_is_pod; } - auto src_lng() { - string _k; - if (auto m = (src_path_and_fn).match(rgx.language_code_and_filename)) { - _k = m.captures[1]; - } else { - _k = "en"; + auto pod() { + struct Pod_ { + auto src_is_pod() { + auto _src_is_pod = (_manifest.pod_manifest_path.length > 0) ? true : false; + return _src_is_pod; + } + auto manifest_filename() { + return _manifest.pod_manifest_filename; + } + auto manifest_path() { + return _manifest.pod_manifest_path; + } + auto manifest_file_with_path() { + return _manifest.pod_manifest_file_with_path; + } + auto config_dirs() { // TODO + string[] _config_dirs; + return _config_dirs; + } + auto image_dirs() { // TODO + string[] _image_dirs; + return _image_dirs; + } + auto manifest_list_of_filenames() { + return _manifest_fn_list; + } + auto manifest_list_of_languages() { + string[] _lngs; + foreach (filename_; manifest_list_of_filenames) { + string _k = "en"; + if (auto m = (filename_).match(rgx.language_code_and_filename)) { + _k = m.captures[1].to!string; + } + _lngs ~= _k; // all the languages from the manifest list of filenames with paths + } + return _lngs; + } } - return _k; + return Pod_(); } - auto output_path() { - auto _output_path = pwd; - if ((_opt_actions.output_dir_set.length > 0) - && isValidPath(_opt_actions.output_dir_set) - ) { - _output_path = asNormalizedPath(_opt_actions.output_dir_set).array; - if (!exists(_output_path)) { - try { - _output_path.mkdirRecurse; + auto src() { + struct SRC_ { + auto is_pod() { + auto _src_is_pod = (_manifest.pod_manifest_path.length > 0) ? true : false; + return _src_is_pod; + } + auto path_and_fn() { + return _fns; + } + auto filename() { + auto _fn = (path_and_fn).baseName; + return _fn; + } + auto lng() { + string _k; + if (auto m = (path_and_fn).match(rgx.language_code_and_filename)) { + _k = m.captures[1]; + } else { + _k = "en"; } - catch (Exception ex) { - // Handle error + return _k; + } + auto file_with_absolute_path() { + string _pth = _env["pwd"].chainPath(path_and_fn).array; + return _pth; + } + auto absolute_path_to_src() { + string _pth = (_env["pwd"].chainPath(path_and_fn)).dirName.array; + return _pth; + } + auto base_dir() { + string _dir; + if ( // TODO this should catch generated --source sisupod, untested, needs manifest + auto m = (absolute_path_to_src) + .match(regex(r"[/](?P<dir>(?:[a-zA-Z0-9._-]+))/sisupod/" ~ filename.stripExtension)) + ) { + _dir = asAbsolutePath(path_and_fn.chainPath("../../")).array; + assert(_dir == m.captures["dir"]); + } else { + _dir = asAbsolutePath(path_and_fn.chainPath("../../../")).array; + assert(_dir == absolute_path_to_src.match(rgx.src_base_parent_dir_name).captures["dir"]); } + writeln("--> ", _dir); + return _dir; + } + auto base_parent_dir_path() { + string _dir; + if ( // TODO this should catch generated --source sisupod, untested, needs manifest + auto m = (absolute_path_to_src) + .match(regex(r"[/](?P<dir>(?:[a-zA-Z0-9._-]+))/sisupod/" ~ filename.stripExtension)) + ) { + _dir = asAbsolutePath(path_and_fn.chainPath("../../")).array; + } else { + _dir = asAbsolutePath(path_and_fn.chainPath("../../../")).array; + } + return _dir; + } + auto base_dir_path() { // looks like there is work to do + string _dir; + if ( // TODO this should catch generated --source sisupod, untested, needs manifest + auto m = (absolute_path_to_src) + .match(regex(r"[/](?P<dir>(?:[a-zA-Z0-9._-]+))/sisupod/" ~ filename.stripExtension)) + ) { + _dir = asAbsolutePath(path_and_fn.chainPath("../")).array; + } else { + _dir = asAbsolutePath(path_and_fn.chainPath("../../")).array; + } + writeln("--> ", _dir); + return _dir; + } + auto media_dir_path() { // TODO rework, can base directly on src fn path + auto _dir = asAbsolutePath(base_dir_path.chainPath("media")).array; + return _dir; + } + auto image_dir_path() { + auto _dir = asAbsolutePath(base_dir_path.chainPath("media/image")).array; + return _dir; + } + auto conf_dir_path() { + auto _dir = asAbsolutePath(base_dir_path.chainPath("conf")).array; + return _dir; + } + auto base_parent_dir() { + string _dir; + if ( // TODO this should catch generated --source sisupod, untested, needs manifest + auto m = (absolute_path_to_src) + .match(regex(r"[/](?P<dir>(?:[a-zA-Z0-9._-]+))/sisupod/" ~ filename.stripExtension)) + ) { + _dir = m.captures["dir"]; + } else { + _dir = (absolute_path_to_src).match(rgx.src_base_parent_dir_name).captures["dir"]; + } + writeln("--> ", _dir); + return _dir; + } + auto config_dirs() { // TODO + string[] _config_dirs; + if (is_pod) { + } else { + } + return _config_dirs; + } + auto image_dirs() { // TODO + string[] _image_dirs; + if (is_pod) { + } else { + } + return _image_dirs; } - assert(_output_path.isDir, - "not a directory: " ~ _output_path); - // TODO always test that is a directory and it is writable - } - return _output_path; - } - auto src_config_dirs() { // TODO - string[] _config_dirs; - if (is_pod) { - } else { } - return _config_dirs; - } - auto src_image_dirs() { // TODO - string[] _image_dirs; - if (is_pod) { - } else { + return SRC_(); + } + auto output() { + struct Out_ { + auto path() { + auto _output_path = _env["pwd"]; + if ((_opt_actions.output_dir_set.length > 0) + && isValidPath(_opt_actions.output_dir_set) + ) { + _output_path = asNormalizedPath(_opt_actions.output_dir_set).array; + if (!exists(_output_path)) { + try { + _output_path.mkdirRecurse; + } + // catch (ErrnoException ex) { + catch (Exception ex) { + // Handle error + } + } + assert(_output_path.isDir, + "not a directory: " ~ _output_path); + // TODO always test that is a directory and it is writable + } + return _output_path; + } } - return _image_dirs; + return Out_(); } } return ManifestMatters_(); @@ -206,90 +313,95 @@ template ConfigFilePaths() { auto config_filename_document() { return "config_document"; } - auto possible_config_path_locations_document() { - /+ FIX clean up conf paths ↓ +/ - /+ config local site (file system only, not in pod) +/ - /+ return paths +/ - string[] _possible_config_path_locations; - if (_manifest.is_pod) { - /+ config document in pod +/ - string _sisudoc_conf_pod; - string _sisudoc_conf_pod_text; - _sisudoc_conf_pod = asNormalizedPath(chainPath( - to!string(_env["pwd"]), - _manifest.pod_manifest_path ~ "/conf" - )).array; - _sisudoc_conf_pod_text = asNormalizedPath(chainPath( - to!string(_env["pwd"]), - _manifest.pod_manifest_path ~ "/media/text/" ~ _manifest.src_lng ~ "/conf" - )).array; - /+ return paths +/ - _possible_config_path_locations = [ - _sisudoc_conf_pod_text, - _sisudoc_conf_pod, - ]; - } else { - /+ config document (& or local site) on filesystem +/ - string _sisudoc_conf_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "sisudoc/conf")).array; // think about - string _sisudoc_conf_pwd_a = asNormalizedPath(chainPath(to!string(_env["pwd"]), "conf")).array; - string _sisudoc_conf_pwd_b = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../conf")).array; - string _sisudoc_conf_pwd_c = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../conf")).array; - string _sisudoc_conf_pwd_d = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../../conf")).array; - /+ return paths +/ - _possible_config_path_locations = [ - _sisudoc_conf_pwd, - _sisudoc_conf_pwd_a, - _sisudoc_conf_pwd_b, - _sisudoc_conf_pwd_c, - _sisudoc_conf_pwd_d, - ]; - } - /+ FIX clean up conf paths ↑ - (compare pwd to doc path location, and build config path) - +/ - return _possible_config_path_locations; - } - auto config_filename_site() { - return "config_local_site"; - } - auto possible_config_path_locations_local_site() { - /+ FIX clean up conf paths ↓ +/ - /+ config local site (file system only, not in pod) +/ - string _dot_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), ".sisu")).array; - string _underscore_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "_sisu")).array; - string _dot_home = asNormalizedPath(chainPath(to!string(_env["home"]), ".sisu")).array; - /+ return paths +/ - string[] _possible_config_path_locations; - if (_manifest.is_pod) { - _possible_config_path_locations = [ - _dot_pwd, - _underscore_pwd, - _dot_home, - "/etc/sisu" - ]; - } else { - /+ config document (& or local site) on filesystem +/ - string _sisudoc_conf_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "sisudoc/conf")).array; // think about - string _sisudoc_conf_pwd_a = asNormalizedPath(chainPath(to!string(_env["pwd"]), "conf")).array; - string _sisudoc_conf_pwd_b = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../conf")).array; - string _sisudoc_conf_pwd_c = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../conf")).array; - string _sisudoc_conf_pwd_d = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../../conf")).array; - _possible_config_path_locations = [ - _sisudoc_conf_pwd, - _sisudoc_conf_pwd_a, - _sisudoc_conf_pwd_b, - _sisudoc_conf_pwd_c, - _sisudoc_conf_pwd_d, - _dot_pwd, - _underscore_pwd, - _dot_home, - "/etc/sisu" - ]; - } - /+ FIX clean up conf paths ↑ - (compare pwd to doc path location, and build config path) - +/ - return _possible_config_path_locations; + auto possible_config_path_locations() { + struct _ConfFilePaths { + auto document() { + /+ FIX clean up conf paths ↓ +/ + /+ config local site (file system only, not in pod) +/ + /+ return paths +/ + string[] _possible_config_path_locations; + if (_manifest.src.is_pod) { + /+ config document in pod +/ + string _sisudoc_conf_pod; // + string _sisudoc_conf_pod_text; // + _sisudoc_conf_pod = asNormalizedPath(chainPath( + to!string(_env["pwd"]), + _manifest.pod.manifest_path ~ "/conf" + )).array; + _sisudoc_conf_pod_text = asNormalizedPath(chainPath( + to!string(_env["pwd"]), + _manifest.pod.manifest_path ~ "/media/text/" ~ _manifest.src.lng ~ "/conf" + )).array; + /+ return paths +/ + _possible_config_path_locations = [ + _sisudoc_conf_pod_text, + _sisudoc_conf_pod, + ]; + } else { + /+ config document (& or local site) on filesystem +/ + string _sisudoc_conf_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "sisudoc/conf")).array; // think about + string _sisudoc_conf_pwd_a = asNormalizedPath(chainPath(to!string(_env["pwd"]), "conf")).array; + string _sisudoc_conf_pwd_b = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../conf")).array; + string _sisudoc_conf_pwd_c = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../conf")).array; + string _sisudoc_conf_pwd_d = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../../conf")).array; + /+ return paths +/ + _possible_config_path_locations = [ + _sisudoc_conf_pwd, + _sisudoc_conf_pwd_a, + _sisudoc_conf_pwd_b, + _sisudoc_conf_pwd_c, + _sisudoc_conf_pwd_d, + ]; + } + /+ FIX clean up conf paths ↑ + (compare pwd to doc path location, and build config path) + +/ + return _possible_config_path_locations; + } + auto config_filename_site() { + return "config_local_site"; + } + auto local_site() { + /+ FIX clean up conf paths ↓ +/ + /+ config local site (file system only, not in pod) +/ + string _dot_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), ".sisu")).array; + string _underscore_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "_sisu")).array; + string _dot_home = asNormalizedPath(chainPath(to!string(_env["home"]), ".sisu")).array; + /+ return paths +/ + string[] _possible_config_path_locations; + if (_manifest.src.is_pod) { + _possible_config_path_locations = [ + _dot_pwd, + _underscore_pwd, + _dot_home, + "/etc/sisu" + ]; + } else { + /+ config document (& or local site) on filesystem +/ + string _sisudoc_conf_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "sisudoc/conf")).array; // think about + string _sisudoc_conf_pwd_a = asNormalizedPath(chainPath(to!string(_env["pwd"]), "conf")).array; + string _sisudoc_conf_pwd_b = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../conf")).array; + string _sisudoc_conf_pwd_c = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../conf")).array; + string _sisudoc_conf_pwd_d = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../../conf")).array; + _possible_config_path_locations = [ + _sisudoc_conf_pwd, + _sisudoc_conf_pwd_a, + _sisudoc_conf_pwd_b, + _sisudoc_conf_pwd_c, + _sisudoc_conf_pwd_d, + _dot_pwd, + _underscore_pwd, + _dot_home, + "/etc/sisu" + ]; + } + /+ FIX clean up conf paths ↑ + (compare pwd to doc path location, and build config path) + +/ + return _possible_config_path_locations; + } + } + return _ConfFilePaths(); } } return ConfFilePaths(); @@ -398,50 +510,6 @@ template SiSUpathsSRC() { } #+END_SRC -*** pod archive base - -#+name: template_paths_sisupod -#+BEGIN_SRC d -template SiSUpathsSisupod() { - mixin SiSUrgxInit; - static auto rgx = Rgx(); - string _base_dir_pod = "sisupod"; - string _base_dir_doc = "sisudoc"; - string _suffix = ".zip"; - auto SiSUpathsSisupod()() { - struct _PathsStruct { - string base_filename(string fn_src) { - auto pth = fn_src.baseName.stripExtension; - return pth; - } - string sisupod_dir() { - auto pth = _base_dir_pod; - return pth; - } - string sisudoc_dir() { - auto pth = _base_dir_doc; - return pth; - } - string sisupod_filename(string fn_src) { - string pth = _base_dir_pod.chainPath(base_filename(fn_src) ~ _suffix).array; - return pth; - } - string base_filesystem(string fn_src) { - string pth = _base_dir_pod.chainPath(base_filename(fn_src)).array; - assert(pth == _base_dir_pod ~ "/" ~ base_filename(fn_src), - pth ~ " == " ~ _base_dir_pod ~ "/" ~ base_filename(fn_src) ~ "?"); - return pth; - } - string base_pod(string fn_src) { - string pth = _base_dir_pod.chainPath(base_filename(fn_src)).array; // change this - return pth; - } - } - return _PathsStruct(); - } -} -#+END_SRC - *** pods internal, zipped, unzipped #+name: template_paths_sisupods @@ -449,10 +517,12 @@ template SiSUpathsSisupod() { template SiSUpathsSisupods() { mixin SiSUrgxInit; static auto rgx = Rgx(); - string _base_dir_pod = "sisupod"; - string _base_dir_doc = "sisudoc"; string _suffix = ".zip"; - auto SiSUpathsSisupods()() { + auto SiSUpathsSisupods(Dm)(Dm doc_matters) { + string _base_dir_pod = (doc_matters.output_path.length > 0) + ? doc_matters.output_path ~ "/sisupod" + : "/sisupod"; + string _base_dir_doc = "sisudoc"; struct _PodPaths { string base_filename_(string fn_src) { auto pth = fn_src.baseName.stripExtension; |