mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
Merge pull request #1530 from @rivy (create publishable coreutils)
Change ~ create a publishable version of `coreutils`
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
# spell-checker:words POSIX SDK SDKs repo toolchain toolchains
|
||||
# spell-checker:ignore ABI ARCH BACKTRACE BINDIR COMNTOOLS MINGW MINGWDIR MSVC MSYS USERPROFILE cl dllcrt findstr maint mkdir rustc rustlib rustup targetting uutils vcvarsall
|
||||
# spell-checker:ignore ABI ARCH BACKTRACE BINDIR COMNTOOLS MINGW MINGWDIR MSVC MSYS USERPROFILE cl dllcrt findstr maint mkdir rustc rustlib rustup uutils vcvarsall
|
||||
|
||||
version: "{build} ~ {branch}"
|
||||
|
||||
|
||||
+71
-27
@@ -4,13 +4,12 @@ name: CICD
|
||||
# spell-checker:ignore (env/flags) Ccodegen Coverflow RUSTFLAGS
|
||||
# spell-checker:ignore (jargon) SHAs deps softprops toolchain
|
||||
# spell-checker:ignore (names) CodeCOV MacOS MinGW Peltoche rivy
|
||||
# spell-checker:ignore (shell/tools) choco clippy dmake esac fakeroot gmake grcov halium lcov libssl mkdir popd printf pushd rustc rustfmt rustup shopt xargs
|
||||
# spell-checker:ignore (misc) alnum gnueabihf issuecomment maint nullglob onexitbegin onexitend uutils
|
||||
|
||||
# spell-checker:ignore (shell/tools) choco clippy dmake dpkg esac fakeroot gmake grcov halium lcov libssl mkdir popd printf pushd rustc rustfmt rustup shopt xargs
|
||||
# spell-checker:ignore (misc) aarch alnum armhf coreutils gnueabihf issuecomment maint nullglob onexitbegin onexitend uutils
|
||||
|
||||
env:
|
||||
PROJECT_NAME: uutils
|
||||
PROJECT_DESC: "'Universal' (cross-platform) CLI utilities"
|
||||
PROJECT_NAME: coreutils
|
||||
PROJECT_DESC: "Core universal (cross-platform) utilities"
|
||||
PROJECT_AUTH: "uutils"
|
||||
RUST_MIN_SRV: "1.31.0" ## v1.31.0 == "Rust 2018" (2018-12-06)
|
||||
RUST_COV_SRV: "2020-04-29" ## (~v1.45.0) supported rust version for code coverage; (date required/used by 'coverage') ## !maint: refactor when code coverage support is included in the stable channel
|
||||
@@ -35,11 +34,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
## VARs setup
|
||||
# #maint: [rivy; 2020-02-08] 'windows-latest' `cargo fmt` is bugged for this project (see reasons @ GH:rust-lang/rustfmt #3324, #3590, #3688 ; waiting for repair)
|
||||
JOB_DO_FORMAT_TESTING="true"
|
||||
case '${{ matrix.job.os }}' in windows-latest) unset JOB_DO_FORMAT_TESTING ;; esac;
|
||||
echo set-output name=JOB_DO_FORMAT_TESTING::${JOB_DO_FORMAT_TESTING:-<empty>/false}
|
||||
echo ::set-output name=JOB_DO_FORMAT_TESTING::${JOB_DO_FORMAT_TESTING}
|
||||
# target-specific options
|
||||
# * CARGO_FEATURES_OPTION
|
||||
CARGO_FEATURES_OPTION='' ;
|
||||
@@ -54,14 +48,12 @@ jobs:
|
||||
profile: minimal # minimal component installation (ie, no documentation)
|
||||
components: rustfmt, clippy
|
||||
- name: "`fmt` testing"
|
||||
if: steps.vars.outputs.JOB_DO_FORMAT_TESTING
|
||||
shell: bash
|
||||
run: |
|
||||
# `fmt` testing
|
||||
# * convert any warnings to GHA UI annotations; ref: <https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-a-warning-message>
|
||||
S=$(cargo fmt -- --check) && printf "%s\n" "$S" || { printf "%s\n" "$S" | sed -E -n -e "s/^Diff[[:space:]]+in[[:space:]]+${PWD//\//\\/}\/(.*)[[:space:]]+at[[:space:]]+[^0-9]+([0-9]+).*$/::warning file=\1,line=\2::WARNING: \`cargo fmt\`: style violation/p" ; }
|
||||
- name: "`fmt` testing of tests"
|
||||
if: steps.vars.outputs.JOB_DO_FORMAT_TESTING
|
||||
shell: bash
|
||||
run: |
|
||||
# `fmt` testing of tests
|
||||
@@ -130,7 +122,10 @@ jobs:
|
||||
job:
|
||||
# { os, target, cargo-options, features, use-cross, toolchain }
|
||||
- { os: ubuntu-latest , target: arm-unknown-linux-gnueabihf , features: feat_os_unix_gnueabihf , use-cross: use-cross }
|
||||
- { os: ubuntu-latest , target: aarch64-unknown-linux-gnu , features: feat_os_unix_gnueabihf , use-cross: use-cross }
|
||||
- { os: ubuntu-16.04 , target: x86_64-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||
# - { os: ubuntu-18.04 , target: i586-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross } ## note: older windows platform; not required, dev-FYI only
|
||||
# - { os: ubuntu-18.04 , target: i586-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross } ## note: older windows platform; not required, dev-FYI only
|
||||
- { os: ubuntu-18.04 , target: i686-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||
- { os: ubuntu-18.04 , target: i686-unknown-linux-musl , features: feat_os_unix_musl , use-cross: use-cross }
|
||||
- { os: ubuntu-18.04 , target: x86_64-unknown-linux-gnu , features: feat_os_unix , use-cross: use-cross }
|
||||
@@ -148,6 +143,7 @@ jobs:
|
||||
## install/setup prerequisites
|
||||
case '${{ matrix.job.target }}' in
|
||||
arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
|
||||
aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
|
||||
esac
|
||||
- name: Initialize workflow variables
|
||||
id: vars
|
||||
@@ -186,7 +182,14 @@ jobs:
|
||||
echo ::set-output name=REF_TAG::${REF_TAG}
|
||||
echo ::set-output name=REF_SHAS::${REF_SHAS}
|
||||
# parse target
|
||||
unset TARGET_ARCH ; case '${{ matrix.job.target }}' in arm-unknown-linux-gnueabihf) TARGET_ARCH=arm ;; i686-*) TARGET_ARCH=i686 ;; x86_64-*) TARGET_ARCH=x86_64 ;; esac;
|
||||
unset TARGET_ARCH
|
||||
case '${{ matrix.job.target }}' in
|
||||
aarch64-*) TARGET_ARCH=arm64 ;;
|
||||
arm-*-*hf) TARGET_ARCH=armhf ;;
|
||||
i586-*) TARGET_ARCH=i586 ;;
|
||||
i686-*) TARGET_ARCH=i686 ;;
|
||||
x86_64-*) TARGET_ARCH=x86_64 ;;
|
||||
esac;
|
||||
echo set-output name=TARGET_ARCH::${TARGET_ARCH}
|
||||
echo ::set-output name=TARGET_ARCH::${TARGET_ARCH}
|
||||
unset TARGET_OS ; case '${{ matrix.job.target }}' in *-linux-*) TARGET_OS=linux ;; *-apple-*) TARGET_OS=macos ;; *-windows-*) TARGET_OS=windows ;; esac;
|
||||
@@ -203,9 +206,34 @@ jobs:
|
||||
echo ::set-output name=PKG_BASENAME::${PKG_BASENAME}
|
||||
echo ::set-output name=PKG_NAME::${PKG_NAME}
|
||||
# deployable tag? (ie, leading "vM" or "M"; M == version number)
|
||||
unset DEPLOYABLE ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DEPLOYABLE='true' ; fi
|
||||
echo set-output name=DEPLOYABLE::${DEPLOYABLE:-<empty>/false}
|
||||
echo ::set-output name=DEPLOYABLE::${DEPLOYABLE}
|
||||
unset DEPLOY ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DEPLOY='true' ; fi
|
||||
echo set-output name=DEPLOY::${DEPLOY:-<empty>/false}
|
||||
echo ::set-output name=DEPLOY::${DEPLOY}
|
||||
# DPKG architecture?
|
||||
unset DPKG_ARCH
|
||||
case ${{ matrix.job.target }} in
|
||||
x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
|
||||
*-linux-*) DPKG_ARCH=${TARGET_ARCH} ;;
|
||||
esac
|
||||
echo set-output name=DPKG_ARCH::${DPKG_ARCH}
|
||||
echo ::set-output name=DPKG_ARCH::${DPKG_ARCH}
|
||||
# DPKG version?
|
||||
unset DPKG_VERSION ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DPKG_VERSION=${REF_TAG/#[vV]/} ; fi
|
||||
echo set-output name=DPKG_VERSION::${DPKG_VERSION}
|
||||
echo ::set-output name=DPKG_VERSION::${DPKG_VERSION}
|
||||
# DPKG base name/conflicts?
|
||||
DPKG_BASENAME=${PROJECT_NAME}
|
||||
DPKG_CONFLICTS=${PROJECT_NAME}-musl
|
||||
case ${{ matrix.job.target }} in *-musl) DPKG_BASENAME=${PROJECT_NAME}-musl ; DPKG_CONFLICTS=${PROJECT_NAME} ;; esac;
|
||||
echo set-output name=DPKG_BASENAME::${DPKG_BASENAME}
|
||||
echo set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
|
||||
echo ::set-output name=DPKG_BASENAME::${DPKG_BASENAME}
|
||||
echo ::set-output name=DPKG_CONFLICTS::${DPKG_CONFLICTS}
|
||||
# DPKG name
|
||||
unset DPKG_NAME;
|
||||
if [[ -n $DPKG_ARCH && -n $DPKG_VERSION ]]; then DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb" ; fi
|
||||
echo set-output name=DPKG_NAME::${DPKG_NAME}
|
||||
echo ::set-output name=DPKG_NAME::${DPKG_NAME}
|
||||
# target-specific options
|
||||
# * CARGO_FEATURES_OPTION
|
||||
CARGO_FEATURES_OPTION='' ;
|
||||
@@ -216,18 +244,17 @@ jobs:
|
||||
CARGO_USE_CROSS='true' ; case '${{ matrix.job.use-cross }}' in ''|0|f|false|n|no) unset CARGO_USE_CROSS ;; esac;
|
||||
echo set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS:-<empty>/false}
|
||||
echo ::set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS}
|
||||
# # * `arm` cannot be tested on ubuntu-* hosts (b/c testing is currently primarily done via comparison of target outputs with built-in outputs and the `arm` target is not executable on the host)
|
||||
JOB_DO_TESTING="true"
|
||||
case '${{ matrix.job.target }}' in arm-*) unset JOB_DO_TESTING ;; esac;
|
||||
echo set-output name=JOB_DO_TESTING::${JOB_DO_TESTING:-<empty>/false}
|
||||
echo ::set-output name=JOB_DO_TESTING::${JOB_DO_TESTING}
|
||||
# # * test only binary for arm-type targets
|
||||
unset CARGO_TEST_OPTIONS
|
||||
unset CARGO_TEST_OPTIONS ; case '${{ matrix.job.target }}' in arm-*) CARGO_TEST_OPTIONS="--bin ${PROJECT_NAME}" ;; esac;
|
||||
# * test only library and/or binaries for arm-type targets
|
||||
unset CARGO_TEST_OPTIONS ; case '${{ matrix.job.target }}' in aarch64-* | arm-*) CARGO_TEST_OPTIONS="--bins" ;; esac;
|
||||
echo set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
||||
echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
||||
# * strip executable?
|
||||
STRIP="strip" ; case '${{ matrix.job.target }}' in arm-unknown-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;; *-pc-windows-msvc) STRIP="" ;; esac;
|
||||
# * executable for `strip`?
|
||||
STRIP="strip"
|
||||
case ${{ matrix.job.target }} in
|
||||
aarch64-*-linux-gnu) STRIP="aarch64-linux-gnu-strip" ;;
|
||||
arm-*-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;;
|
||||
*-pc-windows-msvc) STRIP="" ;;
|
||||
esac;
|
||||
echo set-output name=STRIP::${STRIP:-<empty>/false}
|
||||
echo ::set-output name=STRIP::${STRIP}
|
||||
- name: Create all needed build/work directories
|
||||
@@ -236,6 +263,7 @@ jobs:
|
||||
## create build/work space
|
||||
mkdir -p '${{ steps.vars.outputs.STAGING }}'
|
||||
mkdir -p '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}'
|
||||
mkdir -p '${{ steps.vars.outputs.STAGING }}/dpkg'
|
||||
- name: rust toolchain ~ install
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
@@ -307,12 +335,28 @@ jobs:
|
||||
*) tar czf '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* ;;
|
||||
esac
|
||||
popd >/dev/null
|
||||
# dpkg
|
||||
if [ -n "${{ steps.vars.outputs.DPKG_NAME }}" ]; then
|
||||
DPKG_DIR="${{ steps.vars.outputs.STAGING }}/dpkg"
|
||||
# binary
|
||||
install -Dm755 'target/${{ matrix.job.target }}/release/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}' "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}"
|
||||
if [ -n "${{ steps.vars.outputs.STRIP }}" ]; then "${{ steps.vars.outputs.STRIP }}" "${DPKG_DIR}/usr/bin/${{ env.PROJECT_NAME }}${{ steps.vars.outputs.EXE_suffix }}" ; fi
|
||||
# README and LICENSE
|
||||
(shopt -s nullglob; for f in [R]"EADME"{,.*}; do install -Dm644 "$f" "${DPKG_DIR}/usr/share/doc/${{ env.PROJECT_NAME }}/$f" ; done)
|
||||
(shopt -s nullglob; for f in [L]"ICENSE"{-*,}{,.*}; do install -Dm644 "$f" "${DPKG_DIR}/usr/share/doc/${{ env.PROJECT_NAME }}/$f" ; done)
|
||||
# control file
|
||||
mkdir -p "${DPKG_DIR}/DEBIAN"
|
||||
printf "Package: ${{ steps.vars.outputs.DPKG_BASENAME }}\nVersion: ${{ steps.vars.outputs.DPKG_VERSION }}\nSection: utils\nPriority: optional\nMaintainer: ${{ env.PROJECT_AUTH }}\nArchitecture: ${{ steps.vars.outputs.DPKG_ARCH }}\nProvides: ${{ env.PROJECT_NAME }}\nConflicts: ${{ steps.vars.outputs.DPKG_CONFLICTS }}\nDescription: ${{ env.PROJECT_DESC }}\n" > "${DPKG_DIR}/DEBIAN/control"
|
||||
# build dpkg
|
||||
fakeroot dpkg-deb --build "${DPKG_DIR}" "${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}"
|
||||
fi
|
||||
- name: Publish
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: steps.vars.outputs.DEPLOYABLE
|
||||
if: steps.vars.outputs.DEPLOY
|
||||
with:
|
||||
files: |
|
||||
${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_NAME }}
|
||||
${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.DPKG_NAME }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
|
||||
Vendored
+296
@@ -0,0 +1,296 @@
|
||||
// `cspell` settings
|
||||
{
|
||||
"version": "0.1", // Version of the setting file. Always 0.1
|
||||
"language": "en", // language - current active spelling language
|
||||
// ignoreWords
|
||||
"ignoreWords": [
|
||||
// abbrev/acronyms
|
||||
"Cygwin",
|
||||
"FreeBSD",
|
||||
"Gmail",
|
||||
"Irix",
|
||||
"MacOS",
|
||||
"MinGW",
|
||||
"Minix",
|
||||
"MS-DOS",
|
||||
"MSDOS",
|
||||
"NetBSD",
|
||||
"Novell",
|
||||
"OpenBSD",
|
||||
"POSIX",
|
||||
"SELinux",
|
||||
"Solaris",
|
||||
"Xenix",
|
||||
"flac",
|
||||
"lzma",
|
||||
// crates
|
||||
"byteorder",
|
||||
"chrono",
|
||||
"filetime",
|
||||
"formatteriteminfo",
|
||||
"getopts",
|
||||
"itertools",
|
||||
"multifilereader",
|
||||
"onig",
|
||||
"peekreader",
|
||||
"termion",
|
||||
"termios",
|
||||
"termsize",
|
||||
"termwidth",
|
||||
"textwrap",
|
||||
"walkdir",
|
||||
"winapi",
|
||||
"xattr",
|
||||
// jargon
|
||||
"AST", // abstract syntax tree
|
||||
"CPU",
|
||||
"CPUs",
|
||||
"FIFO",
|
||||
"FIFOs",
|
||||
"FQDN", // fully qualified domain name
|
||||
"GID", // group ID
|
||||
"GIDs",
|
||||
"POSIXLY",
|
||||
"RNG", // random number generator
|
||||
"RNGs",
|
||||
"UID", // user ID
|
||||
"UIDs",
|
||||
"UUID", // universally unique identifier
|
||||
"arity",
|
||||
"bitmask",
|
||||
"canonicalization",
|
||||
"canonicalize",
|
||||
"colorizable",
|
||||
"colorize",
|
||||
"consts",
|
||||
"dedup",
|
||||
"deque",
|
||||
"dequeue",
|
||||
"enqueue",
|
||||
"executable",
|
||||
"executables",
|
||||
"gibibytes",
|
||||
"hardlink",
|
||||
"hardlinks",
|
||||
"hashsums",
|
||||
"kibibytes",
|
||||
"mebibytes",
|
||||
"mergeable",
|
||||
"multibyte",
|
||||
"nonportable",
|
||||
"peekable",
|
||||
"precompiled",
|
||||
"precompute",
|
||||
"preload",
|
||||
"prepend",
|
||||
"prepended",
|
||||
"primality",
|
||||
"pseudoprime",
|
||||
"pseudoprimes",
|
||||
"readonly",
|
||||
"seedable",
|
||||
"semver",
|
||||
"symlink",
|
||||
"symlinks",
|
||||
"syscall",
|
||||
"toekenize",
|
||||
"unbuffered",
|
||||
"unportable",
|
||||
"whitespace",
|
||||
// names
|
||||
"Akira Hayakawa", "Akira", "Hayakawa",
|
||||
"Alan Andrade", "Alan", "Andrade",
|
||||
"Alex Lyon", "Alex", "Lyon",
|
||||
"Alexander Batischev", "Alexander", "Batischev",
|
||||
"Aleksander Bielawski", "Aleksander", "Bielawski",
|
||||
"Alexander Fomin", "Alexander", "Fomin",
|
||||
"Anthony Deschamps", "Anthony", "Deschamps",
|
||||
"Ben Eills", "Ben", "Eills",
|
||||
"Ben Hirsch", "Ben", "Hirsch",
|
||||
"Benoit Benedetti", "Benoit", "Benedetti",
|
||||
"Boden Garman", "Boden", "Garman",
|
||||
"Chirag B Jadwani", "Chirag", "Jadwani",
|
||||
"Derek Chiang", "Derek", "Chiang",
|
||||
"Dorota Kapturkiewicz", "Dorota", "Kapturkiewicz",
|
||||
"Evgeniy Klyuchikov", "Evgeniy", "Klyuchikov",
|
||||
"Fangxu Hu", "Fangxu", "Hu",
|
||||
"Gil Cottle", "Gil", "Cottle",
|
||||
"Haitao Li", "Haitao", "Li",
|
||||
"Inokentiy Babushkin", "Inokentiy", "Babushkin",
|
||||
"Joao Oliveira", "Joao", "Oliveira",
|
||||
"Jeremiah Peschka", "Jeremiah", "Peschka",
|
||||
"Jian Zeng", "Jian", "Zeng",
|
||||
"Jimmy Lu", "Jimmy", "Lu",
|
||||
"Jordi Boggiano", "Jordi", "Boggiano",
|
||||
"Jordy Dickinson", "Jordy", "Dickinson",
|
||||
"Joseph Crail", "Joseph", "Crail",
|
||||
"Joshua S Miller", "Joshua", "Miller",
|
||||
"KokaKiwi",
|
||||
"Konstantin Pospelov", "Konstantin", "Pospelov",
|
||||
"Mahkoh",
|
||||
"Maciej Dziardziel", "Maciej", "Dziardziel",
|
||||
"Michael Gehring", "Michael", "Gehring",
|
||||
"Martin Kysel", "Martin", "Kysel",
|
||||
"Morten Olsen Lysgaard", "Morten", "Olsen", "Lysgaard",
|
||||
"Nicholas Juszczak", "Nicholas", "Juszczak",
|
||||
"Nick Platt", "Nick", "Platt",
|
||||
"Orvar Segerström", "Orvar", "Segerström",
|
||||
"Peter Atashian", "Peter", "Atashian",
|
||||
"Rolf Morel", "Rolf", "Morel",
|
||||
"Roman Gafiyatullin", "Roman", "Gafiyatullin",
|
||||
"Roy Ivy III", "Roy", "Ivy", "III",
|
||||
"Sergey 'Shnatsel' Davidoff", "Sergey", "Shnatsel", "Davidoff",
|
||||
"Sokovikov Evgeniy", "Sokovikov", "Evgeniy",
|
||||
"Sunrin SHIMURA", "Sunrin", "SHIMURA",
|
||||
"Smigle00", "Smigle",
|
||||
"Sylvestre Ledru", "Sylvestre", "Ledru",
|
||||
"Tobias Bohumir Schottdorf", "Tobias", "Bohumir", "Schottdorf",
|
||||
"Virgile Andreani", "Virgile", "Andreani",
|
||||
"Vsevolod Velichko", "Vsevolod", "Velichko",
|
||||
"Wiktor Kuropatwa", "Wiktor", "Kuropatwa",
|
||||
"Yury Krivopalov", "Yury", "Krivopalov",
|
||||
"anonymousknight",
|
||||
"kwantam",
|
||||
// rust
|
||||
"clippy",
|
||||
"concat",
|
||||
"powi",
|
||||
"repr",
|
||||
"rfind",
|
||||
"rustc",
|
||||
"rustfmt",
|
||||
"substr",
|
||||
"splitn",
|
||||
// shell
|
||||
"passwd",
|
||||
"tcsh",
|
||||
// tags
|
||||
"Maint",
|
||||
// uutils
|
||||
"chgrp",
|
||||
"chmod",
|
||||
"chown",
|
||||
"chroot",
|
||||
"cksum",
|
||||
"dircolors",
|
||||
"hashsum",
|
||||
"hostid",
|
||||
"logname",
|
||||
"mkdir",
|
||||
"mkfifo",
|
||||
"mknod",
|
||||
"mktemp",
|
||||
"nohup",
|
||||
"nproc",
|
||||
"numfmt",
|
||||
"pathchk",
|
||||
"printenv",
|
||||
"printf",
|
||||
"readlink",
|
||||
"realpath",
|
||||
"relpath",
|
||||
"rmdir",
|
||||
"shuf",
|
||||
"stdbuf",
|
||||
"tsort",
|
||||
"uname",
|
||||
"unexpand",
|
||||
"whoami",
|
||||
// vars/libc
|
||||
"FILENO",
|
||||
"HOSTSIZE",
|
||||
"IDSIZE",
|
||||
"IRGRP",
|
||||
"IROTH",
|
||||
"IRUSR",
|
||||
"ISGID",
|
||||
"ISUID",
|
||||
"ISVTX",
|
||||
"IWGRP",
|
||||
"IWOTH",
|
||||
"IWUSR",
|
||||
"IXGRP",
|
||||
"IXOTH",
|
||||
"IXUSR",
|
||||
"LINESIZE",
|
||||
"NAMESIZE",
|
||||
"USERSIZE",
|
||||
"addrinfo",
|
||||
"addrlen",
|
||||
"canonname",
|
||||
"chroot",
|
||||
"freeaddrinfo",
|
||||
"getaddrinfo",
|
||||
"getegid",
|
||||
"geteuid",
|
||||
"getgid",
|
||||
"getgrgid",
|
||||
"getgrnam",
|
||||
"getgrouplist",
|
||||
"getgroups",
|
||||
"getpwnam",
|
||||
"getpwuid",
|
||||
"getuid",
|
||||
"inode",
|
||||
"isatty",
|
||||
"lchown",
|
||||
"setgid",
|
||||
"setgroups",
|
||||
"setuid",
|
||||
"socktype",
|
||||
"umask",
|
||||
"waitpid",
|
||||
// vars/signals
|
||||
"SIGPIPE",
|
||||
// vars/sync
|
||||
"Condvar",
|
||||
// vars/time
|
||||
"Timespec",
|
||||
"nsec",
|
||||
"nsecs",
|
||||
"strftime",
|
||||
"usec",
|
||||
"usecs",
|
||||
// vars/utmpx
|
||||
"endutxent",
|
||||
"getutxent",
|
||||
"getutxid",
|
||||
"getutxline",
|
||||
"pututxline",
|
||||
"setutxent",
|
||||
"utmp",
|
||||
"utmpx",
|
||||
"utmpxname",
|
||||
// vars/winapi
|
||||
"errhandlingapi",
|
||||
"fileapi",
|
||||
"handleapi",
|
||||
"minwindef",
|
||||
"processthreadsapi",
|
||||
"synchapi",
|
||||
"winbase",
|
||||
"winerror",
|
||||
"winnt",
|
||||
"winsock",
|
||||
"DWORD",
|
||||
"LPWSTR",
|
||||
"WCHAR",
|
||||
// uucore
|
||||
"optflag",
|
||||
"optflagmulti",
|
||||
"optflagopt",
|
||||
"optmulti",
|
||||
"optopt",
|
||||
// uutils
|
||||
"coreopts",
|
||||
"coreutils",
|
||||
"libc",
|
||||
"musl",
|
||||
"utmpx",
|
||||
"uucore",
|
||||
"uumain",
|
||||
"uutils"
|
||||
],
|
||||
// words - list of words to be always considered correct
|
||||
"words": []
|
||||
}
|
||||
Generated
+1321
-1389
File diff suppressed because it is too large
Load Diff
+119
-107
@@ -1,13 +1,20 @@
|
||||
# uutils / coreutils
|
||||
# coreutils (uutils)
|
||||
# * see the repository LICENSE, README, and CONTRIBUTING files for more information
|
||||
|
||||
[package]
|
||||
name = "uutils"
|
||||
description = "uutils ~ universal (as in cross-platform) CLI utils, written in Rust"
|
||||
name = "coreutils"
|
||||
version = "0.0.1" # "0.0.1.1"
|
||||
authors = ["uutils developers"]
|
||||
license = "MIT"
|
||||
description = "coreutils ~ GNU coreutils (updated); implemented as universal (cross-platform) utils, written in Rust"
|
||||
|
||||
homepage = "https://github.com/uutils/coreutils"
|
||||
repository = "https://github.com/uutils/coreutils"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
readme = "README.md"
|
||||
keywords = ["coreutils", "uutils", "cross-platform", "cli", "utility"]
|
||||
categories = ["command-line-utilities"]
|
||||
edition = "2018"
|
||||
|
||||
build = "build.rs"
|
||||
autotests = false
|
||||
|
||||
@@ -210,111 +217,118 @@ feat_os_windows_legacy = [
|
||||
"touch",
|
||||
"whoami",
|
||||
]
|
||||
##
|
||||
# * bypass/override ~ translate 'test' feature name to avoid dependency collision with rust core 'test' crate (o/w surfaces as compiler errors during testing)
|
||||
test = [ "uu_test" ]
|
||||
|
||||
[workspace]
|
||||
|
||||
[dependencies]
|
||||
lazy_static = { version="1.3" }
|
||||
textwrap = { version="=0.11.0", features=["term_size"] } # !maint: [2020-05-10; rivy] unstable crate using undocumented features; pinned currently, will review
|
||||
uucore = { version="0.0.2" }
|
||||
uucore = { version="0.0.4", package="uucore", git="https://github.com/uutils/uucore.git", branch="master" }
|
||||
# * uutils
|
||||
arch = { optional=true, path="src/uu/arch" }
|
||||
base32 = { optional=true, path="src/uu/base32" }
|
||||
base64 = { optional=true, path="src/uu/base64" }
|
||||
basename = { optional=true, path="src/uu/basename" }
|
||||
cat = { optional=true, path="src/uu/cat" }
|
||||
chgrp = { optional=true, path="src/uu/chgrp" }
|
||||
chmod = { optional=true, path="src/uu/chmod" }
|
||||
chown = { optional=true, path="src/uu/chown" }
|
||||
chroot = { optional=true, path="src/uu/chroot" }
|
||||
cksum = { optional=true, path="src/uu/cksum" }
|
||||
comm = { optional=true, path="src/uu/comm" }
|
||||
cp = { optional=true, path="src/uu/cp" }
|
||||
cut = { optional=true, path="src/uu/cut" }
|
||||
date = { optional=true, path="src/uu/date" }
|
||||
df = { optional=true, path="src/uu/df" }
|
||||
dircolors= { optional=true, path="src/uu/dircolors" }
|
||||
dirname = { optional=true, path="src/uu/dirname" }
|
||||
du = { optional=true, path="src/uu/du" }
|
||||
echo = { optional=true, path="src/uu/echo" }
|
||||
env = { optional=true, path="src/uu/env" }
|
||||
expand = { optional=true, path="src/uu/expand" }
|
||||
expr = { optional=true, path="src/uu/expr" }
|
||||
factor = { optional=true, path="src/uu/factor" }
|
||||
false = { optional=true, path="src/uu/false" }
|
||||
fmt = { optional=true, path="src/uu/fmt" }
|
||||
fold = { optional=true, path="src/uu/fold" }
|
||||
groups = { optional=true, path="src/uu/groups" }
|
||||
hashsum = { optional=true, path="src/uu/hashsum" }
|
||||
head = { optional=true, path="src/uu/head" }
|
||||
hostid = { optional=true, path="src/uu/hostid" }
|
||||
hostname = { optional=true, path="src/uu/hostname" }
|
||||
id = { optional=true, path="src/uu/id" }
|
||||
install = { optional=true, path="src/uu/install" }
|
||||
join = { optional=true, path="src/uu/join" }
|
||||
kill = { optional=true, path="src/uu/kill" }
|
||||
link = { optional=true, path="src/uu/link" }
|
||||
ln = { optional=true, path="src/uu/ln" }
|
||||
ls = { optional=true, path="src/uu/ls" }
|
||||
logname = { optional=true, path="src/uu/logname" }
|
||||
mkdir = { optional=true, path="src/uu/mkdir" }
|
||||
mkfifo = { optional=true, path="src/uu/mkfifo" }
|
||||
mknod = { optional=true, path="src/uu/mknod" }
|
||||
mktemp = { optional=true, path="src/uu/mktemp" }
|
||||
more = { optional=true, path="src/uu/more" }
|
||||
mv = { optional=true, path="src/uu/mv" }
|
||||
nice = { optional=true, path="src/uu/nice" }
|
||||
nl = { optional=true, path="src/uu/nl" }
|
||||
nohup = { optional=true, path="src/uu/nohup" }
|
||||
nproc = { optional=true, path="src/uu/nproc" }
|
||||
numfmt = { optional=true, path="src/uu/numfmt" }
|
||||
od = { optional=true, path="src/uu/od" }
|
||||
paste = { optional=true, path="src/uu/paste" }
|
||||
pathchk = { optional=true, path="src/uu/pathchk" }
|
||||
pinky = { optional=true, path="src/uu/pinky" }
|
||||
printenv = { optional=true, path="src/uu/printenv" }
|
||||
printf = { optional=true, path="src/uu/printf" }
|
||||
ptx = { optional=true, path="src/uu/ptx" }
|
||||
pwd = { optional=true, path="src/uu/pwd" }
|
||||
readlink = { optional=true, path="src/uu/readlink" }
|
||||
realpath = { optional=true, path="src/uu/realpath" }
|
||||
relpath = { optional=true, path="src/uu/relpath" }
|
||||
rm = { optional=true, path="src/uu/rm" }
|
||||
rmdir = { optional=true, path="src/uu/rmdir" }
|
||||
seq = { optional=true, path="src/uu/seq" }
|
||||
shred = { optional=true, path="src/uu/shred" }
|
||||
shuf = { optional=true, path="src/uu/shuf" }
|
||||
sleep = { optional=true, path="src/uu/sleep" }
|
||||
sort = { optional=true, path="src/uu/sort" }
|
||||
split = { optional=true, path="src/uu/split" }
|
||||
stat = { optional=true, path="src/uu/stat" }
|
||||
stdbuf = { optional=true, path="src/uu/stdbuf" }
|
||||
sum = { optional=true, path="src/uu/sum" }
|
||||
sync = { optional=true, path="src/uu/sync" }
|
||||
tac = { optional=true, path="src/uu/tac" }
|
||||
tail = { optional=true, path="src/uu/tail" }
|
||||
tee = { optional=true, path="src/uu/tee" }
|
||||
test = { optional=true, path="src/uu/test" }
|
||||
timeout = { optional=true, path="src/uu/timeout" }
|
||||
touch = { optional=true, path="src/uu/touch" }
|
||||
tr = { optional=true, path="src/uu/tr" }
|
||||
true = { optional=true, path="src/uu/true" }
|
||||
truncate = { optional=true, path="src/uu/truncate" }
|
||||
tsort = { optional=true, path="src/uu/tsort" }
|
||||
tty = { optional=true, path="src/uu/tty" }
|
||||
uname = { optional=true, path="src/uu/uname" }
|
||||
unexpand = { optional=true, path="src/uu/unexpand" }
|
||||
uniq = { optional=true, path="src/uu/uniq" }
|
||||
unlink = { optional=true, path="src/uu/unlink" }
|
||||
uptime = { optional=true, path="src/uu/uptime" }
|
||||
users = { optional=true, path="src/uu/users" }
|
||||
wc = { optional=true, path="src/uu/wc" }
|
||||
who = { optional=true, path="src/uu/who" }
|
||||
whoami = { optional=true, path="src/uu/whoami" }
|
||||
yes = { optional=true, path="src/uu/yes" }
|
||||
uu_test = { optional=true, version="0.0.1", package="uu_test", path="src/uu/test" }
|
||||
#
|
||||
# * transitive dependency via 'failure'; pin to <= v0.3.30 to avoid increasing MinSRV to v1.33.0
|
||||
_backtrace = { version=">= 0.3.3, <= 0.3.30", package="backtrace" }
|
||||
arch = { optional=true, version="0.0.1", package="uu_arch", path="src/uu/arch" }
|
||||
base32 = { optional=true, version="0.0.1", package="uu_base32", path="src/uu/base32" }
|
||||
base64 = { optional=true, version="0.0.1", package="uu_base64", path="src/uu/base64" }
|
||||
basename = { optional=true, version="0.0.1", package="uu_basename", path="src/uu/basename" }
|
||||
cat = { optional=true, version="0.0.1", package="uu_cat", path="src/uu/cat" }
|
||||
chgrp = { optional=true, version="0.0.1", package="uu_chgrp", path="src/uu/chgrp" }
|
||||
chmod = { optional=true, version="0.0.1", package="uu_chmod", path="src/uu/chmod" }
|
||||
chown = { optional=true, version="0.0.1", package="uu_chown", path="src/uu/chown" }
|
||||
chroot = { optional=true, version="0.0.1", package="uu_chroot", path="src/uu/chroot" }
|
||||
cksum = { optional=true, version="0.0.1", package="uu_cksum", path="src/uu/cksum" }
|
||||
comm = { optional=true, version="0.0.1", package="uu_comm", path="src/uu/comm" }
|
||||
cp = { optional=true, version="0.0.1", package="uu_cp", path="src/uu/cp" }
|
||||
cut = { optional=true, version="0.0.1", package="uu_cut", path="src/uu/cut" }
|
||||
date = { optional=true, version="0.0.1", package="uu_date", path="src/uu/date" }
|
||||
df = { optional=true, version="0.0.1", package="uu_df", path="src/uu/df" }
|
||||
dircolors= { optional=true, version="0.0.1", package="uu_dircolors", path="src/uu/dircolors" }
|
||||
dirname = { optional=true, version="0.0.1", package="uu_dirname", path="src/uu/dirname" }
|
||||
du = { optional=true, version="0.0.1", package="uu_du", path="src/uu/du" }
|
||||
echo = { optional=true, version="0.0.1", package="uu_echo", path="src/uu/echo" }
|
||||
env = { optional=true, version="0.0.1", package="uu_env", path="src/uu/env" }
|
||||
expand = { optional=true, version="0.0.1", package="uu_expand", path="src/uu/expand" }
|
||||
expr = { optional=true, version="0.0.1", package="uu_expr", path="src/uu/expr" }
|
||||
factor = { optional=true, version="0.0.1", package="uu_factor", path="src/uu/factor" }
|
||||
false = { optional=true, version="0.0.1", package="uu_false", path="src/uu/false" }
|
||||
fmt = { optional=true, version="0.0.1", package="uu_fmt", path="src/uu/fmt" }
|
||||
fold = { optional=true, version="0.0.1", package="uu_fold", path="src/uu/fold" }
|
||||
groups = { optional=true, version="0.0.1", package="uu_groups", path="src/uu/groups" }
|
||||
hashsum = { optional=true, version="0.0.1", package="uu_hashsum", path="src/uu/hashsum" }
|
||||
head = { optional=true, version="0.0.1", package="uu_head", path="src/uu/head" }
|
||||
hostid = { optional=true, version="0.0.1", package="uu_hostid", path="src/uu/hostid" }
|
||||
hostname = { optional=true, version="0.0.1", package="uu_hostname", path="src/uu/hostname" }
|
||||
id = { optional=true, version="0.0.1", package="uu_id", path="src/uu/id" }
|
||||
install = { optional=true, version="0.0.1", package="uu_install", path="src/uu/install" }
|
||||
join = { optional=true, version="0.0.1", package="uu_join", path="src/uu/join" }
|
||||
kill = { optional=true, version="0.0.1", package="uu_kill", path="src/uu/kill" }
|
||||
link = { optional=true, version="0.0.1", package="uu_link", path="src/uu/link" }
|
||||
ln = { optional=true, version="0.0.1", package="uu_ln", path="src/uu/ln" }
|
||||
ls = { optional=true, version="0.0.1", package="uu_ls", path="src/uu/ls" }
|
||||
logname = { optional=true, version="0.0.1", package="uu_logname", path="src/uu/logname" }
|
||||
mkdir = { optional=true, version="0.0.1", package="uu_mkdir", path="src/uu/mkdir" }
|
||||
mkfifo = { optional=true, version="0.0.1", package="uu_mkfifo", path="src/uu/mkfifo" }
|
||||
mknod = { optional=true, version="0.0.1", package="uu_mknod", path="src/uu/mknod" }
|
||||
mktemp = { optional=true, version="0.0.1", package="uu_mktemp", path="src/uu/mktemp" }
|
||||
more = { optional=true, version="0.0.1", package="uu_more", path="src/uu/more" }
|
||||
mv = { optional=true, version="0.0.1", package="uu_mv", path="src/uu/mv" }
|
||||
nice = { optional=true, version="0.0.1", package="uu_nice", path="src/uu/nice" }
|
||||
nl = { optional=true, version="0.0.1", package="uu_nl", path="src/uu/nl" }
|
||||
nohup = { optional=true, version="0.0.1", package="uu_nohup", path="src/uu/nohup" }
|
||||
nproc = { optional=true, version="0.0.1", package="uu_nproc", path="src/uu/nproc" }
|
||||
numfmt = { optional=true, version="0.0.1", package="uu_numfmt", path="src/uu/numfmt" }
|
||||
od = { optional=true, version="0.0.1", package="uu_od", path="src/uu/od" }
|
||||
paste = { optional=true, version="0.0.1", package="uu_paste", path="src/uu/paste" }
|
||||
pathchk = { optional=true, version="0.0.1", package="uu_pathchk", path="src/uu/pathchk" }
|
||||
pinky = { optional=true, version="0.0.1", package="uu_pinky", path="src/uu/pinky" }
|
||||
printenv = { optional=true, version="0.0.1", package="uu_printenv", path="src/uu/printenv" }
|
||||
printf = { optional=true, version="0.0.1", package="uu_printf", path="src/uu/printf" }
|
||||
ptx = { optional=true, version="0.0.1", package="uu_ptx", path="src/uu/ptx" }
|
||||
pwd = { optional=true, version="0.0.1", package="uu_pwd", path="src/uu/pwd" }
|
||||
readlink = { optional=true, version="0.0.1", package="uu_readlink", path="src/uu/readlink" }
|
||||
realpath = { optional=true, version="0.0.1", package="uu_realpath", path="src/uu/realpath" }
|
||||
relpath = { optional=true, version="0.0.1", package="uu_relpath", path="src/uu/relpath" }
|
||||
rm = { optional=true, version="0.0.1", package="uu_rm", path="src/uu/rm" }
|
||||
rmdir = { optional=true, version="0.0.1", package="uu_rmdir", path="src/uu/rmdir" }
|
||||
seq = { optional=true, version="0.0.1", package="uu_seq", path="src/uu/seq" }
|
||||
shred = { optional=true, version="0.0.1", package="uu_shred", path="src/uu/shred" }
|
||||
shuf = { optional=true, version="0.0.1", package="uu_shuf", path="src/uu/shuf" }
|
||||
sleep = { optional=true, version="0.0.1", package="uu_sleep", path="src/uu/sleep" }
|
||||
sort = { optional=true, version="0.0.1", package="uu_sort", path="src/uu/sort" }
|
||||
split = { optional=true, version="0.0.1", package="uu_split", path="src/uu/split" }
|
||||
stat = { optional=true, version="0.0.1", package="uu_stat", path="src/uu/stat" }
|
||||
stdbuf = { optional=true, version="0.0.1", package="uu_stdbuf", path="src/uu/stdbuf" }
|
||||
sum = { optional=true, version="0.0.1", package="uu_sum", path="src/uu/sum" }
|
||||
sync = { optional=true, version="0.0.1", package="uu_sync", path="src/uu/sync" }
|
||||
tac = { optional=true, version="0.0.1", package="uu_tac", path="src/uu/tac" }
|
||||
tail = { optional=true, version="0.0.1", package="uu_tail", path="src/uu/tail" }
|
||||
tee = { optional=true, version="0.0.1", package="uu_tee", path="src/uu/tee" }
|
||||
timeout = { optional=true, version="0.0.1", package="uu_timeout", path="src/uu/timeout" }
|
||||
touch = { optional=true, version="0.0.1", package="uu_touch", path="src/uu/touch" }
|
||||
tr = { optional=true, version="0.0.1", package="uu_tr", path="src/uu/tr" }
|
||||
true = { optional=true, version="0.0.1", package="uu_true", path="src/uu/true" }
|
||||
truncate = { optional=true, version="0.0.1", package="uu_truncate", path="src/uu/truncate" }
|
||||
tsort = { optional=true, version="0.0.1", package="uu_tsort", path="src/uu/tsort" }
|
||||
tty = { optional=true, version="0.0.1", package="uu_tty", path="src/uu/tty" }
|
||||
uname = { optional=true, version="0.0.1", package="uu_uname", path="src/uu/uname" }
|
||||
unexpand = { optional=true, version="0.0.1", package="uu_unexpand", path="src/uu/unexpand" }
|
||||
uniq = { optional=true, version="0.0.1", package="uu_uniq", path="src/uu/uniq" }
|
||||
unlink = { optional=true, version="0.0.1", package="uu_unlink", path="src/uu/unlink" }
|
||||
uptime = { optional=true, version="0.0.1", package="uu_uptime", path="src/uu/uptime" }
|
||||
users = { optional=true, version="0.0.1", package="uu_users", path="src/uu/users" }
|
||||
wc = { optional=true, version="0.0.1", package="uu_wc", path="src/uu/wc" }
|
||||
who = { optional=true, version="0.0.1", package="uu_who", path="src/uu/who" }
|
||||
whoami = { optional=true, version="0.0.1", package="uu_whoami", path="src/uu/whoami" }
|
||||
yes = { optional=true, version="0.0.1", package="uu_yes", path="src/uu/yes" }
|
||||
#
|
||||
# * pinned transitive dependencies
|
||||
pin_backtrace = { version=">= 0.3.3, <= 0.3.30", package="backtrace" } ## via 'failure'; pin to <= v0.3.30 to avoid increasing MinSRV to v1.33.0
|
||||
pin_half = { version="1.1.0, < 1.4.0", package="half" } ## half v1.4.0 has compiler errors for MinSRV v1.31.0
|
||||
pin_same-file = { version="1.0.4, < 1.0.6", package="same-file" } ## same-file v1.0.6 has compiler errors for MinSRV v1.31.0
|
||||
pin_winapi-util = { version="0.1.2, < 0.1.3", package="winapi-util" } ## winapi-util v0.1.3 has compiler errors for MinSRV v1.31.0
|
||||
|
||||
[dev-dependencies]
|
||||
filetime = "0.2"
|
||||
@@ -324,17 +338,15 @@ regex = "1.0"
|
||||
tempdir = "0.3"
|
||||
time = "0.1"
|
||||
unindent = "0.1"
|
||||
uucore = { version="0.0.4", package="uucore", git="https://github.com/uutils/uucore.git", branch="master", features=["entries"] }
|
||||
|
||||
[target.'cfg(unix)'.dev-dependencies]
|
||||
rust-users = { version="0.10", package="users" }
|
||||
unix_socket = "0.5.0"
|
||||
|
||||
[[bin]]
|
||||
name = "uutils"
|
||||
path = "src/bin/uutils.rs"
|
||||
name = "coreutils"
|
||||
path = "src/bin/coreutils.rs"
|
||||
|
||||
[[test]]
|
||||
name = "tests"
|
||||
|
||||
[patch.crates-io]
|
||||
uucore = { git = "https://github.com/uutils/uucore/", tag = "0.0.2" }
|
||||
|
||||
+60
-23
@@ -1,6 +1,4 @@
|
||||
# spell-checker:ignore (cargo-make) duckscript macos
|
||||
# spell-checker:ignore (rust) clippy
|
||||
# spell-checker:ignore (uutils) uutil uutils
|
||||
# spell-checker:ignore (cargo-make) duckscript
|
||||
|
||||
[config]
|
||||
min_version = "0.26.2"
|
||||
@@ -81,10 +79,16 @@ if is_empty "${args_examples}"
|
||||
end_if
|
||||
set_env CARGO_MAKE_TASK_BUILD_EXAMPLES_ARGS "${args_examples}"
|
||||
# * rebuild for 'utils' target
|
||||
args_utils = replace ${args} ";" " -p"
|
||||
if not is_empty "${args_utils}"
|
||||
args_utils = set "-p${args_utils}"
|
||||
end_if
|
||||
args_utils_list = split "${args}" ";"
|
||||
for arg in "${args_utils_list}"
|
||||
if not is_empty "${arg}"
|
||||
if not starts_with "${arg}" "uu_"
|
||||
arg = set "uu_${arg}"
|
||||
end_if
|
||||
args_utils = set "${args_utils} -p${arg}"
|
||||
end_if
|
||||
end
|
||||
args_utils = trim "${args_utils}"
|
||||
set_env CARGO_MAKE_TASK_BUILD_UTILS_ARGS "${args_utils}"
|
||||
'''
|
||||
]
|
||||
@@ -118,7 +122,7 @@ dependencies = [
|
||||
]
|
||||
|
||||
[tasks.build-examples]
|
||||
description = "## Build (release-mode) project example(s); usage: `cargo make (build-examples | examples | example) [EXAMPLE]...`"
|
||||
description = "## Build (release-mode) project example(s); usage: `cargo make (build-examples | examples) [EXAMPLE]...`"
|
||||
category = "[project]"
|
||||
dependencies = [
|
||||
"core::pre-build",
|
||||
@@ -135,11 +139,18 @@ dependencies = [
|
||||
"core::post-build",
|
||||
]
|
||||
|
||||
[tasks.build-release]
|
||||
alias = "build"
|
||||
|
||||
[tasks.debug]
|
||||
alias = "build-debug"
|
||||
|
||||
[tasks.example]
|
||||
alias = "build-examples"
|
||||
description = "hidden singular-form alias for 'examples'"
|
||||
category = "[project]"
|
||||
dependencies = [
|
||||
"examples",
|
||||
]
|
||||
|
||||
[tasks.examples]
|
||||
alias = "build-examples"
|
||||
@@ -148,11 +159,10 @@ alias = "build-examples"
|
||||
alias = "build-features"
|
||||
|
||||
[tasks.format]
|
||||
description = "## Format code files (with `cargo fmt`)"
|
||||
description = "## Format code files (with `cargo fmt`; includes tests)"
|
||||
category = "[project]"
|
||||
dependencies = [
|
||||
"action-format",
|
||||
"action-determine-tests",
|
||||
"action-format-tests",
|
||||
]
|
||||
|
||||
@@ -205,10 +215,7 @@ command = "cargo"
|
||||
args = ["uninstall"]
|
||||
|
||||
[tasks.util]
|
||||
alias = "utils"
|
||||
|
||||
[tasks.utils]
|
||||
description = "## Build (individual; release-mode) utilities; usage: `cargo make (util | utils | uutil | uutils) [UTIL_NAME...]`"
|
||||
description = "## Build (individual; release-mode) utilities; usage: `cargo make (util | uutil) [UTIL_NAME...]`"
|
||||
category = "[project]"
|
||||
dependencies = [
|
||||
"core::pre-build",
|
||||
@@ -217,11 +224,22 @@ dependencies = [
|
||||
"core::post-build",
|
||||
]
|
||||
|
||||
[tasks.utils]
|
||||
description = "hidden plural-form alias for 'util'"
|
||||
category = "[project]"
|
||||
dependencies = [
|
||||
"util",
|
||||
]
|
||||
|
||||
[tasks.uutil]
|
||||
alias = "utils"
|
||||
|
||||
[tasks.uutils]
|
||||
alias = "utils"
|
||||
description = "hidden plural-form alias for 'util'"
|
||||
category = "[project]"
|
||||
dependencies = [
|
||||
"util",
|
||||
]
|
||||
|
||||
### actions
|
||||
|
||||
@@ -247,6 +265,9 @@ args = ["build", "--release", "--no-default-features", "--features", "${CARGO_MA
|
||||
|
||||
[tasks.action-build-utils]
|
||||
description = "Build individual utilities"
|
||||
dependencies = [
|
||||
"action-determine-utils",
|
||||
]
|
||||
command = "cargo"
|
||||
# args = ["build", "@@remove-empty(CARGO_MAKE_TASK_BUILD_UTILS_ARGS)" ]
|
||||
args = ["build", "--release", "@@split(CARGO_MAKE_TASK_BUILD_UTILS_ARGS, )" ]
|
||||
@@ -263,11 +284,21 @@ script = [
|
||||
package_options = get_env CARGO_MAKE_TASK_BUILD_UTILS_ARGS
|
||||
if is_empty "${package_options}"
|
||||
show_utils = get_env CARGO_MAKE_VAR_SHOW_UTILS
|
||||
result = exec "${show_utils}"
|
||||
features = get_env CARGO_MAKE_VAR_BUILD_TEST_FEATURES
|
||||
if not is_empty "${features}"
|
||||
result = exec "${show_utils}" --features "${features}"
|
||||
else
|
||||
result = exec "${show_utils}"
|
||||
endif
|
||||
set_env CARGO_MAKE_VAR_UTILS ${result.stdout}
|
||||
utils = array %{result.stdout}
|
||||
for util in ${utils}
|
||||
package_options = set "${package_options} -p${util}"
|
||||
if not is_empty "${util}"
|
||||
if not starts_with "${util}" "uu_"
|
||||
util = set "uu_${util}"
|
||||
end_if
|
||||
package_options = set "${package_options} -p${util}"
|
||||
end_if
|
||||
end
|
||||
package_options = trim "${package_options}"
|
||||
end_if
|
||||
@@ -281,10 +312,13 @@ script = [
|
||||
'''
|
||||
test_files = glob_array tests/**/*.rs
|
||||
for file in ${test_files}
|
||||
if is_empty "${tests}"
|
||||
tests = set "${file}"
|
||||
else
|
||||
tests = set "${tests} ${file}"
|
||||
file = replace "${file}" "\\" "/"
|
||||
if not is_empty ${file}
|
||||
if is_empty "${tests}"
|
||||
tests = set "${file}"
|
||||
else
|
||||
tests = set "${tests} ${file}"
|
||||
end_if
|
||||
end_if
|
||||
end
|
||||
set_env CARGO_MAKE_VAR_TESTS "${tests}"
|
||||
@@ -298,6 +332,9 @@ args = ["fmt"]
|
||||
|
||||
[tasks.action-format-tests]
|
||||
description = "`cargo fmt` tests"
|
||||
dependencies = [
|
||||
"action-determine-tests",
|
||||
]
|
||||
command = "cargo"
|
||||
args = ["fmt", "--", "@@split(CARGO_MAKE_VAR_TESTS, )"]
|
||||
|
||||
@@ -342,7 +379,7 @@ script = [
|
||||
target = array_pop ${line_segments}
|
||||
target = trim ${target}
|
||||
l = length ${target}
|
||||
r = range 0 20
|
||||
r = range 0 18
|
||||
spacing = set ""
|
||||
for i in ${r}
|
||||
if greater_than ${i} ${l}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// spell-checker:ignore (vars) krate
|
||||
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
@@ -8,66 +10,89 @@ pub fn main() {
|
||||
println!("cargo:rustc-cfg=build={:?}", profile);
|
||||
}
|
||||
|
||||
let feature_prefix = "CARGO_FEATURE_";
|
||||
let env_feature_prefix: &str = "CARGO_FEATURE_";
|
||||
let feature_prefix: &str = "feat_";
|
||||
let override_prefix: &str = "uu_";
|
||||
|
||||
let out_dir = env::var("OUT_DIR").unwrap();
|
||||
|
||||
let mut crates = Vec::new();
|
||||
for (key, val) in env::vars() {
|
||||
if val == "1" && key.starts_with(feature_prefix) {
|
||||
let krate = key[feature_prefix.len()..].to_lowercase();
|
||||
if val == "1" && key.starts_with(env_feature_prefix) {
|
||||
let krate = key[env_feature_prefix.len()..].to_lowercase();
|
||||
match krate.as_ref() {
|
||||
"default" | "macos" | "unix" | "windows" => continue,
|
||||
"nightly" | "test_unimplemented" => continue,
|
||||
s if s.starts_with("feat_") => continue,
|
||||
_ => {}
|
||||
"default" | "macos" | "unix" | "windows" => continue, // common/standard feature names
|
||||
"nightly" | "test_unimplemented" => continue, // crate-local custom features
|
||||
"test" => continue, // over-ridden with 'uu_test' to avoid collision with rust core crate 'test'
|
||||
s if s.starts_with(feature_prefix) => continue, // crate feature sets
|
||||
_ => {} // util feature name
|
||||
}
|
||||
crates.push(krate.to_string());
|
||||
}
|
||||
}
|
||||
crates.sort();
|
||||
|
||||
let mut cf = File::create(Path::new(&out_dir).join("uutils_crates.rs")).unwrap();
|
||||
let mut mf = File::create(Path::new(&out_dir).join("uutils_map.rs")).unwrap();
|
||||
|
||||
mf.write_all(
|
||||
"type UtilityMap = HashMap<&'static str, fn(Vec<String>) -> i32>;\n\
|
||||
\n\
|
||||
fn util_map() -> UtilityMap {\n\
|
||||
\tlet mut map: UtilityMap = HashMap::new();\n\
|
||||
"
|
||||
type UtilityMap = HashMap<&'static str, fn(Vec<String>) -> i32>;
|
||||
|
||||
fn util_map() -> UtilityMap {
|
||||
let mut map: UtilityMap = HashMap::new();\n"
|
||||
.as_bytes(),
|
||||
.as_bytes(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
for krate in crates {
|
||||
cf.write_all(format!("extern crate uu_{krate};\n", krate = krate).as_bytes())
|
||||
.unwrap();
|
||||
|
||||
match krate.as_ref() {
|
||||
"hashsum" => {
|
||||
mf.write_all(
|
||||
"map.insert(\"hashsum\", uu_hashsum::uumain);
|
||||
map.insert(\"md5sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha1sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha224sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha256sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha384sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha512sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha3sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha3-224sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha3-256sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha3-384sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha3-512sum\", uu_hashsum::uumain);
|
||||
map.insert(\"shake128sum\", uu_hashsum::uumain);
|
||||
map.insert(\"shake256sum\", uu_hashsum::uumain);\n"
|
||||
.as_bytes(),
|
||||
k if k.starts_with(override_prefix) => mf
|
||||
.write_all(
|
||||
format!(
|
||||
"\tmap.insert(\"{k}\", {krate}::uumain);\n",
|
||||
k = krate[override_prefix.len()..].to_string(),
|
||||
krate = krate
|
||||
)
|
||||
.as_bytes(),
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
.unwrap(),
|
||||
"false" | "true" => mf
|
||||
.write_all(
|
||||
format!(
|
||||
"\tmap.insert(\"{krate}\", r#{krate}::uumain);\n",
|
||||
krate = krate
|
||||
)
|
||||
.as_bytes(),
|
||||
)
|
||||
.unwrap(),
|
||||
"hashsum" => mf
|
||||
.write_all(
|
||||
format!(
|
||||
"\
|
||||
\tmap.insert(\"{krate}\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"md5sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha1sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha224sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha256sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha384sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha512sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha3sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha3-224sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha3-256sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha3-384sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"sha3-512sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"shake128sum\", {krate}::uumain);\n\
|
||||
\t\tmap.insert(\"shake256sum\", {krate}::uumain);\n\
|
||||
",
|
||||
krate = krate
|
||||
)
|
||||
.as_bytes(),
|
||||
)
|
||||
.unwrap(),
|
||||
_ => mf
|
||||
.write_all(
|
||||
format!(
|
||||
"map.insert(\"{krate}\", uu_{krate}::uumain);\n",
|
||||
"\tmap.insert(\"{krate}\", {krate}::uumain);\n",
|
||||
krate = krate
|
||||
)
|
||||
.as_bytes(),
|
||||
@@ -78,6 +103,5 @@ pub fn main() {
|
||||
|
||||
mf.write_all(b"map\n}\n").unwrap();
|
||||
|
||||
cf.flush().unwrap();
|
||||
mf.flush().unwrap();
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
include!("../src/bin/coreutils.rs");
|
||||
@@ -1 +0,0 @@
|
||||
include!("../src/bin/uutils.rs");
|
||||
@@ -1 +0,0 @@
|
||||
include!("../src/bin/uutils.rs");
|
||||
@@ -0,0 +1 @@
|
||||
include!("../src/bin/coreutils.rs");
|
||||
@@ -1,18 +1,9 @@
|
||||
/*
|
||||
* This file is part of the uutils coreutils package.
|
||||
*
|
||||
* (c) Michael Gehring <mg@ebfe.org>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
// spell-checker:ignore (acronyms/names) Gehring
|
||||
// spell-checker:ignore (rustlang/crates) clippy concat rustlang termwidth textwrap
|
||||
// spell-checker:ignore (uutils) coreutils sigpipe uucore uumain uutils
|
||||
// spell-checker:ignore (shell) busybox symlinks
|
||||
|
||||
include!(concat!(env!("OUT_DIR"), "/uutils_crates.rs"));
|
||||
// This file is part of the uutils coreutils package.
|
||||
//
|
||||
// (c) Michael Gehring <mg@ebfe.org>
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE
|
||||
// file that was distributed with this source code.
|
||||
|
||||
extern crate lazy_static;
|
||||
extern crate textwrap;
|
||||
@@ -53,7 +44,7 @@ fn usage(utils: &UtilityMap) {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
uucore::panic::install_sigpipe_hook();
|
||||
uucore::panic::mute_sigpipe_panic();
|
||||
|
||||
let utils = util_map();
|
||||
let mut args: Vec<String> = uucore::args().collect();
|
||||
@@ -1,36 +0,0 @@
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
|
||||
static TEMPLATE: &str = "\
|
||||
extern crate uu_@UTIL_CRATE@;
|
||||
extern crate uucore;
|
||||
|
||||
use std::io::Write;
|
||||
use uu_@UTIL_CRATE@::uumain;
|
||||
|
||||
fn main() {
|
||||
uucore::panic::install_sigpipe_hook();
|
||||
|
||||
let code = uumain(uucore::args().collect());
|
||||
// Since stdout is line-buffered by default, we need to ensure any pending
|
||||
// writes are flushed before exiting. Ideally, this should be enforced by
|
||||
// each utility.
|
||||
//
|
||||
// See: https://github.com/rust-lang/rust/issues/23818
|
||||
//
|
||||
std::io::stdout().flush().expect(\"could not flush stdout\");
|
||||
std::process::exit(code);
|
||||
}
|
||||
";
|
||||
|
||||
pub fn main() {
|
||||
let out_dir = env::var("OUT_DIR").unwrap();
|
||||
let pkgname = env::var("CARGO_PKG_NAME").unwrap();
|
||||
|
||||
let main = TEMPLATE.replace("@UTIL_CRATE@", &pkgname);
|
||||
let mut file = File::create(&Path::new(&out_dir).join("main.rs")).unwrap();
|
||||
|
||||
write!(file, "{}", main).unwrap();
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
include!(concat!(env!("OUT_DIR"), "/main.rs"));
|
||||
+12
-6
@@ -1,18 +1,24 @@
|
||||
[package]
|
||||
name = "arch"
|
||||
name = "uu_arch"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
authors = ["uutils developers"]
|
||||
license = "MIT"
|
||||
build = "../../common/mkmain.rs"
|
||||
description = "arch ~ (uutils) display machine architecture"
|
||||
|
||||
homepage = "https://github.com/uutils/coreutils"
|
||||
repository = "https://github.com/uutils/coreutils/tree/master/src/uu/arch"
|
||||
keywords = ["coreutils", "uutils", "cross-platform", "cli", "utility"]
|
||||
categories = ["command-line-utilities"]
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
name = "uu_arch"
|
||||
path = "src/arch.rs"
|
||||
|
||||
[dependencies]
|
||||
platform-info = "0.0.1"
|
||||
uucore = "0.0.2"
|
||||
uucore = { version="0.0.4", package="uucore", git="https://github.com/uutils/uucore.git", branch="canary" }
|
||||
uucore_procs = { version="0.0.4", package="uucore_procs", git="https://github.com/uutils/uucore.git", branch="canary" }
|
||||
|
||||
[[bin]]
|
||||
name = "arch"
|
||||
path = "../../common/uumain.rs"
|
||||
path = "src/main.rs"
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#![crate_name = "uu_arch"]
|
||||
|
||||
// This file is part of the uutils coreutils package.
|
||||
//
|
||||
// (c) Smigle00 <smigle00@gmail.com>
|
||||
@@ -7,7 +5,6 @@
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE
|
||||
// file that was distributed with this source code.
|
||||
//
|
||||
|
||||
extern crate platform_info;
|
||||
#[macro_use]
|
||||
@@ -20,7 +17,7 @@ static SUMMARY: &str = "Determine architecture name for current machine.";
|
||||
static LONG_HELP: &str = "";
|
||||
|
||||
pub fn uumain(args: Vec<String>) -> i32 {
|
||||
new_coreopts!(SYNTAX, SUMMARY, LONG_HELP).parse(args);
|
||||
app!(SYNTAX, SUMMARY, LONG_HELP).parse(args);
|
||||
let uts = return_if_err!(1, PlatformInfo::new());
|
||||
println!("{}", uts.machine().trim());
|
||||
0
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uucore_procs::main!(uu_arch); // spell-checker:ignore procs uucore
|
||||
@@ -1,19 +1,23 @@
|
||||
[package]
|
||||
name = "base32"
|
||||
name = "uu_base32"
|
||||
version = "0.0.1"
|
||||
authors = []
|
||||
authors = ["uutils developers"]
|
||||
license = "MIT"
|
||||
build = "../../common/mkmain.rs"
|
||||
description = "base32 ~ (uutils) decode/encode input (base32-encoding)"
|
||||
|
||||
homepage = "https://github.com/uutils/coreutils"
|
||||
repository = "https://github.com/uutils/coreutils/tree/master/src/uu/base32"
|
||||
keywords = ["coreutils", "uutils", "cross-platform", "cli", "utility"]
|
||||
categories = ["command-line-utilities"]
|
||||
edition = "2018"
|
||||
|
||||
[lib]
|
||||
name = "uu_base32"
|
||||
path = "src/base32.rs"
|
||||
|
||||
[dependencies]
|
||||
uucore = { version = "0.0.2", features = ["encoding"] }
|
||||
## optional
|
||||
clippy = { version = "0.0.212", optional = true }
|
||||
uucore = { version="0.0.4", package="uucore", git="https://github.com/uutils/uucore.git", branch="canary", features = ["encoding"] }
|
||||
uucore_procs = { version="0.0.4", package="uucore_procs", git="https://github.com/uutils/uucore.git", branch="canary" }
|
||||
|
||||
[[bin]]
|
||||
name = "base32"
|
||||
path = "../../common/uumain.rs"
|
||||
path = "src/main.rs"
|
||||
|
||||
@@ -4,15 +4,11 @@
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE file
|
||||
// that was distributed with this source code.
|
||||
//
|
||||
|
||||
#![crate_name = "uu_base32"]
|
||||
|
||||
#[macro_use]
|
||||
extern crate uucore;
|
||||
use uucore::encoding::Format;
|
||||
|
||||
#[path = "../../base64/src/base_common.rs"]
|
||||
mod base_common;
|
||||
|
||||
static SYNTAX: &str = "[OPTION]... [FILE]";
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
// This file is part of the uutils coreutils package.
|
||||
//
|
||||
// (c) Jordy Dickinson <jordy.dickinson@gmail.com>
|
||||
// (c) Jian Zeng <anonymousknight96@gmail.com>
|
||||
// (c) Alex Lyon <arcterus@mail.com>
|
||||
//
|
||||
// For the full copyright and license information, please view the LICENSE file
|
||||
// that was distributed with this source code.
|
||||
|
||||
use std::fs::File;
|
||||
use std::io::{stdin, BufReader, Read};
|
||||
use std::path::Path;
|
||||
|
||||
use uucore::encoding::{wrap_print, Data, Format};
|
||||
|
||||
pub fn execute(
|
||||
args: Vec<String>,
|
||||
syntax: &str,
|
||||
summary: &str,
|
||||
long_help: &str,
|
||||
format: Format,
|
||||
) -> i32 {
|
||||
let matches = app!(syntax, summary, long_help)
|
||||
.optflag("d", "decode", "decode data")
|
||||
.optflag(
|
||||
"i",
|
||||
"ignore-garbage",
|
||||
"when decoding, ignore non-alphabetic characters",
|
||||
)
|
||||
.optopt(
|
||||
"w",
|
||||
"wrap",
|
||||
"wrap encoded lines after COLS character (default 76, 0 to disable wrapping)",
|
||||
"COLS",
|
||||
)
|
||||
.parse(args);
|
||||
|
||||
let line_wrap = matches.opt_str("wrap").map(|s| match s.parse() {
|
||||
Ok(n) => n,
|
||||
Err(e) => {
|
||||
crash!(1, "invalid wrap size: ‘{}’: {}", s, e);
|
||||
}
|
||||
});
|
||||
let ignore_garbage = matches.opt_present("ignore-garbage");
|
||||
let decode = matches.opt_present("decode");
|
||||
|
||||
if matches.free.len() > 1 {
|
||||
show_usage_error!("extra operand ‘{}’", matches.free[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if matches.free.is_empty() || &matches.free[0][..] == "-" {
|
||||
let stdin_raw = stdin();
|
||||
handle_input(
|
||||
&mut stdin_raw.lock(),
|
||||
format,
|
||||
line_wrap,
|
||||
ignore_garbage,
|
||||
decode,
|
||||
);
|
||||
} else {
|
||||
let path = Path::new(matches.free[0].as_str());
|
||||
let file_buf = safe_unwrap!(File::open(&path));
|
||||
let mut input = BufReader::new(file_buf);
|
||||
handle_input(&mut input, format, line_wrap, ignore_garbage, decode);
|
||||
};
|
||||
|
||||
0
|
||||
}
|
||||
|
||||
fn handle_input<R: Read>(
|
||||
input: &mut R,
|
||||
format: Format,
|
||||
line_wrap: Option<usize>,
|
||||
ignore_garbage: bool,
|
||||
decode: bool,
|
||||
) {
|
||||
let mut data = Data::new(input, format).ignore_garbage(ignore_garbage);
|
||||
if let Some(wrap) = line_wrap {
|
||||
data = data.line_wrap(wrap);
|
||||
}
|
||||
|
||||
if !decode {
|
||||
let encoded = data.encode();
|
||||
wrap_print(&data, encoded);
|
||||
} else {
|
||||
match data.decode() {
|
||||
Ok(s) => print!("{}", String::from_utf8(s).unwrap()),
|
||||
Err(_) => crash!(1, "invalid input"),
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user