This commit is contained in:
Kreyren 2020-01-25 14:34:43 +00:00
parent 6d9ece6f06
commit 77a876481b
14 changed files with 32 additions and 265 deletions

@ -1,7 +1,7 @@
# Reference https://doc.rust-lang.org/cargo/reference/manifest.html # Reference https://doc.rust-lang.org/cargo/reference/manifest.html
[package] [package]
name = "RXT0112" name = "zernif"
description = "FIXME: description needed" description = "FIXME: description needed"
keywords = ["package-manager"] keywords = ["package-manager"]
version = "0.0.0" version = "0.0.0"

@ -1,11 +1,11 @@
This license is now voided untill finished into a production to replace current license by which it's meant to be announced the change by the original creator of this project (github.com/kreyren) This license is now voided until finished into a production to replace current license by which it's meant to be announced the change by the original creator of this project (github.com/kreyren)
--- ---
# RXT GENERAL LICENSE (RXT-G0) # RXT GENERAL LICENSE (RXT-G0)
Version 0, 20 January 2020 Version 0, 20 January 2020
Copyright (C) 2020 [RiXotStudio](http://rixotstudio.cz) and contributors Copyright (C) 2020 [RiXotStudio](http://rixotstudio.cz)
Everyone is permitted to copy and distribute verbatim copies of this license Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed. document, but changing it is not allowed.

1
src/bin/README.md Normal file

@ -0,0 +1 @@
This directory is used for various subcommands used by zernif

@ -1,114 +0,0 @@
// Created by Jacob Hrbek <kreyren@rixotstudio.cz> under GPL-3 license (https://www.gnu.org/licenses/gpl-3.0.en.html) in 2020
// Source lib.rs
// FIXME-QA: Is this the best way to do this?
use RXT0112::*;
fn main() {
die!(1; "ping");
fixme!("Add method to handle translations");
fixme!("Allow changing name based on config file");
fixme!("Verify that this works on POSIX");
// Capture arguments (https://docs.rs/clap/2.33.0/clap/)
// FIXME-BENCHMARK: Benchmark other option like structOpt (https://docs.rs/structopt/0.3.7/structopt/#subcommands)
// FIXME-TEST: Add test to make sure that clap works the way we want it
let matches = App::new("RXT0112")
.version("INIT_PHASE_VERSION") // Replace with valid versioning
.author("Jacob Hrbek <kreyren@rixotstudio.cz>")
.about("Work in progress package manager expected to support any kernel on any downstream")
.arg(Arg::with_name("gui")
.short("G")
.long("gui")
.multiple(true)
.help("Opens up a Graphical User Interface frontend"))
.arg(Arg::with_name("dev")
.short("D")
.long("development")
.multiple(true)
.help("Perform all following actions in a temporary sandboxed directory used for development"))
// FIXME-QA: Sort subcommands alphabetically
.subcommand(SubCommand::with_name("resolve")
.about("Resolved package to be imported in the system")
.arg_from_usage("<category/package> 'Package identifier'"))
.subcommand(SubCommand::with_name("remove")
.about("Remove package from the system")
.arg_from_usage("-r, remove 'Removing of packages'"))
.subcommand(SubCommand::with_name("list")
.about("Listing of packages")
.arg_from_usage("-l, list 'Listing of packages'"))
.subcommand(SubCommand::with_name("deploy")
.about("deploy (WIP-NAME) on target used for initial instalation")
.arg_from_usage("-l, list 'Listing of packages'"))
// FIXME: Replace with following: .arg_from_usage("deploy 'Deploy (WIP-NAME) on target which creates required file hierarchy and configuration needed for (WIP-NAME)'"))
.subcommand(SubCommand::with_name("hijack")
.about("Import (WIP-NAME) on target system that already exists for (WIP-NAME) to be used as alternative package manager")
.arg_from_usage("-l, list 'Listing of packages'"))
// FIXME: Replace with following: .arg_from_usage("hijack 'Import (WIP-NAME) on target system that already exists for (WIP-NAME) to be used as alternative package manager'"))
.get_matches();
// Manage arguments
// NOTICE: Do not add else statement to catch unexpecteds since this is handled by clap
if matches.is_present("gui") {
unimplemented!("GUI method is not yet implemented");
} else if matches.is_present("dev") {
// WARNING: Has to be implemented prior to implementing other features
// FIXME-TEST: Make a test to ensure that features are not escaping sandbox
// FIXME: Translate in rustlang from english
fixme!("Create a new directory in tmpdir/name-of-project");
emkdir("/var/tmp/RXT0112");
fixme!("Create sandboxed environment for testing of features");
unimplemented!("Development method is not yet supported");
}
// Manage subcommands
// NOTICE: Do not add else statement to catch unexpecteds since this is handled by clap
// FIXME: Convert this statement in case which would seem like better implementation
if let Some(_matches) = matches.subcommand_matches("resolve") {
// Current approach: Download source to ... ?
fixme!("Check if expected file hierarchy is present, if not prompt for init subcommand");
fixme!("Initiate sandbox");
fixme!("Allow multiple methods of sandboxing");
fixme!("Fetch source");
fixme!("Cache source");
fixme!("Configure source");
fixme!("Compile source");
fixme!("Install source");
fixme!("Add a method to customize the resolution by the end-user");
// FIXME: Outputs user-unfriendly message
unimplemented!("Resolving of packages is not yet implemented");
} else if let Some(_matches) = matches.subcommand_matches("list") {
fixme!("Output installed packages");
unimplemented!("Listing is not yet implemented");
} else if let Some(_matches) = matches.subcommand_matches("deploy") {
// ABSTRACT: This is expected to be the installation method for the end-users to get OS with (WIP-NAME)
fixme!("Deploy on target");
fixme!("Deploy based on ENV variable");
fixme!("Deploy based on config file");
fixme!("Allow selection of file system hierarchy from CLI args");
fixme!("Deploy kernel based on CLI args");
fixme!("Deploy toolchain based on CLI args");
fixme!("Deploy features");
fixme!("Expected feature: Kreyrock");
fixme!("Expected feature: winehq for unix");
unimplemented!("Listing is not yet implemented");
} else if let Some(_matches) = matches.subcommand_matches("deploy") {
fixme!("Perform sanity-checks for hijacking");
fixme!("Hijack apt");
fixme!("Hijack pacman");
fixme!("Hijack portage");
fixme!("Hijack dnf");
fixme!("Hijack zypper");
fixme!("Hijack freebsd pckm");
fixme!("Hijack MacOS");
fixme!("Hijack Windows?");
fixme!("Die if untested system is parsed");
fixme!("Die if used on invalid directory (suggest deploy instead?)");
unimplemented!("Hijacking is not yet supported");
} else if let Some(_matches) = matches.subcommand_matches("remove") {
fixme!("Remove package from specified root");
unimplemented!("Removal of packages from specified root is not yet supported");
}
fixme!("Returns 0 even when no argument was parsed -> Expecting Exit 2 with help message");
}

3
src/bin/resolve.rs Normal file

@ -0,0 +1,3 @@
fn main() {
unimplemented!("Package resolution is not yet implemented");
}

@ -1,65 +0,0 @@
// (Full example with detailed comments in examples/01b_quick_example.rs)
//
// This example demonstrates clap's full 'builder pattern' style of creating arguments which is
// more verbose, but allows easier editing, and at times more advanced options, or the possibility
// to generate arguments dynamically.
extern crate clap;
use clap::{Arg, App, SubCommand};
fn main() {
let matches = App::new("My Super Program")
.version("1.0")
.author("Kevin K. <kbknapp@gmail.com>")
.about("Does awesome things")
.arg(Arg::with_name("config")
.short("c")
.long("config")
.value_name("FILE")
.help("Sets a custom config file")
.takes_value(true))
.arg(Arg::with_name("INPUT")
.help("Sets the input file to use")
.required(true)
.index(1))
.arg(Arg::with_name("v")
.short("v")
.multiple(true)
.help("Sets the level of verbosity"))
.subcommand(SubCommand::with_name("test")
.about("controls testing features")
.version("1.3")
.author("Someone E. <someone_else@other.com>")
.arg(Arg::with_name("debug")
.short("d")
.help("print debug information verbosely")))
.get_matches();
// Gets a value for config if supplied by user, or defaults to "default.conf"
let config = matches.value_of("config").unwrap_or("default.conf");
println!("Value for config: {}", config);
// Calling .unwrap() is safe here because "INPUT" is required (if "INPUT" wasn't
// required we could have used an 'if let' to conditionally get the value)
println!("Using input file: {}", matches.value_of("INPUT").unwrap());
// Vary the output based on how many times the user used the "verbose" flag
// (i.e. 'myprog -v -v -v' or 'myprog -vvv' vs 'myprog -v'
match matches.occurrences_of("v") {
0 => println!("No verbose info"),
1 => println!("Some verbose info"),
2 => println!("Tons of verbose info"),
3 | _ => println!("Don't be crazy"),
}
// You can handle information about subcommands by requesting their matches by name
// (as below), requesting just the name used, or both at the same time
if let Some(matches) = matches.subcommand_matches("test") {
if matches.is_present("debug") {
println!("Printing debug info...");
} else {
println!("Printing normally...");
}
}
// more program logic goes here...
}

@ -2,30 +2,5 @@
File used for sourcing of libraries File used for sourcing of libraries
*/ */
// FIXME: Optimize dependencies depending on what is being called and used // Use modules
pub mod modules;
// FIXME: Resolve once name of the project is determined
#![allow(non_snake_case)]
// Library used for cli argument management
extern crate clap;
pub use clap::{Arg, App, SubCommand};
// Export for metadata?
// FIXME: Verify unused
pub use std::fs;
// Export of standard library to make a new directory (works cross-platform)
// FIXME: Make create_dir to output TRACE message of level 2
// FIXME: Output helpful error in CLI and logs
pub use std::fs::create_dir;
// Get die macro
// FIXME: Contribute in die crate to allow customization of messages by the end-user
pub use die::die;
// Required for create_dir
pub use std::fs::metadata;
// Required for emkdir
pub use std::io;

@ -1,62 +1,21 @@
// Created by Jacob Hrbek <kreyren@rixotstudio.cz> under GPL-3 license (https://www.gnu.org/licenses/gpl-3.0.en.html) in 2020 // Created by Jacob Hrbek <kreyren@rixotstudio.cz> under GPL-3 license (https://www.gnu.org/licenses/gpl-3.0.en.html) in 2020
// THIS IS TEMPORARY FILE -> Expecting to outsource all commains in `src/bin`
// Source lib.rs // Source lib.rs
// FIXME-QA: Is this the best way to do this? // FIXME-QA: Is this the best way to do this?
use RXT0112::*; use zernif::fixme;
// FIXME: Move macros for output in their standalone crate
// Macro to handle fixme messages
// FIXME: Implement export in log directory based on system used
// FIXME: Allow end-user to customize the message
// FIXME: Allow end-user to mute the messages through configuration
// FIXME: Contribute in log to outsource maintainance on them
macro_rules! fixme {
($msg:expr) => ( println!("FIXME: {}", $msg);)
}
// Macro to inform the end-user about non-fatal error
// FIXME: Implement export in log directory based on system used
// FIXME: Allow end-user to customize the message
// FIXME: Contribute in log to outsource maintainance on them
macro_rules! error {
($msg:expr) => ( println!("ERROR: {}", $msg);)
}
// Macro to perform tracing
// FIXME: Implement export in log directory based on system used and debug level
// FIXME: Allow end-user to customize the message
// FIXME: Contribute in log to outsource maintainance on them
// FIXME: Output only if debug level 2 and higger is used
macro_rules! trace {
($msg:expr) => ( println!("TRACE: {}", $msg);)
}
// Macro to handle info messages
/// FIXME: Implement export in log directory based on system used
/// FIXME: Outsource parts of the code in log crate?
/// FIXME: Allow end-user to customize the message
macro_rules! info {
($msg:expr) => ( println!("INFO: {}", $msg);)
}
// Macro to overwrite default `unimplemented!();` to be more user-friendly
// FIXME: Determine error code for unimplemented
macro_rules! unimplemented {
($msg:expr) => (
die!(126; "UNIMPLEMENTED: {}", $msg);
)
}
fn main() { fn main() {
die!(1; "ping");
fixme!("Add method to handle translations"); fixme!("Add method to handle translations");
fixme!("Allow changing name based on config file"); fixme!("Allow changing name based on config file");
fixme!("Verify that this works on POSIX"); fixme!("Verify that this works on POSIX");
// Capture arguments (https://docs.rs/clap/2.33.0/clap/) // Capture arguments (https://docs.rs/clap/2.33.0/clap/)
// FIXME-BENCHMARK: Benchmark other option like structOpt (https://docs.rs/structopt/0.3.7/structopt/#subcommands) // FIXME-BENCHMARK: Benchmark other option like structOpt (https://docs.rs/structopt/0.3.7/structopt/#subcommands)
// FIXME-TEST: Add test to make sure that clap works the way we want it // FIXME-TEST: Add test to make sure that clap works the way we want it
use clap::{Arg, App, SubCommand};
let matches = App::new("RXT0112") let matches = App::new("RXT0112")
.version("INIT_PHASE_VERSION") // Replace with valid versioning .version("INIT_PHASE_VERSION") // Replace with valid versioning
.author("Jacob Hrbek <kreyren@rixotstudio.cz>") .author("Jacob Hrbek <kreyren@rixotstudio.cz>")
@ -100,7 +59,7 @@ fn main() {
// FIXME-TEST: Make a test to ensure that features are not escaping sandbox // FIXME-TEST: Make a test to ensure that features are not escaping sandbox
// FIXME: Translate in rustlang from english // FIXME: Translate in rustlang from english
fixme!("Create a new directory in tmpdir/name-of-project"); fixme!("Create a new directory in tmpdir/name-of-project");
emkdir("/var/tmp/RXT0112"); //emkdir("$TEMPDIR/RXT0112");
fixme!("Create sandboxed environment for testing of features"); fixme!("Create sandboxed environment for testing of features");
unimplemented!("Development method is not yet supported"); unimplemented!("Development method is not yet supported");
} }

1
src/modules/README.md Normal file

@ -0,0 +1 @@
This is non-standard file hierarchy used for code blocks that are used in binaries

1
src/modules/mod.rs Normal file

@ -0,0 +1 @@
pub mod output;

@ -7,6 +7,7 @@
// FIXME: Allow end-user to customize the message // FIXME: Allow end-user to customize the message
// FIXME: Allow end-user to mute the messages through configuration // FIXME: Allow end-user to mute the messages through configuration
// FIXME: Contribute in log to outsource maintainance on them // FIXME: Contribute in log to outsource maintainance on them
#[macro_export]
macro_rules! fixme { macro_rules! fixme {
($msg:expr) => ( println!("FIXME: {}", $msg);) ($msg:expr) => ( println!("FIXME: {}", $msg);)
} }
@ -15,6 +16,7 @@ macro_rules! fixme {
// FIXME: Implement export in log directory based on system used // FIXME: Implement export in log directory based on system used
// FIXME: Allow end-user to customize the message // FIXME: Allow end-user to customize the message
// FIXME: Contribute in log to outsource maintainance on them // FIXME: Contribute in log to outsource maintainance on them
#[macro_export]
macro_rules! error { macro_rules! error {
($msg:expr) => ( println!("ERROR: {}", $msg);) ($msg:expr) => ( println!("ERROR: {}", $msg);)
} }
@ -24,22 +26,26 @@ macro_rules! error {
// FIXME: Allow end-user to customize the message // FIXME: Allow end-user to customize the message
// FIXME: Contribute in log to outsource maintainance on them // FIXME: Contribute in log to outsource maintainance on them
// FIXME: Output only if debug level 2 and higger is used // FIXME: Output only if debug level 2 and higger is used
#[macro_export]
macro_rules! trace { macro_rules! trace {
($msg:expr) => ( println!("TRACE: {}", $msg);) ($msg:expr) => ( println!("TRACE: {}", $msg);)
} }
// Macro to handle info messages // Macro to handle info messages
/// FIXME: Implement export in log directory based on system used // FIXME: Implement export in log directory based on system used
/// FIXME: Outsource parts of the code in log crate? // FIXME: Outsource parts of the code in log crate?
/// FIXME: Allow end-user to customize the message // FIXME: Allow end-user to customize the message
#[macro_export]
macro_rules! info { macro_rules! info {
($msg:expr) => ( println!("INFO: {}", $msg);) ($msg:expr) => ( println!("INFO: {}", $msg);)
} }
// Macro to overwrite default `unimplemented!();` to be more user-friendly // Macro to overwrite default `unimplemented!();` to be more user-friendly
// FIXME: Determine error code for unimplemented // FIXME: Determine error code for unimplemented
macro_rules! unimplemented { // FIXME: Cargo complains about us overwriting unimplemented()
($msg:expr) => ( // #[macro_export]
die!(126; "UNIMPLEMENTED: {}", $msg); // macro_rules! unimplemented {
) // ($msg:expr) => (
} // die!(126; "UNIMPLEMENTED: {}", $msg);
// )
// }