Compare commits
43 Commits
last-topgr
...
v10.1.0-cd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8731fd2b3f | ||
|
|
9233846479 | ||
|
|
94bdb8c3fd | ||
|
|
632fcb5b77 | ||
|
|
55ba2d30c1 | ||
|
|
ff66611ec0 | ||
|
|
edc3dd6b0b | ||
|
|
623a11cf21 | ||
|
|
7a83f38ca8 | ||
|
|
9a19b547c6 | ||
|
|
aae5c3b631 | ||
|
|
3be75bf399 | ||
|
|
a7c2262537 | ||
|
|
16a7d5f00b | ||
|
|
be0984cdf3 | ||
|
|
fb13543e44 | ||
|
|
c406fe2775 | ||
|
|
ce0c0c4314 | ||
|
|
9105a8aacf | ||
|
|
f26e48acca | ||
|
|
b81f28a73a | ||
|
|
6cb9e96151 | ||
|
|
027c99ea6b | ||
|
|
c191c073a0 | ||
|
|
1bdc948a81 | ||
|
|
381f13fe9c | ||
|
|
88e43a12d6 | ||
|
|
b9d93e203a | ||
|
|
f88998faf5 | ||
|
|
96c22ffdf5 | ||
|
|
dc07144918 | ||
|
|
d8bac65317 | ||
|
|
18cec5c9fa | ||
|
|
5a6f0d2e15 | ||
|
|
d9e49312b6 | ||
|
|
0b83333ca7 | ||
|
|
bf7f9a64ee | ||
|
|
6a3de81f1f | ||
|
|
3a5cc8a388 | ||
|
|
639c7fd422 | ||
|
|
31aae2198c | ||
|
|
573bae7511 | ||
|
|
d7891c4754 |
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: GitHub Discussions
|
||||||
|
url: https://github.com/topgrade-rs/topgrade/discussions
|
||||||
|
about: Please ask and answer questions here.
|
||||||
24
.github/workflows/build-and-test.yml
vendored
24
.github/workflows/build-and-test.yml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: Cargo Build & Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build_and_test:
|
|
||||||
name: Rust project - latest
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
toolchain:
|
|
||||||
- stable
|
|
||||||
- beta
|
|
||||||
- nightly
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }}
|
|
||||||
- run: cargo build --verbose
|
|
||||||
- run: cargo test --verbose
|
|
||||||
27
.github/workflows/check-semver.yml
vendored
Normal file
27
.github/workflows/check-semver.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [published, edited]
|
||||||
|
|
||||||
|
name: Check SemVer compliance
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
prepare:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: nightly-2022-08-03
|
||||||
|
override: true
|
||||||
|
components: rustfmt, clippy
|
||||||
|
|
||||||
|
semver:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: install
|
||||||
|
args: --git https://github.com/rust-lang/rust-semverver
|
||||||
|
- run: eval "current_version=$(grep -e '^version = .*$' Cargo.toml | cut -d ' ' -f 3)"
|
||||||
|
- run: cargo semver | tee semver_out
|
||||||
|
- run: (head -n 1 semver_out | grep "\-> $current_version") || (echo "versioning mismatch" && return 1)
|
||||||
19
.github/workflows/crates-publish.yml
vendored
19
.github/workflows/crates-publish.yml
vendored
@@ -1,11 +1,16 @@
|
|||||||
on:
|
on:
|
||||||
|
# workflow_run:
|
||||||
|
# workflows: ["Check SemVer compliance"]
|
||||||
|
# types:
|
||||||
|
# - completed
|
||||||
release:
|
release:
|
||||||
types: [published, edited]
|
types: [published, edited]
|
||||||
|
|
||||||
name: Check SemVer compliance and publish on release
|
name: Publish to crates.io on release
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
prepare:
|
prepare:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions-rs/toolchain@v1
|
- uses: actions-rs/toolchain@v1
|
||||||
@@ -13,18 +18,8 @@ jobs:
|
|||||||
toolchain: nightly-2022-08-03
|
toolchain: nightly-2022-08-03
|
||||||
override: true
|
override: true
|
||||||
|
|
||||||
semver:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions-rs/cargo@v1
|
|
||||||
with:
|
|
||||||
command: install
|
|
||||||
args: --git https://github.com/rust-lang/rust-semverver
|
|
||||||
- run: eval "current_version=$(grep -e '^version = .*$' Cargo.toml | cut -d ' ' -f 3)"
|
|
||||||
- run: cargo semver | tee semver_out
|
|
||||||
- run: (head -n 1 semver_out | grep "\-> $current_version") || (echo "versioning mismatch" && return 1)
|
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: katyo/publish-crates@v1
|
- uses: katyo/publish-crates@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
70
.github/workflows/release-cross.yml
vendored
Normal file
70
.github/workflows/release-cross.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
name: Publish release files for non-cd-native environments
|
||||||
|
|
||||||
|
on:
|
||||||
|
# workflow_run:
|
||||||
|
# workflows: ["Check SemVer compliance"]
|
||||||
|
# types:
|
||||||
|
# - completed
|
||||||
|
release:
|
||||||
|
types: [ created ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
target: [ "aarch64-unknown-linux-gnu", "armv7-unknown-linux-gnueabihf", "x86_64-unknown-linux-musl", "aarch64-unknown-linux-musl", "x86_64-unknown-freebsd", ]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
profile: minimal
|
||||||
|
default: true
|
||||||
|
override: true
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
components: rustfmt, clippy
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Check format
|
||||||
|
with:
|
||||||
|
use-cross: true
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Run clippy
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
use-cross: true
|
||||||
|
args: --all-targets --locked --target ${{matrix.target}} -- -D warnings
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Run clippy (All features)
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
use-cross: true
|
||||||
|
args: --locked --all-features --target ${{matrix.target}} -- -D warnings
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Run tests
|
||||||
|
with:
|
||||||
|
command: test
|
||||||
|
use-cross: true
|
||||||
|
args: --target ${{matrix.target}}
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Build
|
||||||
|
with:
|
||||||
|
command: build
|
||||||
|
use-cross: true
|
||||||
|
args: --release --all-features --target ${{matrix.target}}
|
||||||
|
- name: Rename Release
|
||||||
|
run: |
|
||||||
|
mkdir assets
|
||||||
|
FILENAME=topgrade-${{github.event.release.tag_name}}-${{matrix.target}}
|
||||||
|
mv target/${{matrix.target}}/release/topgrade assets
|
||||||
|
cd assets
|
||||||
|
tar --format=ustar -czf $FILENAME.tar.gz topgrade
|
||||||
|
rm topgrade
|
||||||
|
ls .
|
||||||
|
- name: Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
files: assets/*
|
||||||
28
.github/workflows/release-packaging.yaml
vendored
28
.github/workflows/release-packaging.yaml
vendored
@@ -1,28 +0,0 @@
|
|||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
name: Release Packaging
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
name: Release Packaging
|
|
||||||
env:
|
|
||||||
PROJECT_NAME_UNDERSCORE: topgrade-rs
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
profile: minimal
|
|
||||||
toolchain: stable
|
|
||||||
override: true
|
|
||||||
- name: Release Build
|
|
||||||
run: cargo build --release
|
|
||||||
- name: 'Upload Artifact'
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: ${{ env.PROJECT_NAME_UNDERSCORE }}
|
|
||||||
path: target/release/${{ env.PROJECT_NAME_UNDERSCORE }}
|
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
name: CD Win/MacOS Native
|
name: Publish release files for CD native environments
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
# workflow_run:
|
||||||
|
# workflows: ["Check SemVer compliance"]
|
||||||
|
# types:
|
||||||
|
# - completed
|
||||||
release:
|
release:
|
||||||
types: [ created ]
|
types: [ created ]
|
||||||
|
|
||||||
@@ -10,7 +13,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [ macos-latest, windows-latest ]
|
platform: [ ubuntu-latest, macos-latest, windows-latest ]
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
@@ -20,6 +23,21 @@ jobs:
|
|||||||
profile: minimal
|
profile: minimal
|
||||||
override: true
|
override: true
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Check format
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Run clippy
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: --all-targets --locked -- -D warnings
|
||||||
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
|
name: Run clippy (All features)
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: --all-targets --locked --all-features -- -D warnings
|
||||||
- uses: actions-rs/cargo@v1.0.1
|
- uses: actions-rs/cargo@v1.0.1
|
||||||
name: Run tests
|
name: Run tests
|
||||||
with:
|
with:
|
||||||
24
.github/workflows/rust-ubuntu.yml
vendored
24
.github/workflows/rust-ubuntu.yml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: Rust
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ "master", "dev" ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ "master", "dev" ]
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Build
|
|
||||||
run: cargo build --verbose
|
|
||||||
- name: Fmt
|
|
||||||
run: cargo fmt --check --all
|
|
||||||
- name: Run tests
|
|
||||||
run: cargo test --verbose
|
|
||||||
4
.github/workflows/test.yaml
vendored
4
.github/workflows/test.yaml
vendored
@@ -1,10 +1,12 @@
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
|
||||||
name: Test with Code Coverage
|
name: Test with Code Coverage
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|||||||
22
.github/workflows/update_aur.yml
vendored
Normal file
22
.github/workflows/update_aur.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Publish to AUR
|
||||||
|
|
||||||
|
on:
|
||||||
|
# workflow_run:
|
||||||
|
# workflows: ["Check SemVer compliance"]
|
||||||
|
# types:
|
||||||
|
# - completed
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "v*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
aur-publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Publish AUR package
|
||||||
|
uses: ATiltedTree/create-aur-release@v1
|
||||||
|
with:
|
||||||
|
package_name: topgrade
|
||||||
|
commit_username: "Thomas Schönauer"
|
||||||
|
commit_email: t.schoenauer@hgs-wt.at
|
||||||
|
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
|
||||||
6
.vscode/launch.json
vendored
6
.vscode/launch.json
vendored
@@ -12,11 +12,11 @@
|
|||||||
"cargo": {
|
"cargo": {
|
||||||
"args": [
|
"args": [
|
||||||
"build",
|
"build",
|
||||||
"--bin=topgrade",
|
"--bin=topgrade-rs",
|
||||||
"--package=topgrade"
|
"--package=topgrade-rs"
|
||||||
],
|
],
|
||||||
"filter": {
|
"filter": {
|
||||||
"name": "topgrade",
|
"name": "topgrade-rs",
|
||||||
"kind": "bin"
|
"kind": "bin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
301
Cargo.lock
generated
301
Cargo.lock
generated
@@ -39,9 +39,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.65"
|
version = "1.0.66"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
|
checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-broadcast"
|
name = "async-broadcast"
|
||||||
@@ -81,16 +81,16 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-io"
|
name = "async-io"
|
||||||
version = "1.9.0"
|
version = "1.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "83e21f3a490c72b3b0cf44962180e60045de2925d8dff97918f7ee43c8f637c7"
|
checksum = "e8121296a9f05be7f34aa4196b1747243b3b62e048bb7906f644f3fbfc490cf7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"async-lock",
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"concurrent-queue",
|
"concurrent-queue",
|
||||||
"futures-lite",
|
"futures-lite",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"once_cell",
|
|
||||||
"parking",
|
"parking",
|
||||||
"polling",
|
"polling",
|
||||||
"slab",
|
"slab",
|
||||||
@@ -101,11 +101,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-lock"
|
name = "async-lock"
|
||||||
version = "2.5.0"
|
version = "2.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6"
|
checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"event-listener",
|
"event-listener",
|
||||||
|
"futures-lite",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -127,9 +128,9 @@ checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-trait"
|
name = "async-trait"
|
||||||
version = "0.1.57"
|
version = "0.1.58"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f"
|
checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -155,9 +156,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "base64"
|
name = "base64"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
|
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
@@ -173,9 +174,9 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bumpalo"
|
name = "bumpalo"
|
||||||
version = "3.11.0"
|
version = "3.11.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
|
checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
@@ -197,9 +198,9 @@ checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.73"
|
version = "1.0.74"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
|
checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
@@ -224,16 +225,16 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "3.2.22"
|
version = "3.1.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750"
|
checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"atty",
|
"atty",
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"clap_derive",
|
"clap_derive",
|
||||||
"clap_lex",
|
"clap_lex",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
"once_cell",
|
"lazy_static",
|
||||||
"strsim",
|
"strsim",
|
||||||
"termcolor",
|
"termcolor",
|
||||||
"textwrap",
|
"textwrap",
|
||||||
@@ -241,9 +242,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_derive"
|
name = "clap_derive"
|
||||||
version = "3.2.18"
|
version = "3.1.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
|
checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck 0.4.0",
|
"heck 0.4.0",
|
||||||
"proc-macro-error",
|
"proc-macro-error",
|
||||||
@@ -320,9 +321,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cxx"
|
name = "cxx"
|
||||||
version = "1.0.79"
|
version = "1.0.80"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3f83d0ebf42c6eafb8d7c52f7e5f2d3003b89c7aa4fd2b79229209459a849af8"
|
checksum = "6b7d4e43b25d3c994662706a1d4fcfc32aaa6afd287502c111b237093bb23f3a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"cxxbridge-flags",
|
"cxxbridge-flags",
|
||||||
@@ -332,9 +333,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cxx-build"
|
name = "cxx-build"
|
||||||
version = "1.0.79"
|
version = "1.0.80"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "07d050484b55975889284352b0ffc2ecbda25c0c55978017c132b29ba0818a86"
|
checksum = "84f8829ddc213e2c1368e51a2564c552b65a8cb6a28f31e576270ac81d5e5827"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"codespan-reporting",
|
"codespan-reporting",
|
||||||
@@ -347,15 +348,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cxxbridge-flags"
|
name = "cxxbridge-flags"
|
||||||
version = "1.0.79"
|
version = "1.0.80"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "99d2199b00553eda8012dfec8d3b1c75fce747cf27c169a270b3b99e3448ab78"
|
checksum = "e72537424b474af1460806647c41d4b6d35d09ef7fe031c5c2fa5766047cc56a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cxxbridge-macro"
|
name = "cxxbridge-macro"
|
||||||
version = "1.0.79"
|
version = "1.0.80"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dcb67a6de1f602736dd7eaead0080cf3435df806c61b24b13328db128c58868f"
|
checksum = "309e4fb93eed90e1e14bea0da16b209f81813ba9fc7830c20ed151dd7bc0a4d7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -501,9 +502,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "filetime"
|
name = "filetime"
|
||||||
version = "0.2.17"
|
version = "0.2.18"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c"
|
checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -538,9 +539,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures"
|
name = "futures"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
|
checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
@@ -553,9 +554,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-channel"
|
name = "futures-channel"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
|
checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
@@ -563,15 +564,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-core"
|
name = "futures-core"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
|
checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-executor"
|
name = "futures-executor"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
|
checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
@@ -580,9 +581,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-io"
|
name = "futures-io"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
|
checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-lite"
|
name = "futures-lite"
|
||||||
@@ -601,9 +602,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-macro"
|
name = "futures-macro"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
|
checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -612,21 +613,21 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-sink"
|
name = "futures-sink"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56"
|
checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-task"
|
name = "futures-task"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
|
checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-util"
|
name = "futures-util"
|
||||||
version = "0.3.24"
|
version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
|
checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
@@ -642,9 +643,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.7"
|
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 = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
|
checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -659,9 +660,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "h2"
|
name = "h2"
|
||||||
version = "0.3.14"
|
version = "0.3.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be"
|
checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"fnv",
|
"fnv",
|
||||||
@@ -769,9 +770,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hyper"
|
name = "hyper"
|
||||||
version = "0.14.20"
|
version = "0.14.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac"
|
checksum = "abfba89e19b959ca163c7752ba59d737c1ceea53a5d31a149c805446fc958064"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
@@ -806,9 +807,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iana-time-zone"
|
name = "iana-time-zone"
|
||||||
version = "0.1.51"
|
version = "0.1.53"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed"
|
checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_system_properties",
|
"android_system_properties",
|
||||||
"core-foundation-sys",
|
"core-foundation-sys",
|
||||||
@@ -898,9 +899,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.135"
|
version = "0.2.137"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c"
|
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "link-cplusplus"
|
name = "link-cplusplus"
|
||||||
@@ -940,7 +941,7 @@ dependencies = [
|
|||||||
"dirs-next",
|
"dirs-next",
|
||||||
"objc-foundation",
|
"objc-foundation",
|
||||||
"objc_id",
|
"objc_id",
|
||||||
"time 0.3.15",
|
"time 0.3.16",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -984,14 +985,24 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.8.4"
|
version = "0.7.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
|
checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
"miow",
|
||||||
"windows-sys",
|
"ntapi",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "miow"
|
||||||
|
version = "0.3.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
|
||||||
|
dependencies = [
|
||||||
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1033,6 +1044,15 @@ dependencies = [
|
|||||||
"zvariant_derive",
|
"zvariant_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ntapi"
|
||||||
|
version = "0.3.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
|
||||||
|
dependencies = [
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-integer"
|
name = "num-integer"
|
||||||
version = "0.1.45"
|
version = "0.1.45"
|
||||||
@@ -1108,9 +1128,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "once_cell"
|
||||||
version = "1.15.0"
|
version = "1.16.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
|
checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ordered-multimap"
|
name = "ordered-multimap"
|
||||||
@@ -1134,9 +1154,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "os_str_bytes"
|
name = "os_str_bytes"
|
||||||
version = "6.3.0"
|
version = "6.3.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
|
checksum = "3baf96e39c5359d2eb0dd6ccb42c62b91d9678aa68160d261b9e0ccbf9e9dea9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking"
|
name = "parking"
|
||||||
@@ -1156,9 +1176,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot_core"
|
name = "parking_lot_core"
|
||||||
version = "0.9.3"
|
version = "0.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
|
checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -1200,9 +1220,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "polling"
|
name = "polling"
|
||||||
version = "2.3.0"
|
version = "2.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "899b00b9c8ab553c743b3e11e87c5c7d423b2a2de229ba95b24a756344748011"
|
checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
@@ -1357,9 +1377,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.6.0"
|
version = "1.5.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
|
checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
@@ -1447,9 +1467,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls"
|
name = "rustls"
|
||||||
version = "0.20.6"
|
version = "0.20.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
|
checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"ring",
|
"ring",
|
||||||
@@ -1538,18 +1558,18 @@ checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.145"
|
version = "1.0.147"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
|
checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.145"
|
version = "1.0.147"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
|
checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -1558,9 +1578,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.86"
|
version = "1.0.87"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "41feea4228a6f1cd09ec7a3593a682276702cd67b5273544757dae23c096f074"
|
checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
@@ -1605,6 +1625,12 @@ 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 = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
|
checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "shell-words"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shellexpand"
|
name = "shellexpand"
|
||||||
version = "2.1.2"
|
version = "2.1.2"
|
||||||
@@ -1711,9 +1737,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.102"
|
version = "1.0.103"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
|
checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -1754,13 +1780,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tempfile"
|
name = "tempfile"
|
||||||
version = "3.3.0"
|
version = "3.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
|
checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"fastrand",
|
|
||||||
"libc",
|
"libc",
|
||||||
|
"rand",
|
||||||
"redox_syscall",
|
"redox_syscall",
|
||||||
"remove_dir_all",
|
"remove_dir_all",
|
||||||
"winapi",
|
"winapi",
|
||||||
@@ -1824,21 +1850,32 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.3.15"
|
version = "0.3.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c"
|
checksum = "0fab5c8b9980850e06d92ddbe3ab839c062c801f3927c0fb8abd6fc8e918fbca"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"libc",
|
"libc",
|
||||||
"num_threads",
|
"num_threads",
|
||||||
|
"serde",
|
||||||
|
"time-core",
|
||||||
"time-macros",
|
"time-macros",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time-macros"
|
name = "time-core"
|
||||||
version = "0.2.4"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792"
|
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "time-macros"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "65bb801831d812c562ae7d2bfb531f26e66e4e1f6b17307ba4149c5064710e5b"
|
||||||
|
dependencies = [
|
||||||
|
"time-core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinyvec"
|
name = "tinyvec"
|
||||||
@@ -1857,9 +1894,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.21.2"
|
version = "1.5.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099"
|
checksum = "cd3b82e6e823a9ee7d7f64b08f8ac3d5f08ac988f23157194bd32af3f2f92767"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"bytes",
|
"bytes",
|
||||||
@@ -1867,9 +1904,9 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
"mio",
|
"mio",
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
|
"once_cell",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"signal-hook-registry",
|
"signal-hook-registry",
|
||||||
"socket2",
|
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1886,16 +1923,16 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-util"
|
name = "tokio-util"
|
||||||
version = "0.7.4"
|
version = "0.6.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
|
checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
|
"log",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1908,8 +1945,8 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "topgrade-rs"
|
name = "topgrade"
|
||||||
version = "10.0.0"
|
version = "10.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
@@ -1931,6 +1968,7 @@ dependencies = [
|
|||||||
"self_update",
|
"self_update",
|
||||||
"semver",
|
"semver",
|
||||||
"serde",
|
"serde",
|
||||||
|
"shell-words",
|
||||||
"shellexpand",
|
"shellexpand",
|
||||||
"strum 0.24.1",
|
"strum 0.24.1",
|
||||||
"sys-info",
|
"sys-info",
|
||||||
@@ -2198,13 +2236,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "which"
|
name = "which"
|
||||||
version = "4.3.0"
|
version = "4.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
|
checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
"libc",
|
"libc",
|
||||||
"once_cell",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2259,22 +2296,24 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-sys"
|
name = "windows-sys"
|
||||||
version = "0.36.1"
|
version = "0.42.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
|
checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows_aarch64_msvc 0.36.1",
|
"windows_aarch64_gnullvm",
|
||||||
"windows_i686_gnu 0.36.1",
|
"windows_aarch64_msvc 0.42.0",
|
||||||
"windows_i686_msvc 0.36.1",
|
"windows_i686_gnu 0.42.0",
|
||||||
"windows_x86_64_gnu 0.36.1",
|
"windows_i686_msvc 0.42.0",
|
||||||
"windows_x86_64_msvc 0.36.1",
|
"windows_x86_64_gnu 0.42.0",
|
||||||
|
"windows_x86_64_gnullvm",
|
||||||
|
"windows_x86_64_msvc 0.42.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_msvc"
|
name = "windows_aarch64_gnullvm"
|
||||||
version = "0.36.1"
|
version = "0.42.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
|
checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_aarch64_msvc"
|
name = "windows_aarch64_msvc"
|
||||||
@@ -2283,10 +2322,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
|
checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_aarch64_msvc"
|
||||||
version = "0.36.1"
|
version = "0.42.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
|
checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_gnu"
|
name = "windows_i686_gnu"
|
||||||
@@ -2295,10 +2334,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
|
checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_gnu"
|
||||||
version = "0.36.1"
|
version = "0.42.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
|
checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_i686_msvc"
|
name = "windows_i686_msvc"
|
||||||
@@ -2307,10 +2346,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
|
checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_i686_msvc"
|
||||||
version = "0.36.1"
|
version = "0.42.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
|
checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_gnu"
|
name = "windows_x86_64_gnu"
|
||||||
@@ -2319,10 +2358,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
|
checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_gnu"
|
||||||
version = "0.36.1"
|
version = "0.42.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
|
checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows_x86_64_msvc"
|
name = "windows_x86_64_msvc"
|
||||||
@@ -2330,6 +2375,12 @@ version = "0.39.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
|
checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.42.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winreg"
|
name = "winreg"
|
||||||
version = "0.10.1"
|
version = "0.10.1"
|
||||||
@@ -2422,7 +2473,7 @@ dependencies = [
|
|||||||
"crc32fast",
|
"crc32fast",
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
"flate2",
|
"flate2",
|
||||||
"time 0.3.15",
|
"time 0.3.16",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
70
Cargo.toml
70
Cargo.toml
@@ -1,11 +1,11 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "topgrade-rs"
|
name = "topgrade"
|
||||||
description = "Upgrade all the things, successor of topgrade"
|
description = "Upgrade all the things"
|
||||||
categories = ["os"]
|
categories = ["os"]
|
||||||
keywords = ["upgrade", "update"]
|
keywords = ["upgrade", "update"]
|
||||||
license-file = "LICENSE"
|
license-file = "LICENSE"
|
||||||
repository = "https://github.com/topgrade-rs/topgrade"
|
repository = "https://github.com/topgrade-rs/topgrade"
|
||||||
version = "10.0.0"
|
version = "10.1.0"
|
||||||
authors = ["Roey Darwish Dror <roey.ghost@gmail.com>", "Thomas Schönauer <t.schoenauer@hgs-wt.at>"]
|
authors = ["Roey Darwish Dror <roey.ghost@gmail.com>", "Thomas Schönauer <t.schoenauer@hgs-wt.at>"]
|
||||||
exclude = ["doc/screenshot.gif"]
|
exclude = ["doc/screenshot.gif"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
@@ -16,44 +16,48 @@ readme = "README.md"
|
|||||||
name = "topgrade"
|
name = "topgrade"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
|
||||||
|
##[lib]
|
||||||
|
##name = "topgrade_lib"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
home = "0.5"
|
home = "~0.5"
|
||||||
directories = "4.0"
|
directories = "~4.0"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "~1.0", features = ["derive"] }
|
||||||
toml = "0.5"
|
toml = "0.5"
|
||||||
which_crate = { version = "4.1", package = "which" }
|
which_crate = { version = "~4.1", package = "which" }
|
||||||
shellexpand = "2.1"
|
shellexpand = "~2.1"
|
||||||
clap = { version = "3.1", features = ["cargo", "derive"] }
|
clap = { version = "~3.1", features = ["cargo", "derive"] }
|
||||||
log = "0.4"
|
log = "~0.4"
|
||||||
walkdir = "2.3"
|
walkdir = "~2.3"
|
||||||
console = "0.15"
|
console = "~0.15"
|
||||||
lazy_static = "1.4"
|
lazy_static = "~1.4"
|
||||||
chrono = "0.4"
|
chrono = "~0.4"
|
||||||
pretty_env_logger = "0.4"
|
pretty_env_logger = "~0.4"
|
||||||
glob = "0.3"
|
glob = "~0.3"
|
||||||
strum = { version = "0.24", features = ["derive"] }
|
strum = { version = "~0.24", features = ["derive"] }
|
||||||
thiserror = "1.0"
|
thiserror = "~1.0"
|
||||||
anyhow = "1.0"
|
anyhow = "~1.0"
|
||||||
tempfile = "3.2"
|
tempfile = "~3.2"
|
||||||
cfg-if = "1.0"
|
cfg-if = "~1.0"
|
||||||
tokio = { version = "1.5", features = ["process", "rt-multi-thread"] }
|
tokio = { version = "~1.5", features = ["process", "rt-multi-thread"] }
|
||||||
futures = "0.3"
|
futures = "~0.3"
|
||||||
regex = "1.5"
|
regex = "~1.5"
|
||||||
sys-info = "0.9"
|
sys-info = "~0.9"
|
||||||
semver = "1.0"
|
semver = "~1.0"
|
||||||
|
shell-words = "~1.1"
|
||||||
|
|
||||||
[target.'cfg(target_os = "macos")'.dependencies]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
notify-rust = "4.5"
|
notify-rust = "~4.5"
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
nix = "0.24"
|
nix = "~0.24"
|
||||||
rust-ini = "0.18"
|
rust-ini = "~0.18"
|
||||||
self_update_crate = { version = "0.30", default-features = false, optional = true, package = "self_update", features = ["archive-tar", "compression-flate2", "rustls"] }
|
self_update_crate = { version = "~0.30", default-features = false, optional = true, package = "self_update", features = ["archive-tar", "compression-flate2", "rustls"] }
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
self_update_crate = { version = "0.30", default-features = false, optional = true, package = "self_update", features = ["archive-zip", "compression-zip-deflate", "rustls"] }
|
self_update_crate = { version = "~0.30", default-features = false, optional = true, package = "self_update", features = ["archive-zip", "compression-zip-deflate", "rustls"] }
|
||||||
winapi = "0.3"
|
winapi = "~0.3"
|
||||||
parselnk = "0.1"
|
parselnk = "~0.1"
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true
|
lto = true
|
||||||
|
|||||||
68
README.md
68
README.md
@@ -1,59 +1,89 @@
|
|||||||

|
<div align="center">
|
||||||
<!---
|
<img alt="Topgrade" src="doc/topgrade.png" width="850px">
|
||||||

|
|
||||||
[](https://crates.io/crates/topgrade)
|
<!--
|
||||||
[](https://aur.archlinux.org/packages/topgrade/)
|
<a href="https://github.com/topgrade-rs/topgrade/releases"><img alt="GitHub Release" src="https://img.shields.io/github/release/r-darwish/topgrade.svg"></a>
|
||||||
 -->
|
<a href="https://crates.io/crates/topgrade"><img alt="crates.io" src="https://img.shields.io/crates/v/topgrade.svg"></a>
|
||||||
--->
|
<a href="https://aur.archlinux.org/packages/topgrade"><img alt="AUR" src="https://img.shields.io/aur/version/topgrade.svg"></a>
|
||||||
|
<a href="https://formulae.brew.sh/formula/topgrade"><img alt="Homebrew" src="https://img.shields.io/homebrew/v/topgrade.svg"></a>
|
||||||
|
-->
|
||||||
|
|
||||||

|
<img alt="Demo" src="doc/screenshot.gif" width="550px">
|
||||||
|
</div>
|
||||||
## Fork
|
|
||||||
This is a fork of [topgrade by r-darwish](https://github.com/r-darwish/topgrade) to keep it maintained.
|
## Introduction
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
> This is a fork of [topgrade by r-darwish](https://github.com/r-darwish/topgrade) to keep it maintained.
|
||||||
|
|
||||||
Keeping your system up to date usually involves invoking multiple package managers.
|
Keeping your system up to date usually involves invoking multiple package managers.
|
||||||
This results in big, non-portable shell one-liners saved in your shell.
|
This results in big, non-portable shell one-liners saved in your shell.
|
||||||
To remedy this, _topgrade_ detects which tools you use and runs the appropriate commands to update them.
|
To remedy this, **Topgrade** detects which tools you use and runs the appropriate commands to update them.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
- Arch Linux: [AUR](https://aur.archlinux.org/packages/topgrade/) package.
|
|
||||||
|
- Arch Linux: [AUR](https://aur.archlinux.org/packages/topgrade) package.
|
||||||
- NixOS: _topgrade_ package in `nixpkgs`.
|
- NixOS: _topgrade_ package in `nixpkgs`.
|
||||||
- macOS: [Homebrew](https://brew.sh/) or [MacPorts](https://www.macports.org/install.php).
|
- macOS: [Homebrew](https://formulae.brew.sh/formula/topgrade) or [MacPorts](https://ports.macports.org/port/topgrade/).
|
||||||
|
|
||||||
Other systems users can either use `cargo install` or use the compiled binaries from the release page.
|
Other systems users can either use `cargo install` or use the compiled binaries from the release page.
|
||||||
The compiled binaries contain a self-upgrading feature.
|
The compiled binaries contain a self-upgrading feature.
|
||||||
|
|
||||||
Topgrade requires Rust 1.51 or above.
|
Topgrade requires Rust 1.51 or above.
|
||||||
|
|
||||||
## Documentation[WIP]
|
## Documentation
|
||||||
|
|
||||||
|
> **Warning**
|
||||||
|
> Work in Progress
|
||||||
|
|
||||||
You can visit the documentation at [topgrade-rs.github.io](https://topgrade-rs.github.io/) .
|
You can visit the documentation at [topgrade-rs.github.io](https://topgrade-rs.github.io/) .
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Just run `topgrade`.
|
Just run `topgrade`.
|
||||||
See [the wiki](https://github.com/r-darwish/topgrade/wiki/Step-list) for the list of things Topgrade supports.
|
See [the documentation](https://topgrade-rs.github.io/) for the list of things Topgrade supports.
|
||||||
|
|
||||||
## Customization
|
## Customization
|
||||||
|
|
||||||
See `config.example.toml` for an example configuration file.
|
See `config.example.toml` for an example configuration file.
|
||||||
|
|
||||||
### Configuration path
|
### Configuration path
|
||||||
|
|
||||||
The configuration should be placed in the following paths depending by the operating system:
|
The configuration should be placed in the following paths depending by the operating system:
|
||||||
|
|
||||||
* **Windows** - `%APPDATA%/topgrade.toml`
|
- **Windows** - `%APPDATA%/topgrade.toml`
|
||||||
* **macOS** and **other Unix systems** - `${XDG_CONFIG_HOME:-~/.config}/topgrade.toml`
|
- **macOS** and **other Unix systems** - `${XDG_CONFIG_HOME:-~/.config}/topgrade.toml`
|
||||||
|
|
||||||
## Contribution
|
## Contribution
|
||||||
|
|
||||||
### Problems or missing features?
|
### Problems or missing features?
|
||||||
|
|
||||||
Open a new Issue describing your problem and if possible with a possible solution.
|
Open a new Issue describing your problem and if possible with a possible solution.
|
||||||
|
|
||||||
### Missing a feature or found an unsupported tool/distro?
|
### Missing a feature or found an unsupported tool/distro?
|
||||||
|
|
||||||
Just let us now what you are missing by opening an issue.
|
Just let us now what you are missing by opening an issue.
|
||||||
For tools please open an Issue describing the tool, which platforms it supports and if possible, give us an example of its usage.
|
For tools please open an Issue describing the tool, which platforms it supports and if possible, give us an example of its usage.
|
||||||
|
|
||||||
### Want to contribute to the code?
|
### Want to contribute to the code?
|
||||||
|
|
||||||
Just fork the repository and start coding.
|
Just fork the repository and start coding.
|
||||||
|
|
||||||
|
### Contribution Guidelines
|
||||||
|
|
||||||
|
- Check if your code passes `cargo fmt` and `cargo clippy`.
|
||||||
|
- Check if your code is self explanatory, if not it should be documented by comments.
|
||||||
|
- Make a Pull Request to the dev branch for new features or to the bug-fixes branch for bug fixes.
|
||||||
|
|
||||||
## Remote execution
|
## Remote execution
|
||||||
|
|
||||||
You can specify a key called `remote_topgrades` in the configuration file.
|
You can specify a key called `remote_topgrades` in the configuration file.
|
||||||
This key should contain a list of hostnames that have topgrade installed on them.
|
This key should contain a list of hostnames that have Topgrade installed on them.
|
||||||
Topgrade will use `ssh` to run `topgrade` on remote hosts before acting locally.
|
Topgrade will use `ssh` to run `topgrade` on remote hosts before acting locally.
|
||||||
To limit the execution only to specific hosts use the `--remote-host-limit` parameter.
|
To limit the execution only to specific hosts use the `--remote-host-limit` parameter.
|
||||||
|
|
||||||
|
## ToDo
|
||||||
|
|
||||||
|
- [ ] Add a proper testing framework to the code base.
|
||||||
|
- [ ] Add unit tests for package managers.
|
||||||
|
- [ ] Split up code into more maintainable parts, eg. putting every linux package manager in a own submodule of linux.rs.
|
||||||
|
|||||||
@@ -107,3 +107,7 @@
|
|||||||
[flatpak]
|
[flatpak]
|
||||||
# Use sudo for updating the system-wide installation
|
# Use sudo for updating the system-wide installation
|
||||||
#use_sudo = true
|
#use_sudo = true
|
||||||
|
|
||||||
|
[distrobox]
|
||||||
|
#use_root = false
|
||||||
|
#containers = ["archlinux-latest"]
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
use std::collections::BTreeMap;
|
use anyhow::Context;
|
||||||
use std::fs::write;
|
|
||||||
use std::path::PathBuf;
|
|
||||||
use std::process::Command;
|
|
||||||
use std::{env, fs};
|
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clap::{ArgEnum, Parser};
|
use clap::{ArgEnum, Parser};
|
||||||
use directories::BaseDirs;
|
use directories::BaseDirs;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
use std::collections::BTreeMap;
|
||||||
|
use std::fs::write;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
use std::process::Command;
|
||||||
|
use std::{env, fs};
|
||||||
use strum::{EnumIter, EnumString, EnumVariantNames, IntoEnumIterator};
|
use strum::{EnumIter, EnumString, EnumVariantNames, IntoEnumIterator};
|
||||||
use sys_info::hostname;
|
use sys_info::hostname;
|
||||||
use which_crate::which;
|
use which_crate::which;
|
||||||
@@ -83,6 +83,7 @@ pub enum Step {
|
|||||||
Containers,
|
Containers,
|
||||||
CustomCommands,
|
CustomCommands,
|
||||||
DebGet,
|
DebGet,
|
||||||
|
Distrobox,
|
||||||
Deno,
|
Deno,
|
||||||
Dotnet,
|
Dotnet,
|
||||||
Emacs,
|
Emacs,
|
||||||
@@ -92,6 +93,7 @@ pub enum Step {
|
|||||||
Fossil,
|
Fossil,
|
||||||
Gcloud,
|
Gcloud,
|
||||||
Gem,
|
Gem,
|
||||||
|
Ghcup,
|
||||||
GithubCliExtensions,
|
GithubCliExtensions,
|
||||||
GitRepos,
|
GitRepos,
|
||||||
Go,
|
Go,
|
||||||
@@ -120,6 +122,7 @@ pub enum Step {
|
|||||||
Powershell,
|
Powershell,
|
||||||
Protonup,
|
Protonup,
|
||||||
Raco,
|
Raco,
|
||||||
|
Rcm,
|
||||||
Remotes,
|
Remotes,
|
||||||
Restarts,
|
Restarts,
|
||||||
Rtcl,
|
Rtcl,
|
||||||
@@ -171,6 +174,14 @@ pub struct Windows {
|
|||||||
enable_winget: Option<bool>,
|
enable_winget: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Default, Debug)]
|
||||||
|
#[serde(deny_unknown_fields)]
|
||||||
|
#[allow(clippy::upper_case_acronyms)]
|
||||||
|
pub struct Distrobox {
|
||||||
|
use_root: Option<bool>,
|
||||||
|
containers: Option<Vec<String>>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Default, Debug)]
|
#[derive(Deserialize, Default, Debug)]
|
||||||
#[serde(deny_unknown_fields)]
|
#[serde(deny_unknown_fields)]
|
||||||
#[allow(clippy::upper_case_acronyms)]
|
#[allow(clippy::upper_case_acronyms)]
|
||||||
@@ -292,6 +303,7 @@ pub struct ConfigFile {
|
|||||||
firmware: Option<Firmware>,
|
firmware: Option<Firmware>,
|
||||||
vagrant: Option<Vagrant>,
|
vagrant: Option<Vagrant>,
|
||||||
flatpak: Option<Flatpak>,
|
flatpak: Option<Flatpak>,
|
||||||
|
distrobox: Option<Distrobox>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn config_directory(base_dirs: &BaseDirs) -> PathBuf {
|
fn config_directory(base_dirs: &BaseDirs) -> PathBuf {
|
||||||
@@ -614,9 +626,16 @@ impl Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Extra Tmux arguments
|
/// Extra Tmux arguments
|
||||||
|
pub fn tmux_arguments(&self) -> anyhow::Result<Vec<String>> {
|
||||||
pub fn tmux_arguments(&self) -> &Option<String> {
|
let args = &self.config_file.tmux_arguments.as_deref().unwrap_or_default();
|
||||||
&self.config_file.tmux_arguments
|
shell_words::split(args)
|
||||||
|
// The only time the parse failed is in case of a missing close quote.
|
||||||
|
// The error message looks like this:
|
||||||
|
// Error: Failed to parse `tmux_arguments`: `'foo`
|
||||||
|
//
|
||||||
|
// Caused by:
|
||||||
|
// missing closing quote
|
||||||
|
.with_context(|| format!("Failed to parse `tmux_arguments`: `{args}`"))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Prompt for a key before exiting
|
/// Prompt for a key before exiting
|
||||||
@@ -808,6 +827,20 @@ impl Config {
|
|||||||
.and_then(|linux| linux.dnf_arguments.as_deref())
|
.and_then(|linux| linux.dnf_arguments.as_deref())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Distrobox use root
|
||||||
|
pub fn distrobox_root(&self) -> bool {
|
||||||
|
self.config_file
|
||||||
|
.distrobox
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|r| r.use_root)
|
||||||
|
.unwrap_or(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Distrobox containers
|
||||||
|
pub fn distrobox_containers(&self) -> Option<&Vec<String>> {
|
||||||
|
self.config_file.distrobox.as_ref().and_then(|r| r.containers.as_ref())
|
||||||
|
}
|
||||||
|
|
||||||
/// Concurrency limit for git
|
/// Concurrency limit for git
|
||||||
pub fn git_concurrency_limit(&self) -> Option<usize> {
|
pub fn git_concurrency_limit(&self) -> Option<usize> {
|
||||||
self.config_file.git.as_ref().and_then(|git| git.max_concurrency)
|
self.config_file.git.as_ref().and_then(|git| git.max_concurrency)
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
use lazy_static::lazy_static;
|
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
lazy_static! {
|
/// A global variable telling whether the application has been interrupted.
|
||||||
/// A global variable telling whether the application has been interrupted.
|
static INTERRUPTED: AtomicBool = AtomicBool::new(false);
|
||||||
static ref INTERRUPTED: AtomicBool = AtomicBool::new(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Tells whether the program has been interrupted
|
/// Tells whether the program has been interrupted
|
||||||
pub fn interrupted() -> bool {
|
pub fn interrupted() -> bool {
|
||||||
|
|||||||
@@ -194,11 +194,12 @@ impl DryCommand {
|
|||||||
print!(
|
print!(
|
||||||
"Dry running: {} {}",
|
"Dry running: {} {}",
|
||||||
self.program.to_string_lossy(),
|
self.program.to_string_lossy(),
|
||||||
self.args
|
shell_words::join(
|
||||||
.iter()
|
self.args
|
||||||
.map(|a| String::from(a.to_string_lossy()))
|
.iter()
|
||||||
.collect::<Vec<String>>()
|
.map(|a| String::from(a.to_string_lossy()))
|
||||||
.join(" ")
|
.collect::<Vec<String>>()
|
||||||
|
)
|
||||||
);
|
);
|
||||||
match &self.directory {
|
match &self.directory {
|
||||||
Some(dir) => println!(" in {}", dir.to_string_lossy()),
|
Some(dir) => println!(" in {}", dir.to_string_lossy()),
|
||||||
|
|||||||
2
src/lib.rs
Normal file
2
src/lib.rs
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
//pub mod steps;
|
||||||
|
//pub mod utils;
|
||||||
26
src/main.rs
26
src/main.rs
@@ -79,7 +79,7 @@ fn run() -> Result<()> {
|
|||||||
if config.run_in_tmux() && env::var("TOPGRADE_INSIDE_TMUX").is_err() {
|
if config.run_in_tmux() && env::var("TOPGRADE_INSIDE_TMUX").is_err() {
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
{
|
{
|
||||||
tmux::run_in_tmux(config.tmux_arguments());
|
tmux::run_in_tmux(config.tmux_arguments()?);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,6 +209,11 @@ fn run() -> Result<()> {
|
|||||||
freebsd::upgrade_packages(sudo.as_ref(), run_type)
|
freebsd::upgrade_packages(sudo.as_ref(), run_type)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
#[cfg(target_os = "openbsd")]
|
||||||
|
runner.execute(Step::Pkg, "OpenBSD Packages", || {
|
||||||
|
openbsd::upgrade_packages(sudo.as_ref(), run_type)
|
||||||
|
})?;
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
#[cfg(target_os = "android")]
|
||||||
runner.execute(Step::Pkg, "Termux Packages", || android::upgrade_packages(&ctx))?;
|
runner.execute(Step::Pkg, "Termux Packages", || android::upgrade_packages(&ctx))?;
|
||||||
|
|
||||||
@@ -231,6 +236,10 @@ fn run() -> Result<()> {
|
|||||||
git_repos.insert_if_repo(base_dirs.home_dir().join(".ideavimrc"));
|
git_repos.insert_if_repo(base_dirs.home_dir().join(".ideavimrc"));
|
||||||
git_repos.insert_if_repo(base_dirs.home_dir().join(".intellimacs"));
|
git_repos.insert_if_repo(base_dirs.home_dir().join(".intellimacs"));
|
||||||
|
|
||||||
|
if config.should_run(Step::Rcm) {
|
||||||
|
git_repos.insert_if_repo(base_dirs.home_dir().join(".dotfiles"));
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
{
|
{
|
||||||
git_repos.insert_if_repo(zsh::zshrc(&base_dirs));
|
git_repos.insert_if_repo(zsh::zshrc(&base_dirs));
|
||||||
@@ -291,6 +300,7 @@ fn run() -> Result<()> {
|
|||||||
runner.execute(Step::Shell, "bash-it", || unix::run_bashit(&ctx))?;
|
runner.execute(Step::Shell, "bash-it", || unix::run_bashit(&ctx))?;
|
||||||
runner.execute(Step::Shell, "oh-my-fish", || unix::run_oh_my_fish(&ctx))?;
|
runner.execute(Step::Shell, "oh-my-fish", || unix::run_oh_my_fish(&ctx))?;
|
||||||
runner.execute(Step::Shell, "fish-plug", || unix::run_fish_plug(&ctx))?;
|
runner.execute(Step::Shell, "fish-plug", || unix::run_fish_plug(&ctx))?;
|
||||||
|
runner.execute(Step::Shell, "fundle", || unix::run_fundle(&ctx))?;
|
||||||
runner.execute(Step::Tmux, "tmux", || tmux::run_tpm(&base_dirs, run_type))?;
|
runner.execute(Step::Tmux, "tmux", || tmux::run_tpm(&base_dirs, run_type))?;
|
||||||
runner.execute(Step::Tldr, "TLDR", || unix::run_tldr(run_type))?;
|
runner.execute(Step::Tldr, "TLDR", || unix::run_tldr(run_type))?;
|
||||||
runner.execute(Step::Pearl, "pearl", || unix::run_pearl(run_type))?;
|
runner.execute(Step::Pearl, "pearl", || unix::run_pearl(run_type))?;
|
||||||
@@ -301,6 +311,7 @@ fn run() -> Result<()> {
|
|||||||
runner.execute(Step::Sdkman, "SDKMAN!", || {
|
runner.execute(Step::Sdkman, "SDKMAN!", || {
|
||||||
unix::run_sdkman(&base_dirs, config.cleanup(), run_type)
|
unix::run_sdkman(&base_dirs, config.cleanup(), run_type)
|
||||||
})?;
|
})?;
|
||||||
|
runner.execute(Step::Rcm, "rcm", || unix::run_rcm(&ctx))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(
|
#[cfg(not(any(
|
||||||
@@ -323,6 +334,7 @@ fn run() -> Result<()> {
|
|||||||
runner.execute(Step::Pipx, "pipx", || generic::run_pipx_update(run_type))?;
|
runner.execute(Step::Pipx, "pipx", || generic::run_pipx_update(run_type))?;
|
||||||
runner.execute(Step::Conda, "conda", || generic::run_conda_update(&ctx))?;
|
runner.execute(Step::Conda, "conda", || generic::run_conda_update(&ctx))?;
|
||||||
runner.execute(Step::Pip3, "pip3", || generic::run_pip3_update(run_type))?;
|
runner.execute(Step::Pip3, "pip3", || generic::run_pip3_update(run_type))?;
|
||||||
|
runner.execute(Step::Ghcup, "ghcup", || generic::run_ghcup_update(run_type))?;
|
||||||
runner.execute(Step::Stack, "stack", || generic::run_stack_update(run_type))?;
|
runner.execute(Step::Stack, "stack", || generic::run_stack_update(run_type))?;
|
||||||
runner.execute(Step::Tlmgr, "tlmgr", || generic::run_tlmgr_update(&ctx))?;
|
runner.execute(Step::Tlmgr, "tlmgr", || generic::run_tlmgr_update(&ctx))?;
|
||||||
runner.execute(Step::Myrepos, "myrepos", || {
|
runner.execute(Step::Myrepos, "myrepos", || {
|
||||||
@@ -339,6 +351,7 @@ fn run() -> Result<()> {
|
|||||||
runner.execute(Step::Kakoune, "Kakoune", || kakoune::upgrade_kak_plug(&ctx))?;
|
runner.execute(Step::Kakoune, "Kakoune", || kakoune::upgrade_kak_plug(&ctx))?;
|
||||||
runner.execute(Step::Node, "npm", || node::run_npm_upgrade(&ctx))?;
|
runner.execute(Step::Node, "npm", || node::run_npm_upgrade(&ctx))?;
|
||||||
runner.execute(Step::Node, "yarn", || node::run_yarn_upgrade(&ctx))?;
|
runner.execute(Step::Node, "yarn", || node::run_yarn_upgrade(&ctx))?;
|
||||||
|
runner.execute(Step::Node, "pnpm", || node::run_pnpm_upgrade(&ctx))?;
|
||||||
runner.execute(Step::Containers, "Containers", || containers::run_containers(&ctx))?;
|
runner.execute(Step::Containers, "Containers", || containers::run_containers(&ctx))?;
|
||||||
runner.execute(Step::Deno, "deno", || node::deno_upgrade(&ctx))?;
|
runner.execute(Step::Deno, "deno", || node::deno_upgrade(&ctx))?;
|
||||||
runner.execute(Step::Composer, "composer", || generic::run_composer_update(&ctx))?;
|
runner.execute(Step::Composer, "composer", || generic::run_composer_update(&ctx))?;
|
||||||
@@ -368,6 +381,7 @@ fn run() -> Result<()> {
|
|||||||
runner.execute(Step::Pacstall, "pacstall", || linux::run_pacstall(&ctx))?;
|
runner.execute(Step::Pacstall, "pacstall", || linux::run_pacstall(&ctx))?;
|
||||||
runner.execute(Step::Pacdef, "pacdef", || linux::run_pacdef(&ctx))?;
|
runner.execute(Step::Pacdef, "pacdef", || linux::run_pacdef(&ctx))?;
|
||||||
runner.execute(Step::Protonup, "protonup", || linux::run_protonup_update(&ctx))?;
|
runner.execute(Step::Protonup, "protonup", || linux::run_protonup_update(&ctx))?;
|
||||||
|
runner.execute(Step::Distrobox, "distrobox", || linux::run_distrobox_update(&ctx))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(commands) = config.commands() {
|
if let Some(commands) = config.commands() {
|
||||||
@@ -403,6 +417,11 @@ fn run() -> Result<()> {
|
|||||||
freebsd::upgrade_freebsd(sudo.as_ref(), run_type)
|
freebsd::upgrade_freebsd(sudo.as_ref(), run_type)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
#[cfg(target_os = "openbsd")]
|
||||||
|
runner.execute(Step::System, "OpenBSD Upgrade", || {
|
||||||
|
openbsd::upgrade_openbsd(sudo.as_ref(), run_type)
|
||||||
|
})?;
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
runner.execute(Step::System, "Windows update", || windows::windows_update(&ctx))?;
|
runner.execute(Step::System, "Windows update", || windows::windows_update(&ctx))?;
|
||||||
|
|
||||||
@@ -505,7 +524,10 @@ fn main() {
|
|||||||
.is_some());
|
.is_some());
|
||||||
|
|
||||||
if !skip_print {
|
if !skip_print {
|
||||||
println!("Error: {}", error);
|
// The `Debug` implementation of `anyhow::Result` prints a multi-line
|
||||||
|
// error message that includes all the 'causes' added with
|
||||||
|
// `.with_context(...)` calls.
|
||||||
|
println!("Error: {:?}", error);
|
||||||
}
|
}
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ impl Drop for SelfRenamer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
match fs::rename(&self.temp_path, &self.exe_path) {
|
match fs::rename(&self.temp_path, &self.exe_path) {
|
||||||
Ok(_) => debug!("Moved topgrade back from {:?} to {:?}", self.temp_path, self.exe_path),
|
Ok(_) => debug!("Moved Topgrade back from {:?} to {:?}", self.temp_path, self.exe_path),
|
||||||
Err(e) => error!(
|
Err(e) => error!(
|
||||||
"Could not move Topgrade from {} back to {}: {}",
|
"Could not move Topgrade from {} back to {}: {}",
|
||||||
self.temp_path.display(),
|
self.temp_path.display(),
|
||||||
|
|||||||
@@ -15,10 +15,14 @@ pub fn self_update() -> Result<()> {
|
|||||||
|
|
||||||
let target = self_update_crate::get_target();
|
let target = self_update_crate::get_target();
|
||||||
let result = Update::configure()
|
let result = Update::configure()
|
||||||
.repo_owner("r-darwish")
|
.repo_owner("topgrade-rs")
|
||||||
.repo_name("topgrade")
|
.repo_name("topgrade")
|
||||||
.target(target)
|
.target(target)
|
||||||
.bin_name(if cfg!(windows) { "topgrade.exe" } else { "topgrade" })
|
.bin_name(if cfg!(windows) {
|
||||||
|
"topgrade-rs.exe"
|
||||||
|
} else {
|
||||||
|
"topgrade-rs"
|
||||||
|
})
|
||||||
.show_output(false)
|
.show_output(false)
|
||||||
.show_download_progress(true)
|
.show_download_progress(true)
|
||||||
.current_version(self_update_crate::cargo_crate_version!())
|
.current_version(self_update_crate::cargo_crate_version!())
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ impl Emacs {
|
|||||||
|
|
||||||
print_separator("Emacs");
|
print_separator("Emacs");
|
||||||
|
|
||||||
let mut command = ctx.run_type().execute(&emacs);
|
let mut command = ctx.run_type().execute(emacs);
|
||||||
|
|
||||||
command
|
command
|
||||||
.args(["--batch", "--debug-init", "-l"])
|
.args(["--batch", "--debug-init", "-l"])
|
||||||
|
|||||||
@@ -60,12 +60,12 @@ pub fn run_flutter_upgrade(run_type: RunType) -> Result<()> {
|
|||||||
let flutter = utils::require("flutter")?;
|
let flutter = utils::require("flutter")?;
|
||||||
|
|
||||||
print_separator("Flutter");
|
print_separator("Flutter");
|
||||||
run_type.execute(&flutter).arg("upgrade").check_run()
|
run_type.execute(flutter).arg("upgrade").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_go(run_type: RunType) -> Result<()> {
|
pub fn run_go(run_type: RunType) -> Result<()> {
|
||||||
let go = utils::require("go")?;
|
let go = utils::require("go")?;
|
||||||
let go_output = run_type.execute(&go).args(["env", "GOPATH"]).check_output()?;
|
let go_output = run_type.execute(go).args(["env", "GOPATH"]).check_output()?;
|
||||||
let gopath = go_output.trim();
|
let gopath = go_output.trim();
|
||||||
|
|
||||||
let go_global_update = utils::require("go-global-update")
|
let go_global_update = utils::require("go-global-update")
|
||||||
@@ -74,7 +74,7 @@ pub fn run_go(run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Go");
|
print_separator("Go");
|
||||||
|
|
||||||
run_type.execute(&go_global_update).check_run()
|
run_type.execute(go_global_update).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_gem(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
pub fn run_gem(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
||||||
@@ -83,7 +83,7 @@ pub fn run_gem(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("RubyGems");
|
print_separator("RubyGems");
|
||||||
|
|
||||||
let mut command = run_type.execute(&gem);
|
let mut command = run_type.execute(gem);
|
||||||
command.arg("update");
|
command.arg("update");
|
||||||
|
|
||||||
if env::var_os("RBENV_SHELL").is_none() {
|
if env::var_os("RBENV_SHELL").is_none() {
|
||||||
@@ -123,7 +123,7 @@ pub fn run_sheldon(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Sheldon");
|
print_separator("Sheldon");
|
||||||
|
|
||||||
ctx.run_type().execute(&sheldon).args(["lock", "--update"]).check_run()
|
ctx.run_type().execute(sheldon).args(["lock", "--update"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_fossil(run_type: RunType) -> Result<()> {
|
pub fn run_fossil(run_type: RunType) -> Result<()> {
|
||||||
@@ -131,7 +131,7 @@ pub fn run_fossil(run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Fossil");
|
print_separator("Fossil");
|
||||||
|
|
||||||
run_type.execute(&fossil).args(["all", "sync"]).check_run()
|
run_type.execute(fossil).args(["all", "sync"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_micro(run_type: RunType) -> Result<()> {
|
pub fn run_micro(run_type: RunType) -> Result<()> {
|
||||||
@@ -139,7 +139,7 @@ pub fn run_micro(run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("micro");
|
print_separator("micro");
|
||||||
|
|
||||||
let stdout = run_type.execute(µ).args(["-plugin", "update"]).string_output()?;
|
let stdout = run_type.execute(micro).args(["-plugin", "update"]).string_output()?;
|
||||||
std::io::stdout().write_all(stdout.as_bytes())?;
|
std::io::stdout().write_all(stdout.as_bytes())?;
|
||||||
|
|
||||||
if stdout.contains("Nothing to install / update") || stdout.contains("One or more plugins installed") {
|
if stdout.contains("Nothing to install / update") || stdout.contains("One or more plugins installed") {
|
||||||
@@ -160,7 +160,7 @@ pub fn run_apm(run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Atom Package Manager");
|
print_separator("Atom Package Manager");
|
||||||
|
|
||||||
run_type.execute(&apm).args(["upgrade", "--confirm=false"]).check_run()
|
run_type.execute(apm).args(["upgrade", "--confirm=false"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_rustup(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
pub fn run_rustup(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
||||||
@@ -190,7 +190,7 @@ pub fn run_krew_upgrade(run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Krew");
|
print_separator("Krew");
|
||||||
|
|
||||||
run_type.execute(&krew).args(["upgrade"]).check_run()
|
run_type.execute(krew).args(["upgrade"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_gcloud_components_update(run_type: RunType) -> Result<()> {
|
pub fn run_gcloud_components_update(run_type: RunType) -> Result<()> {
|
||||||
@@ -199,7 +199,7 @@ pub fn run_gcloud_components_update(run_type: RunType) -> Result<()> {
|
|||||||
print_separator("gcloud");
|
print_separator("gcloud");
|
||||||
|
|
||||||
run_type
|
run_type
|
||||||
.execute(&gcloud)
|
.execute(gcloud)
|
||||||
.args(["components", "update", "--quiet"])
|
.args(["components", "update", "--quiet"])
|
||||||
.check_run()
|
.check_run()
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ pub fn run_jetpack(run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Jetpack");
|
print_separator("Jetpack");
|
||||||
|
|
||||||
run_type.execute(&jetpack).args(["global", "update"]).check_run()
|
run_type.execute(jetpack).args(["global", "update"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_rtcl(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_rtcl(ctx: &ExecutionContext) -> Result<()> {
|
||||||
@@ -217,7 +217,7 @@ pub fn run_rtcl(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("rtcl");
|
print_separator("rtcl");
|
||||||
|
|
||||||
ctx.run_type().execute(&rupdate).check_run()
|
ctx.run_type().execute(rupdate).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_opam_update(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_opam_update(ctx: &ExecutionContext) -> Result<()> {
|
||||||
@@ -239,14 +239,14 @@ pub fn run_vcpkg_update(run_type: RunType) -> Result<()> {
|
|||||||
let vcpkg = utils::require("vcpkg")?;
|
let vcpkg = utils::require("vcpkg")?;
|
||||||
print_separator("vcpkg");
|
print_separator("vcpkg");
|
||||||
|
|
||||||
run_type.execute(&vcpkg).args(["upgrade", "--no-dry-run"]).check_run()
|
run_type.execute(vcpkg).args(["upgrade", "--no-dry-run"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_pipx_update(run_type: RunType) -> Result<()> {
|
pub fn run_pipx_update(run_type: RunType) -> Result<()> {
|
||||||
let pipx = utils::require("pipx")?;
|
let pipx = utils::require("pipx")?;
|
||||||
print_separator("pipx");
|
print_separator("pipx");
|
||||||
|
|
||||||
run_type.execute(&pipx).arg("upgrade-all").check_run()
|
run_type.execute(pipx).arg("upgrade-all").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_conda_update(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_conda_update(ctx: &ExecutionContext) -> Result<()> {
|
||||||
@@ -264,7 +264,7 @@ pub fn run_conda_update(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
print_separator("Conda");
|
print_separator("Conda");
|
||||||
|
|
||||||
ctx.run_type()
|
ctx.run_type()
|
||||||
.execute(&conda)
|
.execute(conda)
|
||||||
.args(["update", "--all", "-y"])
|
.args(["update", "--all", "-y"])
|
||||||
.check_run()
|
.check_run()
|
||||||
}
|
}
|
||||||
@@ -289,10 +289,24 @@ pub fn run_pip3_update(run_type: RunType) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_stack_update(run_type: RunType) -> Result<()> {
|
pub fn run_stack_update(run_type: RunType) -> Result<()> {
|
||||||
|
if utils::require("ghcup").is_ok() {
|
||||||
|
// `ghcup` is present and probably(?) being used to install `stack`.
|
||||||
|
// Don't upgrade `stack`, let `ghcup` handle it. Per `ghcup install stack`:
|
||||||
|
// !!! Additionally, you should upgrade stack only through ghcup and not use 'stack upgrade' !!!
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
let stack = utils::require("stack")?;
|
let stack = utils::require("stack")?;
|
||||||
print_separator("stack");
|
print_separator("stack");
|
||||||
|
|
||||||
run_type.execute(&stack).arg("upgrade").check_run()
|
run_type.execute(stack).arg("upgrade").check_run()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn run_ghcup_update(run_type: RunType) -> Result<()> {
|
||||||
|
let ghcup = utils::require("ghcup")?;
|
||||||
|
print_separator("ghcup");
|
||||||
|
|
||||||
|
run_type.execute(ghcup).arg("upgrade").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_tlmgr_update(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_tlmgr_update(ctx: &ExecutionContext) -> Result<()> {
|
||||||
@@ -309,7 +323,7 @@ pub fn run_tlmgr_update(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
let tlmgr_directory = {
|
let tlmgr_directory = {
|
||||||
let mut d = PathBuf::from(
|
let mut d = PathBuf::from(
|
||||||
std::str::from_utf8(
|
std::str::from_utf8(
|
||||||
&Command::new(&kpsewhich)
|
&Command::new(kpsewhich)
|
||||||
.arg("-var-value=SELFAUTOPARENT")
|
.arg("-var-value=SELFAUTOPARENT")
|
||||||
.output()?
|
.output()?
|
||||||
.stdout,
|
.stdout,
|
||||||
@@ -346,7 +360,7 @@ pub fn run_chezmoi_update(base_dirs: &BaseDirs, run_type: RunType) -> Result<()>
|
|||||||
|
|
||||||
print_separator("chezmoi");
|
print_separator("chezmoi");
|
||||||
|
|
||||||
run_type.execute(&chezmoi).arg("update").check_run()
|
run_type.execute(chezmoi).arg("update").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_myrepos_update(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
pub fn run_myrepos_update(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
||||||
@@ -426,7 +440,7 @@ pub fn run_composer_update(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
if stdout.contains("valet") || stderr.contains("valet") {
|
if stdout.contains("valet") || stderr.contains("valet") {
|
||||||
if let Some(valet) = utils::which("valet") {
|
if let Some(valet) = utils::which("valet") {
|
||||||
ctx.run_type().execute(&valet).arg("install").check_run()?;
|
ctx.run_type().execute(valet).arg("install").check_run()?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,21 +485,21 @@ pub fn run_raco_update(run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Racket Package Manager");
|
print_separator("Racket Package Manager");
|
||||||
|
|
||||||
run_type.execute(&raco).args(["pkg", "update", "--all"]).check_run()
|
run_type.execute(raco).args(["pkg", "update", "--all"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn bin_update(ctx: &ExecutionContext) -> Result<()> {
|
pub fn bin_update(ctx: &ExecutionContext) -> Result<()> {
|
||||||
let bin = utils::require("bin")?;
|
let bin = utils::require("bin")?;
|
||||||
|
|
||||||
print_separator("Bin");
|
print_separator("Bin");
|
||||||
ctx.run_type().execute(&bin).arg("update").check_run()
|
ctx.run_type().execute(bin).arg("update").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn spicetify_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
pub fn spicetify_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
||||||
let spicetify = utils::require("spicetify")?;
|
let spicetify = utils::require("spicetify")?;
|
||||||
|
|
||||||
print_separator("Spicetify");
|
print_separator("Spicetify");
|
||||||
ctx.run_type().execute(&spicetify).arg("upgrade").check_run()
|
ctx.run_type().execute(spicetify).arg("upgrade").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_ghcli_extensions_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_ghcli_extensions_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
||||||
@@ -509,7 +523,7 @@ pub fn update_julia_packages(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
print_separator("Julia Packages");
|
print_separator("Julia Packages");
|
||||||
|
|
||||||
ctx.run_type()
|
ctx.run_type()
|
||||||
.execute(&julia)
|
.execute(julia)
|
||||||
.args(["-e", "using Pkg; Pkg.update()"])
|
.args(["-e", "using Pkg; Pkg.update()"])
|
||||||
.check_run()
|
.check_run()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ pub fn upgrade_kak_plug(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Kakoune");
|
print_separator("Kakoune");
|
||||||
|
|
||||||
let mut command = ctx.run_type().execute(&kak);
|
let mut command = ctx.run_type().execute(kak);
|
||||||
command.args(["-ui", "dummy", "-e", UPGRADE_KAK]);
|
command.args(["-ui", "dummy", "-e", UPGRADE_KAK]);
|
||||||
|
|
||||||
let output = command.output()?;
|
let output = command.output()?;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#![allow(unused_imports)]
|
#![allow(unused_imports)]
|
||||||
|
|
||||||
|
use std::fmt::Display;
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
use std::os::unix::prelude::MetadataExt;
|
use std::os::unix::prelude::MetadataExt;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
@@ -17,24 +18,71 @@ use crate::terminal::print_separator;
|
|||||||
use crate::utils::{require, PathExt};
|
use crate::utils::{require, PathExt};
|
||||||
use crate::{error::SkipStep, execution_context::ExecutionContext};
|
use crate::{error::SkipStep, execution_context::ExecutionContext};
|
||||||
|
|
||||||
|
enum NPMVariant {
|
||||||
|
Npm,
|
||||||
|
Pnpm,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl NPMVariant {
|
||||||
|
const fn long_name(&self) -> &str {
|
||||||
|
match self {
|
||||||
|
NPMVariant::Npm => "Node Package Manager",
|
||||||
|
NPMVariant::Pnpm => "PNPM",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fn short_name(&self) -> &str {
|
||||||
|
match self {
|
||||||
|
NPMVariant::Npm => "npm",
|
||||||
|
NPMVariant::Pnpm => "pnpm",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fn is_npm(&self) -> bool {
|
||||||
|
matches!(self, NPMVariant::Npm)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for NPMVariant {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
f.write_str(self.short_name())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(clippy::upper_case_acronyms)]
|
#[allow(clippy::upper_case_acronyms)]
|
||||||
struct NPM {
|
struct NPM {
|
||||||
command: PathBuf,
|
command: PathBuf,
|
||||||
|
variant: NPMVariant,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NPM {
|
impl NPM {
|
||||||
fn new(command: PathBuf) -> Self {
|
fn new(command: PathBuf, variant: NPMVariant) -> Self {
|
||||||
Self { command }
|
Self { command, variant }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Is the “NPM” version larger than 8.11.0?
|
||||||
|
fn is_npm_8(&self) -> bool {
|
||||||
|
let v = self.version();
|
||||||
|
|
||||||
|
self.variant.is_npm() && matches!(v, Ok(v) if v >= Version::new(8, 11, 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the most suitable “global location” argument
|
||||||
|
/// of this NPM instance.
|
||||||
|
///
|
||||||
|
/// If the “NPM” version is larger than 8.11.0, we use
|
||||||
|
/// `--location=global`; otherwise, use `-g`.
|
||||||
|
fn global_location_arg(&self) -> &str {
|
||||||
|
if self.is_npm_8() {
|
||||||
|
"--location=global"
|
||||||
|
} else {
|
||||||
|
"-g"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
fn root(&self) -> Result<PathBuf> {
|
fn root(&self) -> Result<PathBuf> {
|
||||||
let version = self.version()?;
|
let args = ["root", self.global_location_arg()];
|
||||||
let args = if version < Version::new(8, 11, 0) {
|
|
||||||
["root", "-g"]
|
|
||||||
} else {
|
|
||||||
["root", "--location=global"]
|
|
||||||
};
|
|
||||||
Command::new(&self.command)
|
Command::new(&self.command)
|
||||||
.args(args)
|
.args(args)
|
||||||
.check_output()
|
.check_output()
|
||||||
@@ -50,13 +98,8 @@ impl NPM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn upgrade(&self, run_type: RunType, use_sudo: bool) -> Result<()> {
|
fn upgrade(&self, run_type: RunType, use_sudo: bool) -> Result<()> {
|
||||||
print_separator("Node Package Manager");
|
print_separator(self.variant.long_name());
|
||||||
let version = self.version()?;
|
let args = ["update", self.global_location_arg()];
|
||||||
let args = if version < Version::new(8, 11, 0) {
|
|
||||||
["update", "-g"]
|
|
||||||
} else {
|
|
||||||
["update", "--location=global"]
|
|
||||||
};
|
|
||||||
if use_sudo {
|
if use_sudo {
|
||||||
run_type.execute("sudo").args(args).check_run()?;
|
run_type.execute("sudo").args(args).check_run()?;
|
||||||
} else {
|
} else {
|
||||||
@@ -70,7 +113,7 @@ impl NPM {
|
|||||||
pub fn should_use_sudo(&self) -> Result<bool> {
|
pub fn should_use_sudo(&self) -> Result<bool> {
|
||||||
let npm_root = self.root()?;
|
let npm_root = self.root()?;
|
||||||
if !npm_root.exists() {
|
if !npm_root.exists() {
|
||||||
return Err(SkipStep(format!("NPM root at {} doesn't exist", npm_root.display(),)).into());
|
return Err(SkipStep(format!("{} root at {} doesn't exist", self.variant, npm_root.display())).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
let metadata = std::fs::metadata(&npm_root)?;
|
let metadata = std::fs::metadata(&npm_root)?;
|
||||||
@@ -93,6 +136,17 @@ impl Yarn {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn has_global_subcmd(&self) -> bool {
|
||||||
|
// Get the version of Yarn. After Yarn 2.x (berry),
|
||||||
|
// “yarn global” has been replaced with “yarn dlx”.
|
||||||
|
//
|
||||||
|
// As “yarn dlx” don't need to “upgrade”, we
|
||||||
|
// ignore the whole task if Yarn is 2.x or above.
|
||||||
|
let version = Command::new(&self.command).args(["--version"]).check_output();
|
||||||
|
|
||||||
|
matches!(version, Ok(ver) if ver.starts_with('1') || ver.starts_with('0'))
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
fn root(&self) -> Result<PathBuf> {
|
fn root(&self) -> Result<PathBuf> {
|
||||||
let args = ["global", "dir"];
|
let args = ["global", "dir"];
|
||||||
@@ -123,7 +177,7 @@ impl Yarn {
|
|||||||
pub fn should_use_sudo(&self) -> Result<bool> {
|
pub fn should_use_sudo(&self) -> Result<bool> {
|
||||||
let yarn_root = self.root()?;
|
let yarn_root = self.root()?;
|
||||||
if !yarn_root.exists() {
|
if !yarn_root.exists() {
|
||||||
return Err(SkipStep(format!("NPM root at {} doesn't exist", yarn_root.display(),)).into());
|
return Err(SkipStep(format!("Yarn root at {} doesn't exist", yarn_root.display(),)).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
let metadata = std::fs::metadata(&yarn_root)?;
|
let metadata = std::fs::metadata(&yarn_root)?;
|
||||||
@@ -162,7 +216,7 @@ fn should_use_sudo_yarn(yarn: &Yarn, ctx: &ExecutionContext) -> Result<bool> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_npm_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_npm_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
||||||
let npm = require("pnpm").or_else(|_| require("npm")).map(NPM::new)?;
|
let npm = require("npm").map(|b| NPM::new(b, NPMVariant::Npm))?;
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
{
|
{
|
||||||
@@ -175,9 +229,28 @@ pub fn run_npm_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn run_pnpm_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
||||||
|
let pnpm = require("pnpm").map(|b| NPM::new(b, NPMVariant::Pnpm))?;
|
||||||
|
|
||||||
|
#[cfg(target_os = "linux")]
|
||||||
|
{
|
||||||
|
pnpm.upgrade(ctx.run_type(), should_use_sudo(&pnpm, ctx)?)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(target_os = "linux"))]
|
||||||
|
{
|
||||||
|
pnpm.upgrade(ctx.run_type(), false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run_yarn_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_yarn_upgrade(ctx: &ExecutionContext) -> Result<()> {
|
||||||
let yarn = require("yarn").map(Yarn::new)?;
|
let yarn = require("yarn").map(Yarn::new)?;
|
||||||
|
|
||||||
|
if !yarn.has_global_subcmd() {
|
||||||
|
debug!("Yarn is 2.x or above, skipping global upgrade");
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
{
|
{
|
||||||
yarn.upgrade(ctx.run_type(), should_use_sudo_yarn(&yarn, ctx)?)
|
yarn.upgrade(ctx.run_type(), should_use_sudo_yarn(&yarn, ctx)?)
|
||||||
|
|||||||
@@ -5,27 +5,33 @@ use crate::Step;
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
pub fn upgrade_packages(ctx: &ExecutionContext) -> Result<()> {
|
pub fn upgrade_packages(ctx: &ExecutionContext) -> Result<()> {
|
||||||
let pkg = require("pkg")?;
|
//let pkg = require("pkg")?;
|
||||||
|
let pkg = which("nala").or_else(|| which("pkg")).unwrap();
|
||||||
|
|
||||||
print_separator("Termux Packages");
|
print_separator("Termux Packages");
|
||||||
|
|
||||||
|
let is_nala = pkg.end_with("nala");
|
||||||
|
|
||||||
let mut command = ctx.run_type().execute(&pkg);
|
let mut command = ctx.run_type().execute(&pkg);
|
||||||
command.arg("upgrade");
|
command.arg("upgrade");
|
||||||
|
|
||||||
if ctx.config().yes(Step::System) {
|
if ctx.config().yes(Step::System) {
|
||||||
command.arg("-y");
|
command.arg("-y");
|
||||||
}
|
}
|
||||||
command.check_run()?;
|
command.check_run()?;
|
||||||
|
|
||||||
if ctx.config().cleanup() {
|
if !is_nala {
|
||||||
ctx.run_type().execute(&pkg).arg("clean").check_run()?;
|
if ctx.config().cleanup() {
|
||||||
|
ctx.run_type().execute(&pkg).arg("clean").check_run()?;
|
||||||
|
|
||||||
let apt = require("apt")?;
|
let apt = require("apt")?;
|
||||||
let mut command = ctx.run_type().execute(&apt);
|
let mut command = ctx.run_type().execute(&apt);
|
||||||
command.arg("autoremove");
|
command.arg("autoremove");
|
||||||
if ctx.config().yes(Step::System) {
|
if ctx.config().yes(Step::System) {
|
||||||
command.arg("-y");
|
command.arg("-y");
|
||||||
|
}
|
||||||
|
command.check_run()?;
|
||||||
}
|
}
|
||||||
command.check_run()?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ impl Aura {
|
|||||||
|
|
||||||
impl ArchPackageManager for Aura {
|
impl ArchPackageManager for Aura {
|
||||||
fn upgrade(&self, ctx: &ExecutionContext) -> Result<()> {
|
fn upgrade(&self, ctx: &ExecutionContext) -> Result<()> {
|
||||||
let sudo = which("sudo").unwrap_or(PathBuf::new());
|
let sudo = which("sudo").unwrap_or_else(PathBuf::new);
|
||||||
let mut aur_update = ctx.run_type().execute(&sudo);
|
let mut aur_update = ctx.run_type().execute(&sudo);
|
||||||
|
|
||||||
if sudo.ends_with("sudo") {
|
if sudo.ends_with("sudo") {
|
||||||
|
|||||||
@@ -606,6 +606,29 @@ pub fn run_protonup_update(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn run_distrobox_update(ctx: &ExecutionContext) -> Result<()> {
|
||||||
|
print_separator("Distrobox");
|
||||||
|
match (
|
||||||
|
match (
|
||||||
|
ctx.run_type().execute("distrobox").arg("upgrade"),
|
||||||
|
ctx.config().distrobox_containers(),
|
||||||
|
) {
|
||||||
|
(r, Some(c)) => {
|
||||||
|
if c.is_empty() {
|
||||||
|
return Err(SkipStep("You need to specify at least one container".to_string()).into());
|
||||||
|
}
|
||||||
|
r.args(c)
|
||||||
|
}
|
||||||
|
(r, None) => r.arg("--all"),
|
||||||
|
},
|
||||||
|
ctx.config().distrobox_root(),
|
||||||
|
) {
|
||||||
|
(r, true) => r.arg("--root"),
|
||||||
|
(r, false) => r,
|
||||||
|
}
|
||||||
|
.check_run()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn run_config_update(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_config_update(ctx: &ExecutionContext) -> Result<()> {
|
||||||
let sudo = require_option(ctx.sudo().as_ref(), String::from("sudo is not installed"))?;
|
let sudo = require_option(ctx.sudo().as_ref(), String::from("sudo is not installed"))?;
|
||||||
if ctx.config().yes(Step::ConfigUpdate) {
|
if ctx.config().yes(Step::ConfigUpdate) {
|
||||||
|
|||||||
@@ -11,15 +11,15 @@ pub fn run_macports(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
require("port")?;
|
require("port")?;
|
||||||
let sudo = ctx.sudo().as_ref().unwrap();
|
let sudo = ctx.sudo().as_ref().unwrap();
|
||||||
print_separator("MacPorts");
|
print_separator("MacPorts");
|
||||||
ctx.run_type().execute(sudo).args(&["port", "selfupdate"]).check_run()?;
|
ctx.run_type().execute(sudo).args(["port", "selfupdate"]).check_run()?;
|
||||||
ctx.run_type()
|
ctx.run_type()
|
||||||
.execute(sudo)
|
.execute(sudo)
|
||||||
.args(&["port", "-u", "upgrade", "outdated"])
|
.args(["port", "-u", "upgrade", "outdated"])
|
||||||
.check_run()?;
|
.check_run()?;
|
||||||
if ctx.config().cleanup() {
|
if ctx.config().cleanup() {
|
||||||
ctx.run_type()
|
ctx.run_type()
|
||||||
.execute(sudo)
|
.execute(sudo)
|
||||||
.args(&["port", "-N", "reclaim"])
|
.args(["port", "-N", "reclaim"])
|
||||||
.check_run()?;
|
.check_run()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ pub fn upgrade_macos(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut command = ctx.run_type().execute("softwareupdate");
|
let mut command = ctx.run_type().execute("softwareupdate");
|
||||||
command.args(&["--install", "--all"]);
|
command.args(["--install", "--all"]);
|
||||||
|
|
||||||
if should_ask {
|
if should_ask {
|
||||||
command.arg("--no-scan");
|
command.arg("--no-scan");
|
||||||
@@ -81,12 +81,12 @@ pub fn run_sparkle(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
for application in (fs::read_dir("/Applications")?).flatten() {
|
for application in (fs::read_dir("/Applications")?).flatten() {
|
||||||
let probe = Command::new(&sparkle)
|
let probe = Command::new(&sparkle)
|
||||||
.args(&["--probe", "--application"])
|
.args(["--probe", "--application"])
|
||||||
.arg(application.path())
|
.arg(application.path())
|
||||||
.check_output();
|
.check_output();
|
||||||
if probe.is_ok() {
|
if probe.is_ok() {
|
||||||
let mut command = ctx.run_type().execute(&sparkle);
|
let mut command = ctx.run_type().execute(&sparkle);
|
||||||
command.args(&["bundle", "--check-immediately", "--application"]);
|
command.args(["bundle", "--check-immediately", "--application"]);
|
||||||
command.arg(application.path());
|
command.arg(application.path());
|
||||||
command.spawn()?.wait()?;
|
command.spawn()?.wait()?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ pub mod freebsd;
|
|||||||
pub mod linux;
|
pub mod linux;
|
||||||
#[cfg(target_os = "macos")]
|
#[cfg(target_os = "macos")]
|
||||||
pub mod macos;
|
pub mod macos;
|
||||||
|
#[cfg(target_os = "openbsd")]
|
||||||
|
pub mod openbsd;
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
pub mod unix;
|
pub mod unix;
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
|
|||||||
17
src/steps/os/openbsd.rs
Normal file
17
src/steps/os/openbsd.rs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
use crate::executor::RunType;
|
||||||
|
use crate::terminal::print_separator;
|
||||||
|
use crate::utils::require_option;
|
||||||
|
use anyhow::Result;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
pub fn upgrade_openbsd(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
|
||||||
|
let sudo = require_option(sudo, String::from("No sudo detected"))?;
|
||||||
|
print_separator("OpenBSD Update");
|
||||||
|
run_type.execute(sudo).args(&["/usr/sbin/sysupgrade", "-n"]).check_run()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn upgrade_packages(sudo: Option<&PathBuf>, run_type: RunType) -> Result<()> {
|
||||||
|
let sudo = require_option(sudo, String::from("No sudo detected"))?;
|
||||||
|
print_separator("OpenBSD Packages");
|
||||||
|
run_type.execute(sudo).args(&["/usr/sbin/pkg_add", "-u"]).check_run()
|
||||||
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
|
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
|
||||||
NAME="Debian GNU/Linux"
|
NAME="Debian GNU/Linux"
|
||||||
VERSION_ID="8"
|
VERSION_ID="11"
|
||||||
VERSION="8 (jessie)"
|
VERSION="11 (bullseye)"
|
||||||
|
VERSION_CODENAME=bullseye
|
||||||
ID=debian
|
ID=debian
|
||||||
HOME_URL="http://www.debian.org/"
|
HOME_URL="https://www.debian.org/"
|
||||||
SUPPORT_URL="http://www.debian.org/support"
|
SUPPORT_URL="https://www.debian.org/support"
|
||||||
BUG_REPORT_URL="https://bugs.debian.org/"
|
BUG_REPORT_URL="https://bugs.debian.org/"
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ pub fn run_oh_my_fish(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("oh-my-fish");
|
print_separator("oh-my-fish");
|
||||||
|
|
||||||
ctx.run_type().execute(&fish).args(["-c", "omf update"]).check_run()
|
ctx.run_type().execute(fish).args(["-c", "omf update"]).check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_pkgin(ctx: &ExecutionContext) -> Result<()> {
|
pub fn run_pkgin(ctx: &ExecutionContext) -> Result<()> {
|
||||||
@@ -154,7 +154,24 @@ pub fn run_fish_plug(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("fish-plug");
|
print_separator("fish-plug");
|
||||||
|
|
||||||
ctx.run_type().execute(&fish).args(["-c", "plug update"]).check_run()
|
ctx.run_type().execute(fish).args(["-c", "plug update"]).check_run()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Upgrades `fundle` and `fundle` plugins.
|
||||||
|
///
|
||||||
|
/// `fundle` is a package manager for the Fish shell.
|
||||||
|
///
|
||||||
|
/// See: <https://github.com/danhper/fundle>
|
||||||
|
pub fn run_fundle(ctx: &ExecutionContext) -> Result<()> {
|
||||||
|
let fish = require("fish")?;
|
||||||
|
ctx.base_dirs().home_dir().join(".config/fish/fundle").require()?;
|
||||||
|
|
||||||
|
print_separator("fundle");
|
||||||
|
|
||||||
|
ctx.run_type()
|
||||||
|
.execute(fish)
|
||||||
|
.args(["-c", "fundle self-update && fundle update"])
|
||||||
|
.check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "android", target_os = "macos")))]
|
#[cfg(not(any(target_os = "android", target_os = "macos")))]
|
||||||
@@ -241,19 +258,19 @@ pub fn run_brew_cask(ctx: &ExecutionContext, variant: BrewVariant) -> Result<()>
|
|||||||
|
|
||||||
let cask_upgrade_exists = variant
|
let cask_upgrade_exists = variant
|
||||||
.execute(RunType::Wet)
|
.execute(RunType::Wet)
|
||||||
.args(&["--repository", "buo/cask-upgrade"])
|
.args(["--repository", "buo/cask-upgrade"])
|
||||||
.check_output()
|
.check_output()
|
||||||
.map(|p| Path::new(p.trim()).exists())?;
|
.map(|p| Path::new(p.trim()).exists())?;
|
||||||
|
|
||||||
let mut brew_args = vec![];
|
let mut brew_args = vec![];
|
||||||
|
|
||||||
if cask_upgrade_exists {
|
if cask_upgrade_exists {
|
||||||
brew_args.extend(&["cu", "-y"]);
|
brew_args.extend(["cu", "-y"]);
|
||||||
if ctx.config().brew_cask_greedy() {
|
if ctx.config().brew_cask_greedy() {
|
||||||
brew_args.push("-a");
|
brew_args.push("-a");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
brew_args.extend(&["upgrade", "--cask"]);
|
brew_args.extend(["upgrade", "--cask"]);
|
||||||
if ctx.config().brew_cask_greedy() {
|
if ctx.config().brew_cask_greedy() {
|
||||||
brew_args.push("--greedy");
|
brew_args.push("--greedy");
|
||||||
}
|
}
|
||||||
@@ -335,7 +352,7 @@ pub fn run_nix(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
run_type.execute(&nix_channel).arg("--update").check_run()?;
|
run_type.execute(nix_channel).arg("--update").check_run()?;
|
||||||
|
|
||||||
if std::path::Path::new(&manifest_json_path).exists() {
|
if std::path::Path::new(&manifest_json_path).exists() {
|
||||||
run_type
|
run_type
|
||||||
@@ -354,7 +371,7 @@ pub fn run_yadm(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("yadm");
|
print_separator("yadm");
|
||||||
|
|
||||||
ctx.run_type().execute(&yadm).arg("pull").check_run()
|
ctx.run_type().execute(yadm).arg("pull").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_asdf(run_type: RunType) -> Result<()> {
|
pub fn run_asdf(run_type: RunType) -> Result<()> {
|
||||||
@@ -375,21 +392,21 @@ pub fn run_home_manager(run_type: RunType) -> Result<()> {
|
|||||||
let home_manager = require("home-manager")?;
|
let home_manager = require("home-manager")?;
|
||||||
|
|
||||||
print_separator("home-manager");
|
print_separator("home-manager");
|
||||||
run_type.execute(&home_manager).arg("switch").check_run()
|
run_type.execute(home_manager).arg("switch").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_tldr(run_type: RunType) -> Result<()> {
|
pub fn run_tldr(run_type: RunType) -> Result<()> {
|
||||||
let tldr = require("tldr")?;
|
let tldr = require("tldr")?;
|
||||||
|
|
||||||
print_separator("TLDR");
|
print_separator("TLDR");
|
||||||
run_type.execute(&tldr).arg("--update").check_run()
|
run_type.execute(tldr).arg("--update").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_pearl(run_type: RunType) -> Result<()> {
|
pub fn run_pearl(run_type: RunType) -> Result<()> {
|
||||||
let pearl = require("pearl")?;
|
let pearl = require("pearl")?;
|
||||||
print_separator("pearl");
|
print_separator("pearl");
|
||||||
|
|
||||||
run_type.execute(&pearl).arg("update").check_run()
|
run_type.execute(pearl).arg("update").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_sdkman(base_dirs: &BaseDirs, cleanup: bool, run_type: RunType) -> Result<()> {
|
pub fn run_sdkman(base_dirs: &BaseDirs, cleanup: bool, run_type: RunType) -> Result<()> {
|
||||||
@@ -454,7 +471,17 @@ pub fn run_bun(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("Bun");
|
print_separator("Bun");
|
||||||
|
|
||||||
ctx.run_type().execute(&bun).arg("upgrade").check_run()
|
ctx.run_type().execute(bun).arg("upgrade").check_run()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Update dotfiles with `rcm(7)`.
|
||||||
|
///
|
||||||
|
/// See: <https://github.com/thoughtbot/rcm>
|
||||||
|
pub fn run_rcm(ctx: &ExecutionContext) -> Result<()> {
|
||||||
|
let rcup = require("rcup")?;
|
||||||
|
|
||||||
|
print_separator("rcm");
|
||||||
|
ctx.run_type().execute(rcup).arg("-v").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn reboot() {
|
pub fn reboot() {
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ impl Powershell {
|
|||||||
println!("Updating modules...");
|
println!("Updating modules...");
|
||||||
ctx.run_type()
|
ctx.run_type()
|
||||||
.execute(powershell)
|
.execute(powershell)
|
||||||
|
// This probably doesn't need `shell_words::join`.
|
||||||
.args(["-NoProfile", "-Command", &cmd.join(" ")])
|
.args(["-NoProfile", "-Command", &cmd.join(" ")])
|
||||||
.check_run()
|
.check_run()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ pub fn ssh_step(ctx: &ExecutionContext, hostname: &str) -> Result<()> {
|
|||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
{
|
{
|
||||||
prepare_async_ssh_command(&mut args);
|
prepare_async_ssh_command(&mut args);
|
||||||
crate::tmux::run_command(ctx, &args.join(" "))?;
|
crate::tmux::run_command(ctx, &shell_words::join(args))?;
|
||||||
Err(SkipStep(String::from("Remote Topgrade launched in Tmux")).into())
|
Err(SkipStep(String::from("Remote Topgrade launched in Tmux")).into())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,6 +47,6 @@ pub fn ssh_step(ctx: &ExecutionContext, hostname: &str) -> Result<()> {
|
|||||||
print_separator(format!("Remote ({})", hostname));
|
print_separator(format!("Remote ({})", hostname));
|
||||||
println!("Connecting to {}...", hostname);
|
println!("Connecting to {}...", hostname);
|
||||||
|
|
||||||
ctx.run_type().execute(&ssh).args(&args).check_run()
|
ctx.run_type().execute(ssh).args(&args).check_run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ pub fn run_tpm(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
|||||||
|
|
||||||
print_separator("tmux plugins");
|
print_separator("tmux plugins");
|
||||||
|
|
||||||
run_type.execute(&tpm).arg("all").check_run()
|
run_type.execute(tpm).arg("all").check_run()
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Tmux {
|
struct Tmux {
|
||||||
@@ -29,12 +29,10 @@ struct Tmux {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Tmux {
|
impl Tmux {
|
||||||
fn new(args: &Option<String>) -> Self {
|
fn new(args: Vec<String>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
tmux: which("tmux").expect("Could not find tmux"),
|
tmux: which("tmux").expect("Could not find tmux"),
|
||||||
args: args
|
args: if args.is_empty() { None } else { Some(args) },
|
||||||
.as_ref()
|
|
||||||
.map(|args| args.split_whitespace().map(String::from).collect()),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +73,7 @@ impl Tmux {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_in_tmux(args: &Option<String>) -> ! {
|
pub fn run_in_tmux(args: Vec<String>) -> ! {
|
||||||
let command = {
|
let command = {
|
||||||
let mut command = vec![
|
let mut command = vec![
|
||||||
String::from("env"),
|
String::from("env"),
|
||||||
@@ -83,7 +81,7 @@ pub fn run_in_tmux(args: &Option<String>) -> ! {
|
|||||||
String::from("TOPGRADE_INSIDE_TMUX=1"),
|
String::from("TOPGRADE_INSIDE_TMUX=1"),
|
||||||
];
|
];
|
||||||
command.extend(env::args());
|
command.extend(env::args());
|
||||||
command.join(" ")
|
shell_words::join(command)
|
||||||
};
|
};
|
||||||
|
|
||||||
let tmux = Tmux::new(args);
|
let tmux = Tmux::new(args);
|
||||||
@@ -92,7 +90,7 @@ pub fn run_in_tmux(args: &Option<String>) -> ! {
|
|||||||
tmux.new_session("topgrade").expect("Error creating a tmux session");
|
tmux.new_session("topgrade").expect("Error creating a tmux session");
|
||||||
}
|
}
|
||||||
|
|
||||||
tmux.run_in_session(&command).expect("Error running topgrade in tmux");
|
tmux.run_in_session(&command).expect("Error running Topgrade in tmux");
|
||||||
tmux.build()
|
tmux.build()
|
||||||
.args(["kill-window", "-t", "topgrade:dummy"])
|
.args(["kill-window", "-t", "topgrade:dummy"])
|
||||||
.output()
|
.output()
|
||||||
@@ -108,7 +106,7 @@ pub fn run_in_tmux(args: &Option<String>) -> ! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_command(ctx: &ExecutionContext, command: &str) -> Result<()> {
|
pub fn run_command(ctx: &ExecutionContext, command: &str) -> Result<()> {
|
||||||
Tmux::new(ctx.config().tmux_arguments())
|
Tmux::new(ctx.config().tmux_arguments()?)
|
||||||
.build()
|
.build()
|
||||||
.args(["new-window", "-a", "-t", "topgrade:1", command])
|
.args(["new-window", "-a", "-t", "topgrade:1", command])
|
||||||
.env_remove("TMUX")
|
.env_remove("TMUX")
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ pub fn run_toolbx(ctx: &ExecutionContext) -> Result<()> {
|
|||||||
debug!("Toolboxes to inspect: {:?}", toolboxes);
|
debug!("Toolboxes to inspect: {:?}", toolboxes);
|
||||||
|
|
||||||
let mut topgrade_path = PathBuf::from("/run/host");
|
let mut topgrade_path = PathBuf::from("/run/host");
|
||||||
// Path of the running topgrade executable
|
// Path of the running Topgrade executable
|
||||||
// Skip 1 to eliminate the path root, otherwise push overwrites the path
|
// Skip 1 to eliminate the path root, otherwise push overwrites the path
|
||||||
topgrade_path.push(std::env::current_exe()?.components().skip(1).collect::<PathBuf>());
|
topgrade_path.push(std::env::current_exe()?.components().skip(1).collect::<PathBuf>());
|
||||||
let topgrade_path = topgrade_path.to_str().unwrap();
|
let topgrade_path = topgrade_path.to_str().unwrap();
|
||||||
|
|||||||
@@ -18,11 +18,6 @@ if exists(":PlugUpgrade")
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists(":PackerUpdate")
|
|
||||||
echo "Packer"
|
|
||||||
PackerSync
|
|
||||||
endif
|
|
||||||
|
|
||||||
if exists("*dein#update()")
|
if exists("*dein#update()")
|
||||||
echo "dein#update()"
|
echo "dein#update()"
|
||||||
call dein#update()
|
call dein#update()
|
||||||
@@ -43,4 +38,10 @@ if exists(":CocUpdateSync")
|
|||||||
CocUpdateSync
|
CocUpdateSync
|
||||||
endif
|
endif
|
||||||
|
|
||||||
quitall
|
if exists(':PackerSync')
|
||||||
|
echo "Packer"
|
||||||
|
autocmd User PackerComplete quitall
|
||||||
|
PackerSync
|
||||||
|
else
|
||||||
|
quitall
|
||||||
|
endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use crate::error::{SkipStep, TopgradeError};
|
use crate::error::{SkipStep, TopgradeError};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
use crate::executor::{CommandExt, ExecutorOutput, RunType};
|
use crate::executor::{CommandExt, Executor, ExecutorOutput, RunType};
|
||||||
use crate::terminal::print_separator;
|
use crate::terminal::print_separator;
|
||||||
use crate::{
|
use crate::{
|
||||||
execution_context::ExecutionContext,
|
execution_context::ExecutionContext,
|
||||||
@@ -9,7 +9,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use directories::BaseDirs;
|
use directories::BaseDirs;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::PathBuf;
|
||||||
use std::{
|
use std::{
|
||||||
io::{self, Write},
|
io::{self, Write},
|
||||||
process::Command,
|
process::Command,
|
||||||
@@ -40,19 +40,14 @@ fn nvimrc(base_dirs: &BaseDirs) -> Result<PathBuf> {
|
|||||||
.or_else(|_| base_dir.join("nvim/init.lua").require())
|
.or_else(|_| base_dir.join("nvim/init.lua").require())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn upgrade(vim: &Path, vimrc: &Path, ctx: &ExecutionContext) -> Result<()> {
|
fn upgrade_script() -> Result<tempfile::NamedTempFile> {
|
||||||
let mut tempfile = tempfile::NamedTempFile::new()?;
|
let mut tempfile = tempfile::NamedTempFile::new()?;
|
||||||
tempfile.write_all(UPGRADE_VIM.replace('\r', "").as_bytes())?;
|
tempfile.write_all(UPGRADE_VIM.replace('\r', "").as_bytes())?;
|
||||||
debug!("Wrote vim script to {:?}", tempfile.path());
|
debug!("Wrote vim script to {:?}", tempfile.path());
|
||||||
|
Ok(tempfile)
|
||||||
|
}
|
||||||
|
|
||||||
let mut command = ctx.run_type().execute(vim);
|
fn upgrade(command: &mut Executor, ctx: &ExecutionContext) -> Result<()> {
|
||||||
|
|
||||||
command
|
|
||||||
.args(["-u"])
|
|
||||||
.arg(vimrc)
|
|
||||||
.args(["-U", "NONE", "-V1", "-nNesS"])
|
|
||||||
.arg(tempfile.path());
|
|
||||||
|
|
||||||
if ctx.config().force_vim_plug_update() {
|
if ctx.config().force_vim_plug_update() {
|
||||||
command.env("TOPGRADE_FORCE_PLUGUPDATE", "true");
|
command.env("TOPGRADE_FORCE_PLUGUPDATE", "true");
|
||||||
}
|
}
|
||||||
@@ -114,13 +109,21 @@ pub fn upgrade_vim(base_dirs: &BaseDirs, ctx: &ExecutionContext) -> Result<()> {
|
|||||||
|
|
||||||
let output = Command::new(&vim).arg("--version").check_output()?;
|
let output = Command::new(&vim).arg("--version").check_output()?;
|
||||||
if !output.starts_with("VIM") {
|
if !output.starts_with("VIM") {
|
||||||
return Err(SkipStep(String::from("vim binary might by actually nvim")).into());
|
return Err(SkipStep(String::from("vim binary might be actually nvim")).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
let vimrc = vimrc(base_dirs)?;
|
let vimrc = vimrc(base_dirs)?;
|
||||||
|
|
||||||
print_separator("Vim");
|
print_separator("Vim");
|
||||||
upgrade(&vim, &vimrc, ctx)
|
upgrade(
|
||||||
|
ctx.run_type()
|
||||||
|
.execute(&vim)
|
||||||
|
.args(["-u"])
|
||||||
|
.arg(vimrc)
|
||||||
|
.args(["-U", "NONE", "-V1", "-nNesS"])
|
||||||
|
.arg(upgrade_script()?.path()),
|
||||||
|
ctx,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn upgrade_neovim(base_dirs: &BaseDirs, ctx: &ExecutionContext) -> Result<()> {
|
pub fn upgrade_neovim(base_dirs: &BaseDirs, ctx: &ExecutionContext) -> Result<()> {
|
||||||
@@ -128,7 +131,15 @@ pub fn upgrade_neovim(base_dirs: &BaseDirs, ctx: &ExecutionContext) -> Result<()
|
|||||||
let nvimrc = nvimrc(base_dirs)?;
|
let nvimrc = nvimrc(base_dirs)?;
|
||||||
|
|
||||||
print_separator("Neovim");
|
print_separator("Neovim");
|
||||||
upgrade(&nvim, &nvimrc, ctx)
|
upgrade(
|
||||||
|
ctx.run_type()
|
||||||
|
.execute(nvim)
|
||||||
|
.args(["-u"])
|
||||||
|
.arg(nvimrc)
|
||||||
|
.args(["--headless", "-V1", "-nS"])
|
||||||
|
.arg(upgrade_script()?.path()),
|
||||||
|
ctx,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run_voom(_base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
pub fn run_voom(_base_dirs: &BaseDirs, run_type: RunType) -> Result<()> {
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ impl Terminal {
|
|||||||
self.term.set_title("Topgrade - Awaiting user");
|
self.term.set_title("Topgrade - Awaiting user");
|
||||||
}
|
}
|
||||||
|
|
||||||
self.notify_desktop(&format!("{} failed", step_name), None);
|
self.notify_desktop(format!("{} failed", step_name), None);
|
||||||
|
|
||||||
self.term
|
self.term
|
||||||
.write_fmt(format_args!(
|
.write_fmt(format_args!(
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
.TH "topgrade" "8"
|
.TH "topgrade" "8"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.PP
|
.PP
|
||||||
topgrade \- upgrade everything
|
Topgrade \- Upgrade everything
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.PP
|
.PP
|
||||||
topgrade [\fIoptions\f[]]
|
topgrade [\fIoptions\f[]]
|
||||||
@@ -10,7 +10,7 @@ topgrade [\fIoptions\f[]]
|
|||||||
.PP
|
.PP
|
||||||
Keeping your system up to date usually involves invoking multiple package managers.
|
Keeping your system up to date usually involves invoking multiple package managers.
|
||||||
This results in big, non-portable shell one-liners saved in your shell.
|
This results in big, non-portable shell one-liners saved in your shell.
|
||||||
To remedy this, \fBtopgrade\fR detects which tools you use and runs the appropriate commands to update them.
|
To remedy this, \fBTopgrade\fR detects which tools you use and runs the appropriate commands to update them.
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
.B \-\-only <only>
|
.B \-\-only <only>
|
||||||
@@ -75,6 +75,6 @@ A list of steps must be provided as a list of separate arguments, i.e. 'topgrade
|
|||||||
.SH BUGS
|
.SH BUGS
|
||||||
For a list of bugs see <\fIhttps://github.com/r-darwish/topgrade/issues\fR>.
|
For a list of bugs see <\fIhttps://github.com/r-darwish/topgrade/issues\fR>.
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
\fBtopgrade\fR is maintained by Roey Dror (\[aq]r\-darwish\[aq]) and many other contributors.
|
\fBTopgrade\fR is maintained by Roey Dror (\[aq]r\-darwish\[aq]) and many other contributors.
|
||||||
You can view the full list at
|
You can view the full list at
|
||||||
<\fIhttps://github.com/r-darwish/topgrade/graphs/contributors\fR>
|
<\fIhttps://github.com/r-darwish/topgrade/graphs/contributors\fR>
|
||||||
|
|||||||
Reference in New Issue
Block a user