commit
3d1bb2dafe
@ -0,0 +1,3 @@
|
|||||||
|
PKG_WARNER_PACKAGES="test1,test2"
|
||||||
|
PKG_WARNER_DISTRO="Crystal"
|
||||||
|
PKG_WARNER_PMAN="ame"
|
@ -0,0 +1,3 @@
|
|||||||
|
.direnv/
|
||||||
|
.idea/
|
||||||
|
target/
|
@ -0,0 +1,229 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "atty"
|
||||||
|
version = "0.2.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
|
||||||
|
dependencies = [
|
||||||
|
"hermit-abi",
|
||||||
|
"libc",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "autocfg"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bitflags"
|
||||||
|
version = "1.3.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap"
|
||||||
|
version = "3.2.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a3dbbb6653e7c55cc8595ad3e1f7be8f32aba4eb7ff7f0fd1163d4f3d137c0a9"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"clap_derive",
|
||||||
|
"clap_lex",
|
||||||
|
"indexmap",
|
||||||
|
"once_cell",
|
||||||
|
"textwrap",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_derive"
|
||||||
|
version = "3.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9ba52acd3b0a5c33aeada5cdaa3267cdc7c594a98731d4268cdc1532f4264cb4"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_lex"
|
||||||
|
version = "0.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
|
||||||
|
dependencies = [
|
||||||
|
"os_str_bytes",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colored"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
|
||||||
|
dependencies = [
|
||||||
|
"atty",
|
||||||
|
"lazy_static",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hashbrown"
|
||||||
|
version = "0.12.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heck"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hermit-abi"
|
||||||
|
version = "0.1.19"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indexmap"
|
||||||
|
version = "1.9.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"hashbrown",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lazy_static"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.126"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "once_cell"
|
||||||
|
version = "1.13.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "os_str_bytes"
|
||||||
|
version = "6.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "648001efe5d5c0102d8cea768e348da85d90af8ba91f0bea908f157951493cd4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pkg-warner"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
"colored",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error-attr",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro-error-attr"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.43"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.99"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "textwrap"
|
||||||
|
version = "0.15.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "version_check"
|
||||||
|
version = "0.9.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi"
|
||||||
|
version = "0.3.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-i686-pc-windows-gnu",
|
||||||
|
"winapi-x86_64-pc-windows-gnu",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-i686-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
@ -0,0 +1,14 @@
|
|||||||
|
[package]
|
||||||
|
name = "pkg-warner"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Michal S. <michal[at]tar[dot]black>"]
|
||||||
|
edition = "2021"
|
||||||
|
description = "A simple, OS-agnostic package manager warner"
|
||||||
|
repository = "https://github.com/crystal-linux/pkg-warner"
|
||||||
|
license-file = "LICENSE"
|
||||||
|
keywords = ["package", "manager", "warner"]
|
||||||
|
categories = ["command-line-utilities"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
clap = { version = "3.2.16", default-features = false, features = ["std", "derive"] }
|
||||||
|
colored = { version = "2.0.0", default-features = false }
|
@ -0,0 +1,36 @@
|
|||||||
|
# Maintainer: Michal S <michal[at]tar[dot]black>
|
||||||
|
# Developer: Michal S <michal[at]tar[dot]black>
|
||||||
|
|
||||||
|
pkgname=pkg-warner
|
||||||
|
pkgver=0.1.0
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc="Simple package manager warner tool for distribution developers"
|
||||||
|
arch=('x86_64')
|
||||||
|
url="https://github.com/crystal-linux/pkg-warner"
|
||||||
|
license=('GPL3')
|
||||||
|
source=("git+$url?rev=0.1.0")
|
||||||
|
sha256sums=('SKIP')
|
||||||
|
makedepends=('cargo')
|
||||||
|
|
||||||
|
prepare() {
|
||||||
|
cd "$srcdir/$pkgname"
|
||||||
|
cargo fetch --locked --target "$CARCH-unknown-linux-gnu"
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cd "$srcdir/$pkgname"
|
||||||
|
export RUSTUP_TOOLCHAIN=stable
|
||||||
|
export CARGO_TARGET_DIR=target
|
||||||
|
|
||||||
|
# These following envvars are Crystal-specific, please adjust for your own distro!
|
||||||
|
export PKG_WARNER_PACKAGES=""
|
||||||
|
export PKG_WARNER_DISTRO="Crystal"
|
||||||
|
export PKG_WARNER_PMAN="ame/pacman"
|
||||||
|
|
||||||
|
cargo build --frozen --release
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "$srcdir/$pkgname"
|
||||||
|
cargo run --frozen --release -- -ivd "${pkgdir}/usr/bin"
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/crystal-linux/Malachite">
|
||||||
|
<img src="https://getcryst.al/site/assets/other/logo.png" alt="Logo" width="150" height="150">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 align="center">Package Warner</h2>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/crystal-linux/.github/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-GPL--3.0-blue.svg" alt="License">
|
||||||
|
<a href="https://github/crystal-linux/malachite"><img alt="GitHub isses" src="https://img.shields.io/github/issues-raw/crystal-linux/pkg-warner"></a>
|
||||||
|
<a href="https://github/crystal-linux/malachite"><img alt="GitHub pull requests" src="https://img.shields.io/github/issues-pr-raw/crystal-linux/pkg-warner"></a><br>
|
||||||
|
<a href="https://discord.gg/hYJgu8K5aA"><img alt="Discord" src="https://img.shields.io/discord/825473796227858482?color=blue&label=Discord&logo=Discord&logoColor=white"> </a>
|
||||||
|
<a href="https://github.com/not-my-segfault"> <img src="https://img.shields.io/badge/Maintainer-@not%2D-my%2D-segfault-brightgreen" alt="The maintainer of this repository" href="https://github.com/not-my-segfault"></a><br>
|
||||||
|
<a href="https://fosstodon.org/@crystal_linux"><img alt="Mastodon Follow" src="https://img.shields.io/mastodon/follow/108618426259408142?domain=https%3A%2F%2Ffosstodon.org">
|
||||||
|
<a href="https://twitter.com/crystal_linux"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/crystal_linux"></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<p align="center"> <code>pkg-warner</code> is a simple and configurable package warner tool for distribution packagers.</p>
|
||||||
|
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
`pkg-warner` is configured at build time using three environment variables:
|
||||||
|
- `PKG_WARNER_PACKAGES`: a comma-separated list of **incorrect** package managers to warn about.
|
||||||
|
- `PKG_WARNER_DISTRO`: the distribution name to use in the warning.
|
||||||
|
- `PKG_WARNER_PMAN`: the **correct** package manager name to use in the warning.
|
||||||
|
|
||||||
|
Then, in the packaging process you can run `pkg-warner -id "${dest_dir}"` to copy itself to `${dest_dir}/<each value in PKG_WARNER_PACKAGES>` under the destination directory. (e.g., `./pkg/usr/bin/apt`)
|
||||||
|
|
||||||
|
If no `-d/--dest-dir` id provided, it'll install to `/usr/bin` by default.
|
||||||
|
|
||||||
|
If you want an example of how to adapt this to your own distribution/packaging process, see the provided [PKGBUILD](PKGBUILD)
|
||||||
|
|
||||||
|
## How to build:
|
||||||
|
|
||||||
|
Tested on latest Cargo (1.60.0-nightly)
|
||||||
|
|
||||||
|
### Debug/development builds
|
||||||
|
|
||||||
|
- `cargo build`
|
||||||
|
|
||||||
|
### Optimised/release builds
|
||||||
|
|
||||||
|
- `cargo build --release`
|
@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"naersk": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1655042882,
|
||||||
|
"narHash": "sha256-9BX8Fuez5YJlN7cdPO63InoyBy7dm3VlJkkmTt6fS1A=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "naersk",
|
||||||
|
"rev": "cddffb5aa211f50c4b8750adbec0bbbdfb26bb9f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "naersk",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1659494082,
|
||||||
|
"narHash": "sha256-XRwMisQY/BcvDMDRVkd4n3/CT89HOtlPgWIQUNPvWSc=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "8c7576622aeb4707351a17e83429667f42e7d910",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"naersk": "naersk",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"utils": "utils"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1656928814,
|
||||||
|
"narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
|
utils.url = "github:numtide/flake-utils";
|
||||||
|
naersk = {
|
||||||
|
url = "github:nix-community/naersk";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = {
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
utils,
|
||||||
|
naersk,
|
||||||
|
}:
|
||||||
|
utils.lib.eachDefaultSystem (system: let
|
||||||
|
pkgs = nixpkgs.legacyPackages."${system}";
|
||||||
|
naersk-lib = naersk.lib."${system}";
|
||||||
|
in rec
|
||||||
|
{
|
||||||
|
packages.pkg-warner = naersk-lib.buildPackage {
|
||||||
|
pname = "pkg-warner";
|
||||||
|
root = ./.;
|
||||||
|
|
||||||
|
PKG_WARNER_PACKAGES = "test1,test2,test3";
|
||||||
|
PKG_WARNER_DISTRO = "Test Linux";
|
||||||
|
PKG_WARNER_PMAN = "test4";
|
||||||
|
};
|
||||||
|
|
||||||
|
packages.default = packages.pkg-warner;
|
||||||
|
|
||||||
|
apps.pkg-warner = utils.lib.mkApp {
|
||||||
|
drv = packages.pkg-warner;
|
||||||
|
};
|
||||||
|
|
||||||
|
apps.default = apps.pkg-warner;
|
||||||
|
|
||||||
|
devShells.default = pkgs.mkShell {
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
rustc
|
||||||
|
cargo
|
||||||
|
cargo-audit
|
||||||
|
rustfmt
|
||||||
|
clippy
|
||||||
|
|
||||||
|
just
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
formatter = pkgs.alejandra;
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
set dotenv-load := true
|
||||||
|
|
||||||
|
# Run all checks and tests
|
||||||
|
check *FLAGS:
|
||||||
|
cargo clippy --all {{FLAGS}} -- -D warnings
|
||||||
|
cargo fmt --all --check {{FLAGS}}
|
||||||
|
|
||||||
|
# Test the warner
|
||||||
|
test *FLAGS:
|
||||||
|
cargo run {{FLAGS}} -- --test
|
||||||
|
|
||||||
|
# Test using Nix
|
||||||
|
test-nix:
|
||||||
|
nix run .# -- --test
|
@ -0,0 +1,17 @@
|
|||||||
|
use clap::{ArgAction, Parser};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Parser)]
|
||||||
|
#[clap(name=env!("CARGO_PKG_NAME"), version=env!("CARGO_PKG_VERSION"), about=env!("CARGO_PKG_DESCRIPTION"))]
|
||||||
|
pub struct Args {
|
||||||
|
#[clap(long, short, action=ArgAction::SetTrue)]
|
||||||
|
pub init: bool,
|
||||||
|
|
||||||
|
#[clap(long = "dest-dir", short)]
|
||||||
|
pub dest_dir: Option<String>,
|
||||||
|
|
||||||
|
#[clap(long, action=ArgAction::SetTrue)]
|
||||||
|
pub test: bool,
|
||||||
|
|
||||||
|
#[clap(long, short, action=ArgAction::SetTrue)]
|
||||||
|
pub verbose: bool,
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
mod strings;
|
||||||
|
mod structs;
|
||||||
|
|
||||||
|
pub use strings::*;
|
||||||
|
pub use structs::*;
|
@ -0,0 +1,53 @@
|
|||||||
|
use std::process::exit;
|
||||||
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
use colored::Colorize;
|
||||||
|
|
||||||
|
use crate::internal::AppExitCode;
|
||||||
|
|
||||||
|
const ERR_SYMBOL: &str = "✘";
|
||||||
|
const WARN_SYMBOL: &str = "⚠";
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! log {
|
||||||
|
($($arg:tt)+) => {
|
||||||
|
$crate::internal::log_fn(&format!("[{}:{}] {}", file!(), line!(), format!($($arg)+)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn log_fn(msg: &str) {
|
||||||
|
if crate::args::Args::parse().verbose {
|
||||||
|
eprintln!(
|
||||||
|
"{} {}",
|
||||||
|
SystemTime::now()
|
||||||
|
.duration_since(UNIX_EPOCH)
|
||||||
|
.unwrap()
|
||||||
|
.as_secs(),
|
||||||
|
msg
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! crash {
|
||||||
|
($exit_code:expr, $($arg:tt)+) => {
|
||||||
|
$crate::internal::crash_fn($exit_code, &format!("[{}:{}] {}", file!(), line!(), format!($($arg)+)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn crash_fn(exit_code: AppExitCode, msg: &str) {
|
||||||
|
println!("{} {}", ERR_SYMBOL.bold().red(), msg.bold().bright_red());
|
||||||
|
exit(exit_code as i32);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn warn(bin: &str, dist: &str, pman: &str) {
|
||||||
|
println!(
|
||||||
|
"{} {} is not supported on {}. Please use {} instead!",
|
||||||
|
WARN_SYMBOL.bold().yellow(),
|
||||||
|
bin.bold().yellow(),
|
||||||
|
dist.bold(),
|
||||||
|
pman.bold(),
|
||||||
|
);
|
||||||
|
exit(AppExitCode::Success as i32);
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
pub enum AppExitCode {
|
||||||
|
Success = 1, // the correct package manager
|
||||||
|
CalledDirectly = 2,
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
#![warn(clippy::all, clippy::pedantic, clippy::nursery, clippy::cargo)]
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
|
use std::{env, ops::Deref, process::Command};
|
||||||
|
|
||||||
|
mod args;
|
||||||
|
mod internal;
|
||||||
|
|
||||||
|
use args::Args;
|
||||||
|
use internal::{warn, AppExitCode};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// Parse CLI arguments
|
||||||
|
let args = Args::parse();
|
||||||
|
|
||||||
|
// Get the current executable name as a String
|
||||||
|
let bin = env::current_exe()
|
||||||
|
.unwrap()
|
||||||
|
.as_path()
|
||||||
|
.file_name()
|
||||||
|
.unwrap()
|
||||||
|
.deref()
|
||||||
|
.to_string_lossy()
|
||||||
|
.to_string();
|
||||||
|
|
||||||
|
// Get variables from the environment at build time to simplify the code
|
||||||
|
let pkgs = env!("PKG_WARNER_PACKAGES")
|
||||||
|
.split(',')
|
||||||
|
.collect::<Vec<&str>>();
|
||||||
|
let pman = env!("PKG_WARNER_PMAN").to_string();
|
||||||
|
let dist = env!("PKG_WARNER_DISTRO").to_string();
|
||||||
|
|
||||||
|
// If --test is specified, print the warn message and exit
|
||||||
|
if args.test {
|
||||||
|
warn(&bin, &dist, &pman);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the binary is called directly by the user, if so tell them off
|
||||||
|
if bin == "pkg-warner" {
|
||||||
|
if args.init {
|
||||||
|
init(&pkgs, args.dest_dir);
|
||||||
|
} else {
|
||||||
|
crash!(
|
||||||
|
AppExitCode::CalledDirectly,
|
||||||
|
"`pkg-warner` is not meant to be called directly by the user"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
warn(&bin, &dist, &pman);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn init(pkgs: &[&str], dest_dir: Option<String>) {
|
||||||
|
log!("Initializing: {}", pkgs.join(", "));
|
||||||
|
|
||||||
|
// Either unwrap the dest_dir if present or use /usr/bin
|
||||||
|
let dest_dir = dest_dir.unwrap_or_else(|| "/usr/bin".to_string());
|
||||||
|
|
||||||
|
for pkg in pkgs {
|
||||||
|
log!("Installing \"{}\"", pkg);
|
||||||
|
|
||||||
|
Command::new("install")
|
||||||
|
.arg("-Dm0755")
|
||||||
|
.arg(format!("{}", env::current_exe().unwrap().display()))
|
||||||
|
.arg(format!("{}/{}", dest_dir, pkg))
|
||||||
|
.spawn()
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue