Compare commits
No commits in common. "main" and "v0.5.0" have entirely different histories.
|
|
@ -6,14 +6,13 @@ jobs:
|
||||||
build_deb:
|
build_deb:
|
||||||
name: Build .deb package
|
name: Build .deb package
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
|
||||||
RUSTFLAGS: "-C strip=debuginfo"
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
- run: cargo install cargo-deb
|
- run: cargo install cargo-deb
|
||||||
- run: cargo build --release
|
- run: cargo build --release
|
||||||
|
- run: ./prepare-release.sh
|
||||||
- run: cargo deb
|
- run: cargo deb
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
path: target/debian/*.deb
|
path: target/debian/*.deb
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
on:
|
on: push
|
||||||
- push
|
|
||||||
- workflow_dispatch
|
|
||||||
|
|
||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
|
|
@ -9,7 +7,7 @@ jobs:
|
||||||
name: lint and test
|
name: lint and test
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
components: clippy, rustfmt
|
components: clippy, rustfmt
|
||||||
|
|
@ -23,8 +21,6 @@ jobs:
|
||||||
needs: lint_and_test
|
needs: lint_and_test
|
||||||
if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/build-') }}
|
if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/build-') }}
|
||||||
name: Build package
|
name: Build package
|
||||||
env:
|
|
||||||
RUSTFLAGS: "-C strip=debuginfo"
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os:
|
os:
|
||||||
|
|
@ -33,21 +29,15 @@ jobs:
|
||||||
# - windows-latest
|
# - windows-latest
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v3
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
- uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
- uses: Swatinem/rust-cache@v2
|
- uses: Swatinem/rust-cache@v2
|
||||||
- run: cargo build --release
|
- run: cargo build --release
|
||||||
- name: prepare release artifact
|
- run: ./prepare-release.sh
|
||||||
shell: bash
|
- uses: actions/upload-artifact@v3
|
||||||
run: |
|
|
||||||
mkdir -p target/{bin,man}
|
|
||||||
cp target/release/*.1 target/man
|
|
||||||
cp target/release/git-{mob,solo,{add,edit,delete}-coauthor} target/bin
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: git-mob-${{ matrix.os }}
|
name: git-mob-${{ matrix.os }}
|
||||||
path: |
|
path: |
|
||||||
target/bin
|
ci-release/git-mob
|
||||||
target/man
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
32
Cargo.toml
32
Cargo.toml
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "git-mob"
|
name = "git-mob"
|
||||||
version = "0.6.0"
|
version = "0.5.0"
|
||||||
authors = [ "Martin Frost <martin@frost.ws>" ]
|
authors = [ "Martin Frost <martin@frost.ws>" ]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A CLI tool for social coding."
|
description = "A CLI tool for social coding."
|
||||||
|
|
@ -10,17 +10,17 @@ repository = "https://github.com/Frost/git-mob"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
git2 = { version = "0.19", default-features = false }
|
dirs = "4.0"
|
||||||
|
git2 = { version = "0.17", default-features = false }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
clap = { version = "~4.5", features = ["derive"] }
|
clap = { version = "~4.2", features = ["derive"] }
|
||||||
clap_mangen = "~0.2"
|
clap_mangen = "~0.2"
|
||||||
env_home = "0.1.0"
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
clap_mangen = "~0.2"
|
clap_mangen = "~0.2"
|
||||||
clap = { version = "~4.5", features = ["derive"]}
|
clap = { version = "~4.2", features = ["derive"]}
|
||||||
clap_complete = "~4.5"
|
clap_complete = "~4.2"
|
||||||
|
|
||||||
[package.metadata.deb]
|
[package.metadata.deb]
|
||||||
name = "git-mob"
|
name = "git-mob"
|
||||||
|
|
@ -30,15 +30,15 @@ priority = "optional"
|
||||||
extended-description = """\
|
extended-description = """\
|
||||||
A set of git subcommands for including co-authors to your git commits."""
|
A set of git subcommands for including co-authors to your git commits."""
|
||||||
assets = [
|
assets = [
|
||||||
["target/release/git-mob", "usr/bin/", "755"],
|
["ci-release/bin/git-mob", "usr/bin/", "755"],
|
||||||
["target/release/git-solo", "usr/bin/", "755"],
|
["ci-release/bin/git-solo", "usr/bin/", "755"],
|
||||||
["target/release/git-add-coauthor", "usr/bin/", "755"],
|
["ci-release/bin/git-add-coauthor", "usr/bin/", "755"],
|
||||||
["target/release/git-edit-coauthor", "usr/bin/", "755"],
|
["ci-release/bin/git-edit-coauthor", "usr/bin/", "755"],
|
||||||
["target/release/git-delete-coauthor", "usr/bin/", "755"],
|
["ci-release/bin/git-delete-coauthor", "usr/bin/", "755"],
|
||||||
["target/release/git-mob.1", "usr/share/man/man1/", "644"],
|
["ci-release/man/git-mob.1.gz", "usr/share/man/man1/", "644"],
|
||||||
["target/release/git-solo.1", "usr/share/man/man1/", "644"],
|
["ci-release/man/git-solo.1.gz", "usr/share/man/man1/", "644"],
|
||||||
["target/release/git-add-coauthor.1", "usr/share/man/man1/", "644"],
|
["ci-release/man/git-add-coauthor.1.gz", "usr/share/man/man1/", "644"],
|
||||||
["target/release/git-edit-coauthor.1", "usr/share/man/man1/", "644"],
|
["ci-release/man/git-edit-coauthor.1.gz", "usr/share/man/man1/", "644"],
|
||||||
["target/release/git-delete-coauthor.1", "usr/share/man/man1/", "644"],
|
["ci-release/man/git-delete-coauthor.1.gz", "usr/share/man/man1/", "644"],
|
||||||
["README.md", "usr/share/doc/git-mob/README", "644"],
|
["README.md", "usr/share/doc/git-mob/README", "644"],
|
||||||
]
|
]
|
||||||
|
|
|
||||||
56
build.rs
56
build.rs
|
|
@ -6,26 +6,44 @@ use std::path::Path;
|
||||||
#[path = "src/cli.rs"]
|
#[path = "src/cli.rs"]
|
||||||
mod cli;
|
mod cli;
|
||||||
|
|
||||||
macro_rules! generate_manpage {
|
|
||||||
($struct:ident) => {
|
|
||||||
let target_dir = env::var("CARGO_TARGET_DIR").unwrap_or("target".to_string());
|
|
||||||
let output_dir = Path::new(&target_dir).join(env::var("PROFILE").unwrap());
|
|
||||||
|
|
||||||
let cmd = cli::$struct::command();
|
|
||||||
let cmd_name = format!("{}.1", cmd.get_name());
|
|
||||||
let man = Man::new(cmd);
|
|
||||||
let mut buffer: Vec<u8> = Default::default();
|
|
||||||
man.render(&mut buffer)?;
|
|
||||||
std::fs::write(output_dir.join(cmd_name), buffer)?;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() -> std::io::Result<()> {
|
fn main() -> std::io::Result<()> {
|
||||||
generate_manpage!(GitMob);
|
let target_dir = env::var("CARGO_TARGET_DIR").unwrap_or("target".to_string());
|
||||||
generate_manpage!(GitSolo);
|
let output_dir = Path::new(&target_dir).join(env::var("PROFILE").unwrap());
|
||||||
generate_manpage!(GitAddCoauthor);
|
|
||||||
generate_manpage!(GitEditCoauthor);
|
// git-mob docs
|
||||||
generate_manpage!(GitDeleteCoauthor);
|
let cmd = cli::GitMob::command();
|
||||||
|
let man = Man::new(cmd);
|
||||||
|
let mut buffer: Vec<u8> = Default::default();
|
||||||
|
man.render(&mut buffer)?;
|
||||||
|
std::fs::write(output_dir.join("git-mob.1"), buffer)?;
|
||||||
|
|
||||||
|
// git-solo docs
|
||||||
|
let cmd = cli::GitSolo::command();
|
||||||
|
let man = Man::new(cmd);
|
||||||
|
let mut buffer: Vec<u8> = Default::default();
|
||||||
|
man.render(&mut buffer)?;
|
||||||
|
std::fs::write(output_dir.join("git-solo.1"), buffer)?;
|
||||||
|
|
||||||
|
// git-add-coauthor docs
|
||||||
|
let cmd = cli::GitAddCoauthor::command();
|
||||||
|
let man = Man::new(cmd);
|
||||||
|
let mut buffer: Vec<u8> = Default::default();
|
||||||
|
man.render(&mut buffer)?;
|
||||||
|
std::fs::write(output_dir.join("git-add-coauthor.1"), buffer)?;
|
||||||
|
|
||||||
|
// git-edit-coauthor docs
|
||||||
|
let cmd = cli::GitEditCoauthor::command();
|
||||||
|
let man = Man::new(cmd);
|
||||||
|
let mut buffer: Vec<u8> = Default::default();
|
||||||
|
man.render(&mut buffer)?;
|
||||||
|
std::fs::write(output_dir.join("git-edit-coauthor.1"), buffer)?;
|
||||||
|
|
||||||
|
// git-delete-coauthor docs
|
||||||
|
let cmd = cli::GitDeleteCoauthor::command();
|
||||||
|
let man = Man::new(cmd);
|
||||||
|
let mut buffer: Vec<u8> = Default::default();
|
||||||
|
man.render(&mut buffer)?;
|
||||||
|
std::fs::write(output_dir.join("git-delete-coauthor.1"), buffer)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# git-add-coauthor
|
||||||
|
|
||||||
|
<!-- `$ cargo run --bin git-add-coauthor -- --help` -->
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# git-delete-coauthor
|
||||||
|
|
||||||
|
<!-- `$ cargo run --bin git-delete-coauthor -- --help` -->
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# git-edit-coauthor
|
||||||
|
|
||||||
|
<!-- `$ cargo run --bin git-edit-coauthor -- --help` -->
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# git-mob
|
||||||
|
|
||||||
|
<!-- `$ cargo run --bin git-mob -- --help` -->
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# git-solo
|
||||||
|
|
||||||
|
<!-- `$ cargo run --bin git-solo -- --help` -->
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
OUT_DIR=ci-release/git-mob
|
||||||
|
mkdir -p $OUT_DIR/{bin,man}
|
||||||
|
|
||||||
|
for binary in git-{mob,solo,{add,edit,delete}-coauthor}; do
|
||||||
|
gzip --to-stdout target/release/$binary.1 > $OUT_DIR/man/$binary.gz
|
||||||
|
cp target/release/$binary $OUT_DIR/bin/$binary
|
||||||
|
cp README.md $OUT_DIR/README.md
|
||||||
|
done
|
||||||
|
|
@ -25,7 +25,7 @@ fn main() {
|
||||||
|
|
||||||
fn list_coauthors() {
|
fn list_coauthors() {
|
||||||
for (abbrev, author) in &get_available_coauthors() {
|
for (abbrev, author) in &get_available_coauthors() {
|
||||||
println!("{abbrev}\t{author}");
|
println!("{}\t{}", abbrev, author);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ fn override_main_author(initials: &str) {
|
||||||
match all_authors.get(initials) {
|
match all_authors.get(initials) {
|
||||||
Some(new_main_author) => set_main_author(new_main_author),
|
Some(new_main_author) => set_main_author(new_main_author),
|
||||||
None => {
|
None => {
|
||||||
eprintln!("Error: author with initials {initials} not found");
|
eprintln!("Error: author with initials {} not found", initials);
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -51,11 +51,11 @@ fn write_coauthors_to_gitmessage_file(coauthor_initials: &[String]) {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
println!("{}", get_main_author());
|
println!("{}", get_main_author());
|
||||||
for author in &coauthors {
|
for author in &coauthors {
|
||||||
println!("{author}");
|
println!("{}", author);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
eprintln!("Error writing to .gitmessage template: {e}");
|
eprintln!("Error writing to .gitmessage template: {}", e);
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -69,7 +69,7 @@ fn select_coauthors(coauthor_initials: &[String]) -> Vec<Author> {
|
||||||
match all_coauthors.get(initial) {
|
match all_coauthors.get(initial) {
|
||||||
Some(coauthor) => coauthors.push(coauthor.clone()),
|
Some(coauthor) => coauthors.push(coauthor.clone()),
|
||||||
None => {
|
None => {
|
||||||
eprintln!("Error: author with initials {initial} not found");
|
eprintln!("Error: author with initials {} not found", initial);
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use std::fs::File;
|
||||||
fn main() {
|
fn main() {
|
||||||
let _opt = cli::GitSolo::parse();
|
let _opt = cli::GitSolo::parse();
|
||||||
let main_author = get_main_author();
|
let main_author = get_main_author();
|
||||||
println!("{main_author}");
|
println!("{}", main_author);
|
||||||
|
|
||||||
with_gitmessage_template_path_or_exit(|path| {
|
with_gitmessage_template_path_or_exit(|path| {
|
||||||
let _template = File::create(path);
|
let _template = File::create(path);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use env_home::env_home_dir as home_dir;
|
use dirs::home_dir;
|
||||||
use git2::{Config, Repository};
|
use git2::{Config, Repository};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue