Compare commits
No commits in common. "main" and "v0.1.0" have entirely different histories.
|
|
@ -1,16 +0,0 @@
|
||||||
# To get started with Dependabot version updates, you'll need to specify which
|
|
||||||
# package ecosystems to update and where the package manifests are located.
|
|
||||||
# Please see the documentation for all configuration options:
|
|
||||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "cargo"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
# Check for updates to GitHub Actions every week
|
|
||||||
interval: "weekly"
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
on: workflow_dispatch
|
|
||||||
|
|
||||||
name: Build packages
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_deb:
|
|
||||||
name: Build .deb package
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
env:
|
|
||||||
RUSTFLAGS: "-C strip=debuginfo"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- run: cargo install cargo-deb
|
|
||||||
- run: cargo build --release
|
|
||||||
- run: cargo deb
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
path: target/debian/*.deb
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
on:
|
|
||||||
- push
|
|
||||||
- workflow_dispatch
|
|
||||||
|
|
||||||
name: CI
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
lint_and_test:
|
|
||||||
name: lint and test
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
with:
|
|
||||||
components: clippy, rustfmt
|
|
||||||
- uses: Swatinem/rust-cache@v2
|
|
||||||
- run: cargo clippy --all-features -- -D warnings
|
|
||||||
- run: cargo check --workspace --all-features
|
|
||||||
- run: cargo test --all-targets
|
|
||||||
- run: cargo fmt --all -- --check
|
|
||||||
|
|
||||||
build_package:
|
|
||||||
needs: lint_and_test
|
|
||||||
if: ${{ github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/build-') }}
|
|
||||||
name: Build package
|
|
||||||
env:
|
|
||||||
RUSTFLAGS: "-C strip=debuginfo"
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os:
|
|
||||||
- ubuntu-latest
|
|
||||||
- macos-latest
|
|
||||||
# - windows-latest
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
- uses: Swatinem/rust-cache@v2
|
|
||||||
- run: cargo build --release
|
|
||||||
- name: prepare release artifact
|
|
||||||
shell: bash
|
|
||||||
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:
|
|
||||||
name: git-mob-${{ matrix.os }}
|
|
||||||
path: |
|
|
||||||
target/bin
|
|
||||||
target/man
|
|
||||||
|
|
@ -1,367 +1,120 @@
|
||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anstream"
|
name = "autocfg"
|
||||||
version = "0.6.19"
|
version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933"
|
checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
|
||||||
dependencies = [
|
|
||||||
"anstyle",
|
|
||||||
"anstyle-parse",
|
|
||||||
"anstyle-query",
|
|
||||||
"anstyle-wincon",
|
|
||||||
"colorchoice",
|
|
||||||
"is_terminal_polyfill",
|
|
||||||
"utf8parse",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anstyle"
|
|
||||||
version = "1.0.11"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anstyle-parse"
|
|
||||||
version = "0.2.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
|
|
||||||
dependencies = [
|
|
||||||
"utf8parse",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anstyle-query"
|
|
||||||
version = "1.1.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9"
|
|
||||||
dependencies = [
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anstyle-wincon"
|
|
||||||
version = "3.0.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882"
|
|
||||||
dependencies = [
|
|
||||||
"anstyle",
|
|
||||||
"once_cell_polyfill",
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "2.9.1"
|
version = "1.2.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
|
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.2.27"
|
version = "1.0.54"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc"
|
checksum = "7bbb73db36c1246e9034e307d0fba23f9a2e251faa47ade70c1bd252220c8311"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jobserver",
|
"jobserver",
|
||||||
"libc",
|
|
||||||
"shlex",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "1.0.1"
|
version = "0.1.10"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
|
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap"
|
|
||||||
version = "4.5.40"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f"
|
|
||||||
dependencies = [
|
|
||||||
"clap_builder",
|
|
||||||
"clap_derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_builder"
|
|
||||||
version = "4.5.40"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e"
|
|
||||||
dependencies = [
|
|
||||||
"anstream",
|
|
||||||
"anstyle",
|
|
||||||
"clap_lex",
|
|
||||||
"strsim",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_complete"
|
|
||||||
version = "4.5.54"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "aad5b1b4de04fead402672b48897030eec1f3bfe1550776322f59f6d6e6a5677"
|
|
||||||
dependencies = [
|
|
||||||
"clap",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_derive"
|
|
||||||
version = "4.5.40"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce"
|
|
||||||
dependencies = [
|
|
||||||
"heck",
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_lex"
|
|
||||||
version = "0.7.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "clap_mangen"
|
|
||||||
version = "0.2.27"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fc33c849748320656a90832f54a5eeecaa598e92557fb5dedebc3355746d31e4"
|
|
||||||
dependencies = [
|
|
||||||
"clap",
|
|
||||||
"roff",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "colorchoice"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "displaydoc"
|
|
||||||
version = "0.2.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "env_home"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "form_urlencoded"
|
|
||||||
version = "1.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
|
|
||||||
dependencies = [
|
|
||||||
"percent-encoding",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "getrandom"
|
|
||||||
version = "0.3.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"libc",
|
|
||||||
"r-efi",
|
|
||||||
"wasi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "git-mob"
|
|
||||||
version = "0.5.0"
|
|
||||||
dependencies = [
|
|
||||||
"clap",
|
|
||||||
"clap_complete",
|
|
||||||
"clap_mangen",
|
|
||||||
"env_home",
|
|
||||||
"git2",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "git2"
|
name = "git2"
|
||||||
version = "0.19.0"
|
version = "0.13.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724"
|
checksum = "11e4b2082980e751c4bf4273e9cbb4a02c655729c8ee8a79f66cad03c8f4d31e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"libc",
|
"libc",
|
||||||
"libgit2-sys",
|
"libgit2-sys",
|
||||||
"log",
|
"log",
|
||||||
|
"openssl-probe",
|
||||||
|
"openssl-sys",
|
||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "heck"
|
name = "git_mob"
|
||||||
version = "0.5.0"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_collections"
|
|
||||||
version = "2.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"git2",
|
||||||
"potential_utf",
|
"serde_json",
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_locale_core"
|
|
||||||
version = "2.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"litemap",
|
|
||||||
"tinystr",
|
|
||||||
"writeable",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_normalizer"
|
|
||||||
version = "2.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_collections",
|
|
||||||
"icu_normalizer_data",
|
|
||||||
"icu_properties",
|
|
||||||
"icu_provider",
|
|
||||||
"smallvec",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_normalizer_data"
|
|
||||||
version = "2.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_properties"
|
|
||||||
version = "2.0.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_collections",
|
|
||||||
"icu_locale_core",
|
|
||||||
"icu_properties_data",
|
|
||||||
"icu_provider",
|
|
||||||
"potential_utf",
|
|
||||||
"zerotrie",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_properties_data"
|
|
||||||
version = "2.0.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_provider"
|
|
||||||
version = "2.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_locale_core",
|
|
||||||
"stable_deref_trait",
|
|
||||||
"tinystr",
|
|
||||||
"writeable",
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerotrie",
|
|
||||||
"zerovec",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "1.0.3"
|
version = "0.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
|
checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"idna_adapter",
|
"matches",
|
||||||
"smallvec",
|
"unicode-bidi",
|
||||||
"utf8_iter",
|
"unicode-normalization",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "idna_adapter"
|
|
||||||
version = "1.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
|
|
||||||
dependencies = [
|
|
||||||
"icu_normalizer",
|
|
||||||
"icu_properties",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "is_terminal_polyfill"
|
|
||||||
version = "1.70.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.15"
|
version = "0.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jobserver"
|
name = "jobserver"
|
||||||
version = "0.1.33"
|
version = "0.1.21"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
|
checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom",
|
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.174"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
|
checksum = "3baa92041a6fec78c687fa0cc2b3fae8884f743d672cf551bed1d6dac6988d0f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libgit2-sys"
|
name = "libgit2-sys"
|
||||||
version = "0.17.0+1.8.1"
|
version = "0.12.6+1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "10472326a8a6477c3c20a64547b0059e4b0d086869eee31e6d7da728a8eb7224"
|
checksum = "bf81b43f9b45ab07897a780c9b7b26b1504497e469c7a78162fc29e3b8b1c1b3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
|
"libssh2-sys",
|
||||||
"libz-sys",
|
"libz-sys",
|
||||||
|
"openssl-sys",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libz-sys"
|
name = "libssh2-sys"
|
||||||
version = "1.1.22"
|
version = "0.2.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8b70e7a7df205e92a1a4cd9aaae7898dac0aa555503cc0a649494d0d60e7651d"
|
checksum = "d45f516b9b19ea6c940b9f36d36734062a153a2b4cc9ef31d82c54bb9780f525"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"libc",
|
||||||
|
"libz-sys",
|
||||||
|
"openssl-sys",
|
||||||
|
"pkg-config",
|
||||||
|
"vcpkg",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libz-sys"
|
||||||
|
version = "1.0.25"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
|
|
@ -369,381 +122,112 @@ dependencies = [
|
||||||
"vcpkg",
|
"vcpkg",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "litemap"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.27"
|
version = "0.4.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "matches"
|
||||||
version = "2.7.5"
|
version = "0.1.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
|
checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell_polyfill"
|
name = "openssl-probe"
|
||||||
version = "1.70.1"
|
version = "0.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
|
checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "openssl-sys"
|
||||||
|
version = "0.9.56"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f02309a7f127000ed50594f0b50ecc69e7c654e16d41b4e8156d1b3df8e0b52e"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"cc",
|
||||||
|
"libc",
|
||||||
|
"pkg-config",
|
||||||
|
"vcpkg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "percent-encoding"
|
name = "percent-encoding"
|
||||||
version = "2.3.1"
|
version = "2.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
|
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pkg-config"
|
name = "pkg-config"
|
||||||
version = "0.3.32"
|
version = "0.3.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
|
checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "potential_utf"
|
|
||||||
version = "0.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
|
|
||||||
dependencies = [
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro2"
|
|
||||||
version = "1.0.95"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
|
||||||
dependencies = [
|
|
||||||
"unicode-ident",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "quote"
|
|
||||||
version = "1.0.40"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "r-efi"
|
|
||||||
version = "5.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "roff"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.20"
|
version = "1.0.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
checksum = "ed3d612bc64430efeb3f7ee6ef26d590dce0c43249217bddc62112540c7941e1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.219"
|
version = "1.0.110"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
checksum = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c"
|
||||||
dependencies = [
|
|
||||||
"serde_derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde_derive"
|
|
||||||
version = "1.0.219"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.140"
|
version = "1.0.53"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
|
checksum = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"memchr",
|
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "shlex"
|
|
||||||
version = "1.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.15.1"
|
version = "1.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
checksum = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stable_deref_trait"
|
name = "unicode-bidi"
|
||||||
version = "1.2.0"
|
version = "0.3.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "strsim"
|
|
||||||
version = "0.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "syn"
|
|
||||||
version = "2.0.104"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"matches",
|
||||||
"quote",
|
|
||||||
"unicode-ident",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "synstructure"
|
name = "unicode-normalization"
|
||||||
version = "0.13.2"
|
version = "0.1.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"smallvec",
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tinystr"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-ident"
|
|
||||||
version = "1.0.18"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "2.5.4"
|
version = "2.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
|
checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"form_urlencoded",
|
|
||||||
"idna",
|
"idna",
|
||||||
|
"matches",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "utf8_iter"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "utf8parse"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vcpkg"
|
name = "vcpkg"
|
||||||
version = "0.2.15"
|
version = "0.2.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasi"
|
|
||||||
version = "0.14.2+wasi-0.2.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
|
|
||||||
dependencies = [
|
|
||||||
"wit-bindgen-rt",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-sys"
|
|
||||||
version = "0.59.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
|
||||||
dependencies = [
|
|
||||||
"windows-targets",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-targets"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
|
||||||
dependencies = [
|
|
||||||
"windows_aarch64_gnullvm",
|
|
||||||
"windows_aarch64_msvc",
|
|
||||||
"windows_i686_gnu",
|
|
||||||
"windows_i686_gnullvm",
|
|
||||||
"windows_i686_msvc",
|
|
||||||
"windows_x86_64_gnu",
|
|
||||||
"windows_x86_64_gnullvm",
|
|
||||||
"windows_x86_64_msvc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_gnullvm"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_msvc"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnu"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnullvm"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_msvc"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnu"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnullvm"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_msvc"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wit-bindgen-rt"
|
|
||||||
version = "0.39.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "writeable"
|
|
||||||
version = "0.6.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "yoke"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
"stable_deref_trait",
|
|
||||||
"yoke-derive",
|
|
||||||
"zerofrom",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "yoke-derive"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
"synstructure",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerofrom"
|
|
||||||
version = "0.1.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
|
|
||||||
dependencies = [
|
|
||||||
"zerofrom-derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerofrom-derive"
|
|
||||||
version = "0.1.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
"synstructure",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerotrie"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerovec"
|
|
||||||
version = "0.11.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
|
|
||||||
dependencies = [
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerovec-derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerovec-derive"
|
|
||||||
version = "0.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
|
||||||
45
Cargo.toml
45
Cargo.toml
|
|
@ -1,44 +1,11 @@
|
||||||
[package]
|
[package]
|
||||||
name = "git-mob"
|
name = "git_mob"
|
||||||
version = "0.6.0"
|
version = "0.1.0"
|
||||||
authors = [ "Martin Frost <martin@frost.ws>" ]
|
authors = ["Martin Frost <martin@frost.ws>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "A CLI tool for social coding."
|
|
||||||
license = "MIT"
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
homepage = "https://github.com/Frost/git-mob"
|
|
||||||
repository = "https://github.com/Frost/git-mob"
|
|
||||||
readme = "README.md"
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
git2 = { version = "0.19", default-features = false }
|
git2 = "0.13"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
clap = { version = "~4.5", features = ["derive"] }
|
|
||||||
clap_mangen = "~0.2"
|
|
||||||
env_home = "0.1.0"
|
|
||||||
|
|
||||||
[build-dependencies]
|
|
||||||
clap_mangen = "~0.2"
|
|
||||||
clap = { version = "~4.5", features = ["derive"]}
|
|
||||||
clap_complete = "~4.5"
|
|
||||||
|
|
||||||
[package.metadata.deb]
|
|
||||||
name = "git-mob"
|
|
||||||
revision = "1"
|
|
||||||
section = "vcs"
|
|
||||||
priority = "optional"
|
|
||||||
extended-description = """\
|
|
||||||
A set of git subcommands for including co-authors to your git commits."""
|
|
||||||
assets = [
|
|
||||||
["target/release/git-mob", "usr/bin/", "755"],
|
|
||||||
["target/release/git-solo", "usr/bin/", "755"],
|
|
||||||
["target/release/git-add-coauthor", "usr/bin/", "755"],
|
|
||||||
["target/release/git-edit-coauthor", "usr/bin/", "755"],
|
|
||||||
["target/release/git-delete-coauthor", "usr/bin/", "755"],
|
|
||||||
["target/release/git-mob.1", "usr/share/man/man1/", "644"],
|
|
||||||
["target/release/git-solo.1", "usr/share/man/man1/", "644"],
|
|
||||||
["target/release/git-add-coauthor.1", "usr/share/man/man1/", "644"],
|
|
||||||
["target/release/git-edit-coauthor.1", "usr/share/man/man1/", "644"],
|
|
||||||
["target/release/git-delete-coauthor.1", "usr/share/man/man1/", "644"],
|
|
||||||
["README.md", "usr/share/doc/git-mob/README", "644"],
|
|
||||||
]
|
|
||||||
|
|
|
||||||
110
README.md
110
README.md
|
|
@ -1,110 +0,0 @@
|
||||||
# Git-mob
|
|
||||||
|
|
||||||
> A command-line tool for social coding
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This is a CLI tool for including your co-authors in your commits.
|
|
||||||
|
|
||||||
It is essentially a Rust clone of the [git-mob NPM package](https://www.npmjs.com/package/git-mob).
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
### MacOS
|
|
||||||
|
|
||||||
If you have [Homebrew](https://brew.sh) installed, you can install `git-mob` using my tap:
|
|
||||||
|
|
||||||
brew install frost/tap/git-mob
|
|
||||||
|
|
||||||
Otherwise, see the section on binary packages
|
|
||||||
|
|
||||||
### Binary packages for MacOS, Ubuntu, and Windows
|
|
||||||
|
|
||||||
Download the [latest release](https://github.com/Frost/git-mob/releases/latest) and extract it somewhere so that the binaries end up in your `$PATH`.
|
|
||||||
|
|
||||||
### From source
|
|
||||||
|
|
||||||
Just run `cargo install git_mob` and you should be all set.
|
|
||||||
|
|
||||||
## A note on commit template and git-mob
|
|
||||||
|
|
||||||
`git-mob` _will_ currently override any existing `commit.template` setting
|
|
||||||
in any project where it is run. It does this in order to ensure that `git
|
|
||||||
commit` will pick up your current mob.
|
|
||||||
|
|
||||||
The future plan is to do something a bit smarter, like first detecting if the
|
|
||||||
repo already has a `commit.template` setting, and in that case, modify the
|
|
||||||
existing template by adding `Co-authored-by:` trailers to it, or something
|
|
||||||
similar.
|
|
||||||
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
* Add Alice, Bob, and yourself as a possible co-authors:
|
|
||||||
|
|
||||||
git add-coauthor a "Alice" alice@example.com
|
|
||||||
git add-coauthor b "bob" Bob@example.com
|
|
||||||
git add-coauthor me "me" myself.i@example.com
|
|
||||||
|
|
||||||
* Set Alice as co-author, making your mob consist of you and Alice:
|
|
||||||
|
|
||||||
git mob a
|
|
||||||
|
|
||||||
* Set both Alice and Bob as co-authors, making your mob consist of the three of you:
|
|
||||||
|
|
||||||
git mob a b
|
|
||||||
|
|
||||||
* Set Alice as the main author for any commits you make, since she is the one
|
|
||||||
doing most of the thinking anyway, and add yourself as a mob member:
|
|
||||||
|
|
||||||
git mob -o a b me
|
|
||||||
|
|
||||||
* Edit Bob's name, since you accidentally capitalized his email instead of his name:
|
|
||||||
|
|
||||||
git edit-coauthor b --name "Bob" --email bob@example.com
|
|
||||||
|
|
||||||
* Remove Bob as a possible co-author:
|
|
||||||
|
|
||||||
git delete-coauthor b
|
|
||||||
|
|
||||||
* List all available co-authors:
|
|
||||||
|
|
||||||
git mob -l
|
|
||||||
|
|
||||||
* Go back to coding by yourself again:
|
|
||||||
|
|
||||||
git solo
|
|
||||||
|
|
||||||
|
|
||||||
## Working features
|
|
||||||
|
|
||||||
* `git mob <co-author-initials>`
|
|
||||||
* `git add-coauthor <initials> "Co-author Name" <co-author-email-address>`
|
|
||||||
* `git -o <initials>` for overwriting the main author
|
|
||||||
* `git edit-coauthor [--name "Co-author Name"] [--email <co-author-email-address>]`
|
|
||||||
* `git delete-coauthor <initials>`
|
|
||||||
* `git mob -l`
|
|
||||||
* `git solo`
|
|
||||||
|
|
||||||
|
|
||||||
## TODO
|
|
||||||
|
|
||||||
There are some missing features from the original NPM package, that are yet to
|
|
||||||
be implemented, and then there is also a severe lack of tests and documentation.
|
|
||||||
|
|
||||||
|
|
||||||
### Missing features
|
|
||||||
|
|
||||||
* `git mob-print`
|
|
||||||
* `git suggest-coauthors`
|
|
||||||
* `--installTemplate` and `--uninstallTemplate` for prepare-commit-msg
|
|
||||||
|
|
||||||
|
|
||||||
## Why clone an existing, working CLI tool?
|
|
||||||
|
|
||||||
Basically, I was looking for some decent size project to write in Rust, and I
|
|
||||||
didn't have any other ideas.
|
|
||||||
|
|
||||||
The NPM package works just fine. There's just one thing that annoys me about it,
|
|
||||||
and that is that I have to install it in once for every node version that is
|
|
||||||
used in any repo I work in. With this approach, I only need to install it once.
|
|
||||||
31
build.rs
31
build.rs
|
|
@ -1,31 +0,0 @@
|
||||||
use clap::CommandFactory;
|
|
||||||
use clap_mangen::Man;
|
|
||||||
use std::env;
|
|
||||||
use std::path::Path;
|
|
||||||
|
|
||||||
#[path = "src/cli.rs"]
|
|
||||||
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<()> {
|
|
||||||
generate_manpage!(GitMob);
|
|
||||||
generate_manpage!(GitSolo);
|
|
||||||
generate_manpage!(GitAddCoauthor);
|
|
||||||
generate_manpage!(GitEditCoauthor);
|
|
||||||
generate_manpage!(GitDeleteCoauthor);
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
75
flake.lock
75
flake.lock
|
|
@ -1,75 +0,0 @@
|
||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"flake-utils": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1678901627,
|
|
||||||
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "numtide",
|
|
||||||
"repo": "flake-utils",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"naersk": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1671096816,
|
|
||||||
"narHash": "sha256-ezQCsNgmpUHdZANDCILm3RvtO1xH8uujk/+EqNvzIOg=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "naersk",
|
|
||||||
"rev": "d998160d6a076cfe8f9741e56aeec7e267e3e114",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "naersk",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1670507980,
|
|
||||||
"narHash": "sha256-riNZa0xzM1it3pzxciwALeMs+0CsBMWIW2FqulzK8vM=",
|
|
||||||
"path": "/nix/store/2i8zqmz2cqa0grjagw94z7g47199db9k-source",
|
|
||||||
"rev": "2787fc7d1e51404678614bf0fe92fc296746eec0",
|
|
||||||
"type": "path"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"id": "nixpkgs",
|
|
||||||
"type": "indirect"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_2": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1678875422,
|
|
||||||
"narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixpkgs-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils",
|
|
||||||
"naersk": "naersk",
|
|
||||||
"nixpkgs": "nixpkgs_2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
||||||
24
flake.nix
24
flake.nix
|
|
@ -1,24 +0,0 @@
|
||||||
{
|
|
||||||
inputs = {
|
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
|
||||||
naersk.url = "github:nix-community/naersk";
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = { self, flake-utils, naersk, nixpkgs }:
|
|
||||||
{
|
|
||||||
overlays.default = (final: prev:
|
|
||||||
let naersk' = final.callPackage naersk { };
|
|
||||||
in { git-mob = naersk'.buildPackage { src = ./.; }; });
|
|
||||||
} // flake-utils.lib.eachDefaultSystem (system:
|
|
||||||
let
|
|
||||||
pkgs = (import nixpkgs) {
|
|
||||||
inherit system;
|
|
||||||
overlays = [ self.overlays.default ];
|
|
||||||
};
|
|
||||||
in rec {
|
|
||||||
defaultPackage = pkgs.git-mob;
|
|
||||||
devShell =
|
|
||||||
pkgs.mkShell { nativeBuildInputs = with pkgs; [ rustc cargo ]; };
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
use clap::Parser;
|
|
||||||
use git_mob::{cli, parse_coauthors_file, write_coauthors_file, Author};
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let opt = cli::GitAddCoauthor::parse();
|
|
||||||
let mut authors = parse_coauthors_file().unwrap_or_default();
|
|
||||||
let new_author = Author {
|
|
||||||
name: opt.name,
|
|
||||||
email: opt.email,
|
|
||||||
};
|
|
||||||
|
|
||||||
authors.insert(opt.initials, new_author);
|
|
||||||
|
|
||||||
write_coauthors_file(authors);
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
use clap::Parser;
|
|
||||||
use git_mob::{cli, get_available_coauthors, write_coauthors_file};
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let opt = cli::GitDeleteCoauthor::parse();
|
|
||||||
let mut authors = get_available_coauthors();
|
|
||||||
authors.remove(&opt.initials);
|
|
||||||
write_coauthors_file(authors);
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +0,0 @@
|
||||||
use clap::Parser;
|
|
||||||
use git_mob::{cli, get_available_coauthors, write_coauthors_file, Author};
|
|
||||||
use std::process;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let opt = cli::GitDeleteCoauthor::parse();
|
|
||||||
|
|
||||||
let mut authors = get_available_coauthors();
|
|
||||||
|
|
||||||
if let Some(author) = authors.get(&opt.initials) {
|
|
||||||
let mut updated_author: Author = author.clone();
|
|
||||||
updated_author.name = opt.name;
|
|
||||||
updated_author.email = opt.email;
|
|
||||||
|
|
||||||
authors.insert(opt.initials, updated_author);
|
|
||||||
|
|
||||||
write_coauthors_file(authors);
|
|
||||||
} else {
|
|
||||||
eprintln!("No author found with initials {}", &opt.initials);
|
|
||||||
process::exit(1);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,79 +0,0 @@
|
||||||
use clap::Parser;
|
|
||||||
use git_mob::{
|
|
||||||
cli, ensure_commit_template_is_set, get_available_coauthors, get_main_author, set_main_author,
|
|
||||||
with_gitmessage_template_path_or_exit, Author,
|
|
||||||
};
|
|
||||||
use std::fmt::Write;
|
|
||||||
use std::fs;
|
|
||||||
use std::process;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let args = cli::GitMob::parse();
|
|
||||||
|
|
||||||
if args.list {
|
|
||||||
list_coauthors();
|
|
||||||
process::exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(initials) = args.overwrite {
|
|
||||||
override_main_author(&initials);
|
|
||||||
}
|
|
||||||
|
|
||||||
write_coauthors_to_gitmessage_file(&args.coauthors);
|
|
||||||
ensure_commit_template_is_set();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn list_coauthors() {
|
|
||||||
for (abbrev, author) in &get_available_coauthors() {
|
|
||||||
println!("{abbrev}\t{author}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn override_main_author(initials: &str) {
|
|
||||||
let all_authors = get_available_coauthors();
|
|
||||||
match all_authors.get(initials) {
|
|
||||||
Some(new_main_author) => set_main_author(new_main_author),
|
|
||||||
None => {
|
|
||||||
eprintln!("Error: author with initials {initials} not found");
|
|
||||||
process::exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write_coauthors_to_gitmessage_file(coauthor_initials: &[String]) {
|
|
||||||
let coauthors = select_coauthors(coauthor_initials);
|
|
||||||
let mut content = String::from("\n\n");
|
|
||||||
for author in &coauthors {
|
|
||||||
_ = writeln!(content, "Co-authored-by: {}", &author.to_string());
|
|
||||||
}
|
|
||||||
|
|
||||||
with_gitmessage_template_path_or_exit(|path| match fs::write(path, content) {
|
|
||||||
Ok(_) => {
|
|
||||||
println!("{}", get_main_author());
|
|
||||||
for author in &coauthors {
|
|
||||||
println!("{author}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
eprintln!("Error writing to .gitmessage template: {e}");
|
|
||||||
process::exit(1);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fn select_coauthors(coauthor_initials: &[String]) -> Vec<Author> {
|
|
||||||
let all_coauthors = get_available_coauthors();
|
|
||||||
let mut coauthors: Vec<Author> = Vec::new();
|
|
||||||
|
|
||||||
for initial in coauthor_initials {
|
|
||||||
match all_coauthors.get(initial) {
|
|
||||||
Some(coauthor) => coauthors.push(coauthor.clone()),
|
|
||||||
None => {
|
|
||||||
eprintln!("Error: author with initials {initial} not found");
|
|
||||||
process::exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
coauthors
|
|
||||||
}
|
|
||||||
|
|
@ -1,16 +1,32 @@
|
||||||
use clap::Parser;
|
|
||||||
use git_mob::{
|
|
||||||
cli, ensure_commit_template_is_set, get_main_author, with_gitmessage_template_path_or_exit,
|
|
||||||
};
|
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
use std::process;
|
||||||
|
use git2::{Config, Repository};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let _opt = cli::GitSolo::parse();
|
println!("{}", get_main_author());
|
||||||
let main_author = get_main_author();
|
|
||||||
println!("{main_author}");
|
|
||||||
|
|
||||||
with_gitmessage_template_path_or_exit(|path| {
|
match Repository::open_from_env() {
|
||||||
let _template = File::create(path);
|
Ok(repo) => {
|
||||||
});
|
truncate_gitmessage_template(repo);
|
||||||
ensure_commit_template_is_set();
|
}
|
||||||
|
Err(_e) => {
|
||||||
|
eprintln!("Not in a git repository");
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_main_author() -> String {
|
||||||
|
let cfg = Config::open_default().unwrap();
|
||||||
|
let name = cfg.get_entry("user.name").unwrap();
|
||||||
|
let name = name.value().unwrap();
|
||||||
|
let email = cfg.get_entry("user.email").unwrap();
|
||||||
|
let email = email.value().unwrap();
|
||||||
|
|
||||||
|
format!("{} <{}>", name, email)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn truncate_gitmessage_template(repo: Repository) {
|
||||||
|
let template_path = repo.path().join(".gitmessage");
|
||||||
|
let _template = File::create(template_path);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
56
src/cli.rs
56
src/cli.rs
|
|
@ -1,56 +0,0 @@
|
||||||
use clap::Parser;
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
|
||||||
#[clap(version, name = "git-mob")]
|
|
||||||
/// Assemble a group of co-authors to help you on your coding quest
|
|
||||||
pub struct GitMob {
|
|
||||||
/// Prints list of available co-authors
|
|
||||||
#[clap(short, long)]
|
|
||||||
pub list: bool,
|
|
||||||
/// Overwrite the main author
|
|
||||||
#[clap(short, long)]
|
|
||||||
pub overwrite: Option<String>,
|
|
||||||
/// A list of co-author initials
|
|
||||||
pub coauthors: Vec<String>,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
|
||||||
#[clap(name = "git-add-coauthor", version)]
|
|
||||||
/// Add a co-author to your list of available co-authors
|
|
||||||
pub struct GitAddCoauthor {
|
|
||||||
/// Co-author initials
|
|
||||||
pub initials: String,
|
|
||||||
/// The name of the co-author, in quotes, e.g. "Foo Bar"
|
|
||||||
pub name: String,
|
|
||||||
/// The email of the co-author
|
|
||||||
pub email: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
|
||||||
#[clap(name = "git-edit-coauthor", version)]
|
|
||||||
/// Edit a co-author in your list of available co-authors
|
|
||||||
pub struct GitEditCoauthor {
|
|
||||||
/// Co-author initials
|
|
||||||
pub initials: String,
|
|
||||||
/// The name of the co-author, in quotes, e.g. "Foo Bar"
|
|
||||||
pub name: String,
|
|
||||||
/// The email of the co-author
|
|
||||||
pub email: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
|
||||||
#[clap(name = "git-delete-coauthor", version)]
|
|
||||||
/// Delete a co-author from your list of available co-authors
|
|
||||||
pub struct GitDeleteCoauthor {
|
|
||||||
/// Co-author initials
|
|
||||||
pub initials: String,
|
|
||||||
/// The name of the co-author, in quotes, e.g. "Foo Bar"
|
|
||||||
pub name: String,
|
|
||||||
/// The email of the co-author
|
|
||||||
pub email: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Parser, Debug)]
|
|
||||||
#[clap(name = "git-solo", version)]
|
|
||||||
/// Disband the mob and continue working solo.
|
|
||||||
pub struct GitSolo {}
|
|
||||||
118
src/lib.rs
118
src/lib.rs
|
|
@ -1,118 +0,0 @@
|
||||||
use env_home::env_home_dir as home_dir;
|
|
||||||
use git2::{Config, Repository};
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use std::collections::BTreeMap;
|
|
||||||
use std::fmt;
|
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
use std::error::Error;
|
|
||||||
use std::fs::File;
|
|
||||||
use std::io::BufReader;
|
|
||||||
use std::process;
|
|
||||||
use std::string::String;
|
|
||||||
|
|
||||||
pub mod cli;
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
||||||
pub struct Author {
|
|
||||||
pub name: String,
|
|
||||||
pub email: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for Author {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
||||||
write!(f, "{} <{}>", self.name, self.email)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_main_author() -> Author {
|
|
||||||
let cfg = match Repository::open_from_env() {
|
|
||||||
Ok(repo) => repo.config().unwrap(),
|
|
||||||
Err(_e) => Config::open_default().unwrap(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let name = cfg.get_entry("user.name").unwrap();
|
|
||||||
let email = cfg.get_entry("user.email").unwrap();
|
|
||||||
|
|
||||||
Author {
|
|
||||||
name: name.value().unwrap().to_string(),
|
|
||||||
email: email.value().unwrap().to_string(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_main_author(author: &Author) {
|
|
||||||
with_git_repo_or_exit(|repo| {
|
|
||||||
let mut config = repo.config().unwrap();
|
|
||||||
config.set_str("user.name", &author.name).unwrap();
|
|
||||||
config.set_str("user.email", &author.email).unwrap();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn ensure_commit_template_is_set() {
|
|
||||||
with_git_repo_or_exit(|repo| {
|
|
||||||
let mut config = repo.config().unwrap();
|
|
||||||
let template_path = repo.path().join(".gitmessage");
|
|
||||||
if let Some(template_path) = template_path.to_str() {
|
|
||||||
config.set_str("commit.template", template_path).unwrap();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_available_coauthors() -> BTreeMap<String, Author> {
|
|
||||||
match parse_coauthors_file() {
|
|
||||||
Ok(coauthors) => coauthors,
|
|
||||||
Err(e) => {
|
|
||||||
eprintln!("{e:?}");
|
|
||||||
BTreeMap::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn parse_coauthors_file() -> Result<BTreeMap<String, Author>, Box<dyn Error>> {
|
|
||||||
let coauthors_path = coauthors_file_path();
|
|
||||||
let coauthors_file = File::open(coauthors_path)?;
|
|
||||||
let reader = BufReader::new(coauthors_file);
|
|
||||||
|
|
||||||
let json_data: serde_json::Value = serde_json::from_reader(reader)?;
|
|
||||||
|
|
||||||
match json_data.get("coauthors") {
|
|
||||||
Some(coauthors) => Ok(serde_json::from_value(coauthors.clone()).unwrap()),
|
|
||||||
None => Ok(BTreeMap::new()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn with_git_repo_or_exit<F: FnOnce(Repository)>(f: F) {
|
|
||||||
match Repository::open_from_env() {
|
|
||||||
Ok(repo) => {
|
|
||||||
f(repo);
|
|
||||||
}
|
|
||||||
Err(_e) => {
|
|
||||||
eprintln!("Not in a git repository");
|
|
||||||
process::exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_gitmessage_template_path_or_exit<F: FnOnce(std::path::PathBuf)>(f: F) {
|
|
||||||
with_git_repo_or_exit(|repo| {
|
|
||||||
let path = repo.path().join(".gitmessage");
|
|
||||||
f(path);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn write_coauthors_file(authors: BTreeMap<String, Author>) {
|
|
||||||
let mut wrapper_tree = BTreeMap::new();
|
|
||||||
wrapper_tree.insert("coauthors", authors);
|
|
||||||
let json_data = serde_json::to_string_pretty(&wrapper_tree).unwrap();
|
|
||||||
match fs::write(coauthors_file_path(), json_data) {
|
|
||||||
Ok(_) => {}
|
|
||||||
Err(e) => {
|
|
||||||
eprintln!("Error writing git-coauthors file: {e:?}");
|
|
||||||
process::exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn coauthors_file_path() -> std::path::PathBuf {
|
|
||||||
home_dir().unwrap().join(".git-coauthors")
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue