From 0842f4756e84a91ccd1583c81af1a3674721d24a Mon Sep 17 00:00:00 2001 From: Chiu-Hsiang Hsu Date: Fri, 19 Aug 2016 14:21:13 +0800 Subject: [PATCH] chore: more description --- README.rst | 9 ++++++++ src/config/arch.rs | 8 ++++--- src/config/core.rs | 8 +++++-- src/config/meta.rs | 4 +++- src/config/mod.rs | 2 ++ src/main.rs | 52 ++++++++-------------------------------------- 6 files changed, 34 insertions(+), 49 deletions(-) diff --git a/README.rst b/README.rst index 3583bc3..1551596 100644 --- a/README.rst +++ b/README.rst @@ -6,6 +6,8 @@ cargo-arch will generate ``PKGBUILD`` from information in Cargo.toml. You can add extra information in ``[package.metadata.arch]`` sections, options can be found by ``man PKGBUILD``. +`Documentation `_ + .. contents:: Table of Contents @@ -150,6 +152,12 @@ x86_64, Linux, musl (build on Arch Linux) not a dynamic executable +Commands Dependency +------------------------------ + +* `makepkg `_ + + Changelog ======================================== @@ -191,6 +199,7 @@ Special Thanks ======================================== * `cargo-deb `_ for generates Debian packages +* `rust-everywhere `_ for CI integration * `clap-rs `_ for arguments parsing * `Rust Team `_ * and every project I've used diff --git a/src/config/arch.rs b/src/config/arch.rs index b94441a..50a10eb 100644 --- a/src/config/arch.rs +++ b/src/config/arch.rs @@ -1,13 +1,15 @@ +//! Arch Linux's package config + use std::fs::File; use std::io::prelude::*; use toml; -use super::core::{Cargo, ToPackageConfig, GeneratePackage}; +use super::core::{Cargo, ToPackageConfig, GeneratePackageConfig}; use super::meta::CargoMetadata; -/// data in [package.metadata.arch] +/// data in `[package.metadata.arch]` section #[derive(Clone, Debug, Default, RustcDecodable)] pub struct CargoArch { /// The maintainers of the package @@ -307,7 +309,7 @@ impl ToPackageConfig for Cargo { } -impl GeneratePackage for ArchConfig { +impl GeneratePackageConfig for ArchConfig { fn generate_package_config(&self) { self.generate_pkgbuild(); } diff --git a/src/config/core.rs b/src/config/core.rs index 6acc08e..e19862b 100644 --- a/src/config/core.rs +++ b/src/config/core.rs @@ -1,3 +1,5 @@ +//! Basic Rust package's config, modified from Cargo. + use super::meta::CargoMetadata; @@ -7,7 +9,7 @@ pub struct Cargo { pub package: CargoPackage, } -/// data in [package] +/// data in `[package]` section #[derive(Clone, Debug, RustcDecodable)] pub struct CargoPackage { pub name: String, @@ -24,10 +26,12 @@ pub struct CargoPackage { } +/// A trait for making specific platform package config's settings pub trait ToPackageConfig { fn to_config(&self) -> T; } -pub trait GeneratePackage { +/// A trait for generate specific platform package's config +pub trait GeneratePackageConfig { fn generate_package_config(&self); } diff --git a/src/config/meta.rs b/src/config/meta.rs index 782a85c..03a0ccd 100644 --- a/src/config/meta.rs +++ b/src/config/meta.rs @@ -1,7 +1,9 @@ +//! Metadata for different platform's package + use super::arch::CargoArch; -/// data in [package.metadata] +/// data in `[package.metadata]` section #[derive(Clone, Debug, Default, RustcDecodable)] pub struct CargoMetadata { pub arch: Option, diff --git a/src/config/mod.rs b/src/config/mod.rs index 4f4798e..7c6a797 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -1,3 +1,5 @@ +//! Config for specific platform's package. + pub mod core; pub mod meta; pub mod arch; diff --git a/src/main.rs b/src/main.rs index 0462914..526140c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,7 @@ +//! `cargo arch` is a Cargo plugin for making Arch Linux packages. +//! Packages' information is extract from `Cargo.toml`. +//! You can add additional information in `[package.metadata.arch]` section. + #![feature(custom_derive)] #[macro_use] @@ -7,13 +11,10 @@ extern crate rustc_serialize; use clap::App; -use std::process::Command; -use std::fs::File; -use std::io::Write; - pub mod config; +pub mod utils; -use config::GeneratePackage; +pub use utils::*; fn main() { @@ -25,51 +26,16 @@ fn main() { let yml = load_yaml!("arguments.yml"); let arguments = App::from_yaml(yml).get_matches(); let arguments = arguments.subcommand_matches("arch").unwrap(); - let build = arguments.value_of("build").unwrap(); + let build = arguments.value_of("build").unwrap().parse::().unwrap(); let install = arguments.is_present("install"); let syncdeps = arguments.is_present("syncdeps"); let force = arguments.is_present("force"); let mksrcinfo = arguments.is_present("mksrcinfo"); //////////////////// - // Generate PKGBUILD + // Build Arch Package //////////////////// - config::ArchConfig::new() - .generate_package_config(); - - if mksrcinfo { - let output = Command::new("makepkg") - .args(&["--printsrcinfo"]) - .output() - .expect("failed to generate .SRCINFO"); - - let mut file = File::create(".SRCINFO").unwrap(); - file.write_all(&output.stdout).unwrap(); - } - - //////////////////// - // Build Package - //////////////////// - - if build == "true" { - let mut args = vec![]; - - if install { - args.push("--install"); - } - if syncdeps { - args.push("--syncdeps"); - } - if force { - args.push("--force"); - } + build_arch_package(mksrcinfo, build, install, syncdeps, force); - Command::new("makepkg") - .args(&args) - .spawn() - .unwrap() - .wait() - .expect("failed to build package"); - } }