fixed pulling and made it create default config

main
michal 3 years ago
parent 54e9df9e82
commit fd9e90781a

@ -0,0 +1,63 @@
<p align="center">
<a href="https://git.getcryst.al/crystal/ame/">
<img src="https://git.getcryst.al/crystal/branding/raw/branch/main/logos/crystal-logo-minimal.png" alt="Logo" width="150" height="150">
</a>
</p>
<h2 align="center">Malachite</h2>
</p>
<p align="center">
<a href="https://discord.gg/yp4xpZeAgW"><img alt="Discord" src="https://img.shields.io/discord/825473796227858482?color=blue&label=Discord&logo=Discord&logoColor=white"?link=https://discord.gg/yp4xpZeAgW&link=https://discord.gg/yp4xpZeAgW> </p></a>
<p align="center">Malachite is a simple yet fast workspace and repo management tool, made for packagers of Arch Linux based distributions.</p>
## Basic usage
| Action | Command |
|----------------------|--|
| Build a package | mlc build \<package\> |
| Generate local repository | mlc repo-gen |
| Update local repos/PKGBUILDs | mlc pull/update |
| Create and/or open config file | mlc conf |
## Exit codes overview
| Exit Code (i32) | Reason |
|-----------------|----------------------------------------------------------|
| 1 | Running ame as UID 0 / root |
| 2 | Failed adding package to database |
| 3 | Failed initialising database |
| 4 | Error creating cache and/or database paths |
| 5 | Could not find one or more required package dependencies |
| 6 | User cancelled package installation |
| 7 | Pacman error when installing package |
## How to build:
Tested on latest Cargo (1.60.0-nightly)
<br>
#### Debug/development builds
- `cargo build`
#### Optimised/release builds
- `cargo build --release`
#### Pkg-warner included
- `cargo build (--release) --all --features=pkg-warner`
<br>
<br>
<!--
echo "AME_UWU=true" >> ~/.zshrc
echo "AME_UWU=true" >> ~/.bashrc
set -Ux AME_UWU true
:)
-->

@ -1,8 +1,10 @@
use std::env; use std::env;
use std::path::Path;
use std::process::Command; use std::process::Command;
use clap::{App, AppSettings, Arg, ArgSettings, SubCommand};
use crate::internal::{crash, info}; use crate::internal::{crash, info};
use clap::{App, AppSettings, Arg, ArgSettings, SubCommand};
use crate::repository::create_config;
use crate::workspace::read_cfg; use crate::workspace::read_cfg;
@ -24,6 +26,7 @@ fn main() {
.help("Sets the level of verbosity"), .help("Sets the level of verbosity"),
) )
.arg( .arg(
// TODO implement --exclude
Arg::with_name("exclude") Arg::with_name("exclude")
.short("e") .short("e")
.long("exclude") .long("exclude")
@ -32,6 +35,7 @@ fn main() {
.help("Excludes packages from given operation"), .help("Excludes packages from given operation"),
) )
.arg( .arg(
// TODO implement --all
Arg::with_name("all") Arg::with_name("all")
.long("all") .long("all")
.set(ArgSettings::Global) .set(ArgSettings::Global)
@ -49,7 +53,7 @@ fn main() {
), ),
) )
.subcommand( .subcommand(
SubCommand::with_name("repo-gen").about("Generates repository from build packages"), SubCommand::with_name("repo-gen").about("Generates repository from built packages"),
) )
.subcommand( .subcommand(
SubCommand::with_name("prune") SubCommand::with_name("prune")
@ -69,6 +73,9 @@ fn main() {
"Pulls all git repositories from mlc.toml branching from current directory", "Pulls all git repositories from mlc.toml branching from current directory",
), ),
) )
.subcommand(
SubCommand::with_name("config").about("Create and/or open local config file"),
)
.settings(&[ .settings(&[
AppSettings::GlobalVersion, AppSettings::GlobalVersion,
AppSettings::VersionlessSubcommands, AppSettings::VersionlessSubcommands,
@ -163,6 +170,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();
let cdir = env::current_dir().unwrap();
for r in config.repo { for r in config.repo {
info(format!("Entering working directory: {}", r)); info(format!("Entering working directory: {}", r));
let dir = format!( let dir = format!(
@ -177,6 +185,7 @@ fn main() {
.unwrap() .unwrap()
.wait() .wait()
.unwrap(); .unwrap();
env::set_current_dir(&cdir).unwrap();
} }
} }
@ -187,4 +196,17 @@ fn main() {
} }
repository::generate(); repository::generate();
} }
if let true = matches.is_present("config") {
if !Path::exists("mlc.toml".as_ref()) {
create_config();
}
let editor = env::var("EDITOR").unwrap_or("nano".to_string());
Command::new(editor)
.arg("mlc.toml")
.spawn()
.unwrap()
.wait()
.unwrap();
}
} }

@ -0,0 +1,21 @@
use std::env;
use std::fs::File;
use std::io::Write;
use std::path::Path;
use crate::crash;
const DEFAULT_CONFIG: &str = r#"
mode = "" # either "repository" or "workspace"
name = "" # only required when in repository mode, decides what to call the repository and relevant files
repo = [""] # an array of git repos to clone from
"#;
pub fn create_config() {
if !env::current_dir().unwrap().read_dir().unwrap().next().is_none() {
crash("Directory is not empty, please only create a repository in an empty directory".to_string(), 6);
}
if !Path::exists("mlc.toml".as_ref()) {
let mut file = File::create("mlc.toml").unwrap();
file.write_all(DEFAULT_CONFIG.as_ref()).unwrap();
}
}

@ -1,5 +1,6 @@
mod package; mod package;
mod repo; mod repo;
mod config;
pub fn build(pkg: String) { pub fn build(pkg: String) {
package::build(pkg); package::build(pkg);
@ -8,3 +9,7 @@ pub fn build(pkg: String) {
pub fn generate() { pub fn generate() {
repo::generate(); repo::generate();
} }
pub fn create_config() {
config::create_config();
}

@ -1,7 +1,7 @@
use crate::crash;
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();

@ -1,6 +1,6 @@
use crate::crash;
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;

Loading…
Cancel
Save