Fork channel

Create a new channel as a copy of main.

Rename channel

Rename main to:

Delete channel

Delete main? This cannot be undone.

main.rs
mod graph;

use graph::PijulGraph;
use clap::{Parser, Subcommand};
use libpijul::Base32;
use std::path::PathBuf;

#[derive(Parser)]
#[command(name = "pijul-graph")]
#[command(about = "Pijul repository history visualizer & analyzer", long_about = None)]
struct Cli {
    #[arg(short, long, value_name = "PATH", default_value = ".")]
    repo: PathBuf,

    #[command(subcommand)]
    command: Commands,
}

#[derive(Subcommand)]
enum Commands {
    /// 時系列順にパッチのカスタムログを表示します
    Log,
}

fn main() {
    let cli = Cli::parse();
    let mut pijul_graph = PijulGraph::new();

    if let Err(e) = pijul_graph.load_from_repo(&cli.repo) {
        eprintln!("\x1b[31;1mError loading repository:\x1b[0m {}", e);
        std::process::exit(1);
    }

    match cli.command {
        Commands::Log => {
            // 既存のログ表示(graphから情報を引く形にリファクタ)
            let mut nodes: Vec<_> = pijul_graph.graph.node_indices().map(|idx| &pijul_graph.graph[idx]).collect();
            nodes.sort_by(|a, b| b.timestamp.cmp(&a.timestamp));

            println!("\n\x1b[1m=== Pijul Custom Log (Total: {}) ===\x1b[0m\n", nodes.len());
            for node in nodes {
                println!("\x1b[38;5;214mChange\x1b[0m \x1b[1m{}\x1b[0m", node.hash.to_base32());
                println!("\x1b[32mAuthor:\x1b[0m {}", node.author);
                println!("\x1b[34mDate:\x1b[0m   {}", node.timestamp);
                println!("\n    {}\n", node.message);
                println!("\x1b[38;5;244m--------------------------------------------------------\x1b[0m");
            }
        }
    }
}