added custom strings + LICENSE.md and CONTRIBUTING.md

main
michal 3 years ago
parent 96c8a69681
commit 54e9df9e82

@ -0,0 +1,28 @@
# Crystal Linux Contributing Guidelines
#### !! Always make sure to `git pull` before doing any work to avoid commit hell !!
### Pre-Commit Checks
- Make sure to `cargo fmt` your code before every commit push
- Unless in specific edge cases, don't push code that doesn't pass `cargo check`
- Try to correct any code with `cargo clippy` before you push
### Formatting
- UNIX line endings (LF instead of CRLF)
- 4 spaces per TAB
### Good Practices
- Try to use .unwrap() as little as possible
- Try to never use panic!() in production code, always try to have a possible way to resolve errors, even if it's just
unwrap_or/_else()
- Never use println!() or eprintln!() in finalised code. Using string functions (e.g. info() in Amethyst v3.0.0) is
preferred
- Compartmentalise as much as you can, avoid writing the exact same line of code 50 times if you can turn it into a
function
### Examples of these guidelines in practice
- https://git.getcryst.al/crystal/ame/src/branch/rewrite

@ -0,0 +1,23 @@
The Nolicense Revision 2.1 - Monday 15th November 2021
Copyright (c) 2022 Crystal Linux Team
Everyone is permitted to freely copy and distribute this license document. Modified redistributions are subject to the
following license agreement.
The Nolicense terms and conditions for copying, distribution and modification of software and any created assets are as
follows:
- Any unmodified redistributions in either source code or binary form must retain this copyright notice in its entirety.
- Any and all redistributions or derivative works, whether modified or unmodified, must credit the original author(s) of
the source code, and provide an easily accessible way to find the original author's source code, wherever it may be
published.
- Derivative works and modified redistributions cannot be published under the same name as the original software, nor
can it be presented as an extension of or newer revision of said software, and unless explicitly permitted, the
original authors name(s) shall not be used to endorse said derivative works.
This software is provided as-is; Neither the copyright holders nor any contributors to the software are to be held
liable for any damages caused by any files attached. By modifying or redistributing the software in any way, you
automatically agree to the terms of the license agreement.

@ -1,2 +1,10 @@
pub mod strings; mod strings;
pub mod structs; pub mod structs;
pub fn info(a: String) {
strings::info(a);
}
pub fn crash(a: String, b: i32) {
strings::crash(a, b);
}

@ -1 +1,10 @@
use std::process::exit;
pub fn info(a: String) {
println!("\x1b[2;22;30mμ\x1b[0m \x1b[1;37m{}\x1b[0m", a);
}
pub fn crash(a: String, b: i32) {
println!("\x1b[2;22;31m❌:\x1b[0m \x1b[1;91m{}\x1b[0m", a);
exit(b);
}

@ -2,6 +2,7 @@ use std::env;
use std::process::Command; use std::process::Command;
use clap::{App, AppSettings, Arg, ArgSettings, SubCommand}; use clap::{App, AppSettings, Arg, ArgSettings, SubCommand};
use crate::internal::{crash, info};
use crate::workspace::read_cfg; use crate::workspace::read_cfg;
@ -83,7 +84,7 @@ fn main() {
let config = workspace::read_cfg(); let config = workspace::read_cfg();
if config.mode == "workspace" { if config.mode == "workspace" {
for r in config.repo { for r in config.repo {
println!("Cloning (workspace mode): {}", r); info(format!("Cloning (workspace mode): {}", r));
Command::new("git") Command::new("git")
.args(&["clone", &r]) .args(&["clone", &r])
.spawn() .spawn()
@ -93,7 +94,7 @@ fn main() {
} }
} else if config.mode == "repository" { } else if config.mode == "repository" {
for r in config.repo { for r in config.repo {
println!("Cloning (repository mode): {}", r); info(format!("Cloning (repository mode): {}", r));
Command::new("git") Command::new("git")
.args(&["clone", "--no-checkout", &r]) .args(&["clone", "--no-checkout", &r])
.spawn() .spawn()
@ -101,7 +102,7 @@ fn main() {
.wait() .wait()
.unwrap(); .unwrap();
println!("Entering working directory: {}", r); info(format!("Entering working directory: {}", r));
let dir = format!( let dir = format!(
"{}/{}", "{}/{}",
env::current_dir().unwrap().display(), env::current_dir().unwrap().display(),
@ -109,7 +110,7 @@ fn main() {
); );
env::set_current_dir(dir).unwrap(); env::set_current_dir(dir).unwrap();
println!("Resetting unstaged files: {}", r); info(format!("Resetting unstaged files: {}", r));
Command::new("git") Command::new("git")
.arg("reset") .arg("reset")
.spawn() .spawn()
@ -117,7 +118,7 @@ fn main() {
.wait() .wait()
.unwrap(); .unwrap();
println!("Checking out PKGBUILD: {}", r); info(format!("Checking out PKGBUILD: {}", r));
Command::new("git") Command::new("git")
.args(&["checkout", "HEAD", "PKGBUILD"]) .args(&["checkout", "HEAD", "PKGBUILD"])
.spawn() .spawn()
@ -126,14 +127,14 @@ fn main() {
.unwrap(); .unwrap();
} }
} else { } else {
panic!("Invalid mode in mlc.toml"); crash("Invalid mode in mlc.toml".to_string(), 1);
} }
} }
if let true = matches.is_present("build") { if let true = matches.is_present("build") {
let config = workspace::read_cfg(); let config = workspace::read_cfg();
if config.mode != "repository" { if config.mode != "repository" {
panic!("Cannot build packages in workspace mode") crash("Cannot build packages in workspace mode".to_string(), 2);
} }
let packages: Vec<String> = matches let packages: Vec<String> = matches
.subcommand() .subcommand()
@ -153,7 +154,7 @@ fn main() {
for pkg in packages { for pkg in packages {
if !repos.contains(&pkg) { if !repos.contains(&pkg) {
panic!("Package {} not found in repos in mlc.toml", pkg); crash(format!("Package {} not found in repos in mlc.toml", pkg), 3);
} else { } else {
repository::build(pkg); repository::build(pkg);
} }
@ -163,7 +164,7 @@ fn main() {
if let true = matches.is_present("pull") { if let true = matches.is_present("pull") {
let config = workspace::read_cfg(); let config = workspace::read_cfg();
for r in config.repo { for r in config.repo {
println!("Entering working directory: {}", r); info(format!("Entering working directory: {}", r));
let dir = format!( let dir = format!(
"{}/{}", "{}/{}",
env::current_dir().unwrap().display(), env::current_dir().unwrap().display(),
@ -186,4 +187,4 @@ fn main() {
} }
repository::generate(); repository::generate();
} }
} }

@ -1,6 +1,7 @@
use std::path::Path; use std::path::Path;
use std::process::Command; use std::process::Command;
use std::{env, fs}; use std::{env, fs};
use crate::crash;
pub fn build(pkg: String) { pub fn build(pkg: String) {
let dir = env::current_dir().unwrap(); let dir = env::current_dir().unwrap();
@ -8,7 +9,7 @@ pub fn build(pkg: String) {
fs::create_dir_all("out").unwrap(); fs::create_dir_all("out").unwrap();
} }
if !Path::exists(pkg.as_ref()) { if !Path::exists(pkg.as_ref()) {
panic!("Git directory for {} not found, aborting", pkg); crash(format!("Git directory for {} not found, aborting", pkg), 4);
} }
env::set_current_dir(pkg).unwrap(); env::set_current_dir(pkg).unwrap();
@ -29,4 +30,4 @@ pub fn build(pkg: String) {
.unwrap(); .unwrap();
env::set_current_dir(dir).unwrap(); env::set_current_dir(dir).unwrap();
} }

@ -1,15 +1,16 @@
use std::fs; use std::fs;
use std::path::Path; use std::path::Path;
use crate::crash;
use crate::internal::structs::Config; use crate::internal::structs::Config;
pub fn read_cfg() -> Config { pub fn read_cfg() -> Config {
if !Path::exists("mlc.toml".as_ref()) { if !Path::exists("mlc.toml".as_ref()) {
panic!("mlc.toml file not found") crash("Config file not found (mlc.toml)".to_string(), 5)
} }
let file = fs::read_to_string("mlc.toml").unwrap(); let file = fs::read_to_string("mlc.toml").unwrap();
let config: Config = toml::from_str(&file).unwrap(); let config: Config = toml::from_str(&file).unwrap();
config config
} }
Loading…
Cancel
Save