From bb8eaa687027c9b1b7f78c38692755ad0f537f7a Mon Sep 17 00:00:00 2001 From: "Hatter Jiang@Pixelbook" Date: Sun, 2 Aug 2020 15:34:10 +0800 Subject: [PATCH] feat: add pages/sync.crs --- pages/sync.crs | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 pages/sync.crs diff --git a/pages/sync.crs b/pages/sync.crs new file mode 100755 index 0000000..b0d1e83 --- /dev/null +++ b/pages/sync.crs @@ -0,0 +1,64 @@ +#!/usr/bin/env run-cargo-script + +use std::env; +use std::path::PathBuf; +use std::process::Command; + +fn main() -> Result<(), Box> { + if let Some(args_1) = env::args().nth(1) { + match args_1.as_str() { + "md" => {}, // TODO md + "ms" => {}, // TODO ms + _ => {}, // IGNORE + } + } + + print_info("Git Add All"); + Command::new("git").args(&["add", "."]).spawn()?.wait()?; + print_info("Git Commit All"); + Command::new("git").args(&["commit", "-a", "-m", "'auto sync'"]).spawn()?.wait()?; + print_info("Git Push"); + Command::new("git").args(&["push"]).spawn()?.wait()?; + print_info("Sync Server Repo"); + let page_name = match find_parents_exists_dir("page") { + Some(path) => path.file_name().unwrap().to_str().unwrap().to_owned(), None => { + print_warn("Cannot find page name!"); + return Ok(()); + }, + }; + let sync_url = "https://playsecurity.org/update_pages?".to_owned() + &page_name; + print_info(&format!("curl URL: {}", sync_url)); + Command::new("curl").args(&[sync_url]).spawn()?.wait()?; + + print_ok("Sync success!"); + Ok(()) +} + +// ------------------------------------------------------------------------------------ // + +pub fn find_parents_exists_dir(dir: &str) -> Option { + match PathBuf::from(".").canonicalize() { + Err(_) => None, + Ok(mut path) => loop { + if path.join(dir).is_dir() { return Some(path); } + if !path.pop() { return None;} + } + } +} + +const RED: &str = "\x1B[91m"; +const GREEN: &str = "\x1B[92m"; +const YELLOW: &str = "\x1B[93m"; +const BOLD: &str = "\x1B[1m"; +const UNDER: &str = "\x1B[4m"; +const END: &str = "\x1B[0m"; + +fn is_verbose() -> bool { if let Ok(v) = std::env::var("VERBOSE") { v == "1" } else { false } } + +fn exit_with_error() -> ! { std::process::exit(1) } +fn exit_with_error_message(msg: &str) -> ! { print_error(msg); exit_with_error() } + +fn print_info (msg: &str) { println!("{b}[INFO ]{e} {m}", b = BOLD, e = END, m = msg); } +fn print_ok (msg: &str) { println!("{g}{b}[OK ]{e} {g}{m}{e}", g = GREEN, b = BOLD, e = END, m = msg); } +fn print_warn (msg: &str) { println!("{y}{b}[WARN ]{e} {y}{m}{e}", y = YELLOW, b = BOLD, e = END, m = msg); } +fn print_error(msg: &str) { println!("{r}{b}[ERROR]{e} {r}{m}{e}", r = RED, b = BOLD, e = END, m = msg); }