Ringkasan baris perintah
Sebagai bagian dari bekerja dengan ruang kerja, kargo melakukan penyatuan fitur: https://doc.rust-lang.org/cargo/reference/features.html#feature-unification
Apa artinya ini?
Misalkan Anda memiliki ruang kerja
[ workspace ]
members = [ " mega " , " potato " ]
Dengan dua anggota: mega
[ package ]
name = " mega "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " mega " ] }
Dan potato
[ package ]
name = " potato "
[ dependencies ]
potatoer = { version = " 0.2.1 " , features = [ " potato " ] }
Keduanya bergantung pada peti potatoer
pihak ketiga yang umum tetapi dengan fitur yang berbeda: mega
tertarik pada fitur "mega"
, potato
tertarik pada fitur "potato"
.
saat menjalankan perintah yang berbeda, Anda akhirnya memerlukan beberapa versi peti potatoer
yang berbeda.
Seluruh perintah ruang kerja akan menggunakan versi dengan fitur terpadu:
cargo check # this will use potatoer with both "mega" and "potato"
Perintah yang beroperasi pada satu peti akan menggunakan versi tanpa penyatuan:
cargo check -p mega # this will use potatoer with "mega" feature
cargo check -p potatoer # this will use potatoer with "potato" feature
cargo check -p mega -p potato # this will require both "mega" and "potato"
Jika ketergantungan dengan kombinasi yang diperlukan tidak ada - kargo akan mengkompilasinya.
Salah satu cara untuk menghindari masalah ini adalah dengan memastikan bahwa jika anggota ruang kerja bergantung pada sebuah peti - mereka bergantung padanya dengan serangkaian fitur yang sama. Memeliharanya dengan tangan rawan kesalahan dan saat itulah hackerman hack
dan hackerman restore
berperan.
Ketika digunakan dengan opsi --lock
hackerman
akan mengambil checksum dari semua dependensi dan akan menyimpannya di dalam file Cargo.toml
di bawah ["package.metadata.hackerman.lock"]
dan panggilan selanjutnya untuk memeriksa akan mengonfirmasi bahwa checksum ini masih valid .
Hal ini diperlukan untuk memastikan bahwa dependensi asli (yang belum diretas) disimpan dan dapat dipulihkan di lain waktu.
Dimungkinkan untuk melakukan hardcode opsi --lock
dalam file Cargo.toml
yang mendefinisikan ruang kerja:
[ workspace . metadata . hackerman ]
lock = true
Saat ini penyatuan dilakukan hanya untuk target saat ini dan tanpa dukungan kompilasi silang. Pembaruan otomatis untuk file toml ruang kerja mungkin tidak berfungsi jika Anda menetapkan dependensi menggunakan sintaksis yang berbeda dari versi atau {}
:
potato = " 3.14 " # this is okay
banana = { version = " 3.14 " } # this is also okay
Menyelesaikan konflik penggabungan dan rebase untuk file Cargo.toml
yang diubah oleh hacker
Untuk menggunakannya Anda menginginkan sesuatu seperti ini
global .gitconfig
atau lokal .git/config
.
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
file gitattributes
, bisa lokal per proyek atau global
Cargo.toml merge=hackerman
Untuk membuat file gitattributes
global, Anda perlu menentukan jalur ke file tersebut di dalam konfigurasi git global:
[core]
attributesfile = ~/.gitattributes
Di sini saya membandingkan efek dari berbagai pendekatan penyatuan di ruang kerja. Tanpa perubahan apa pun, pemeriksaan bersih seluruh ruang kerja yang melibatkan kompilasi semua dependensi eksternal membutuhkan waktu 672 detik.
Ruang kerja berisi sekumpulan peti, dari mana saya memilih peti a
, b
, c
, dll, sehingga peti b
mengimpor peti a
, peti c
mengimpor peti b
, dll. peti a
tidak mengandung ketergantungan eksternal, peti lain untuk.
cargo hackerman hack
dan dependensi baru ditambahkan ke setiap petiSebelum menjalankan perintah saya membersihkan hasil kompilasi kemudian perintah untuk setiap kolom secara berurutan
memerintah | tidak ada peretasan | hackerman | peretasan manual |
---|---|---|---|
check -pa | 0,86 detik | 0,80 detik | 215,39 detik |
check -pb | 211.30 detik | 240,15 detik | 113,56 detik |
check -pc | 362,69 detik | 233,38 detik | 176,73 detik |
check -pd | 36,16 detik | 0,24 detik | 0,25 detik |
check -pe | 385,35 detik | 66,34 detik | 375,22 detik |
check | 267,06 detik | 93,29 detik | 81,50 detik |
total | 1263.42 | 634.20 | 962.65 |
cargo hackerman
↴cargo hackerman hack
↴cargo hackerman restore
↴cargo hackerman check
↴cargo hackerman merge
↴cargo hackerman explain
↴cargo hackerman dupes
↴cargo hackerman tree
↴cargo hackerman show
↴ Kumpulan alat yang membantu ruang kerja Anda melakukan kompilasi dengan cepat
Penggunaan : COMMAND ...
cargo hackerman
...
Opsi yang tersedia:
-h
, --help
— Mencetak informasi bantuan-V
, --version
— Mencetak informasi versiPerintah yang tersedia:
hack
— Menyatukan ketergantungan peti di seluruh peti di ruang kerjarestore
— Hapus penyatuan ketergantungan peti yang ditambahkan oleh perintah hack
check
— Periksa apakah penyatuan diperlukan dan apakah checksum sudah benarmerge
— Memulihkan file dan menggabungkannya dengan driver penggabungan defaultexplain
- Jelaskan mengapa ada ketergantungan. Fitur dan versi bersifat opsionaldupes
— Mencantumkan semua duplikat di ruang kerjatree
— Membuat pohon dari dependensishow
— Menampilkan manifes peti, readme, repositori, atau dokumentasi Anda dapat meneruskan --help
dua kali untuk bantuan lebih detail
Menyatukan ketergantungan peti di seluruh peti di ruang kerja
Penggunaan : cargo hackerman
hack
CARGO_OPTS
[ --dry
] [ --lock
] [ -D
]
Anda dapat membatalkan perubahan tersebut menggunakan cargo hackerman restore
.
Pilihan kargo:
--manifest-path
= PATH
— Jalur ke file Cargo.toml--frozen
— Memerlukan Cargo.lock dan cache yang terbaru--locked
— Membutuhkan Cargo.lock sudah yang terbaru--offline
— Jalankan tanpa mengakses jaringan-v
, --verbose
— meningkatkan verbositas, dapat digunakan beberapa kaliOpsi yang tersedia:
--dry
— Jangan melakukan tindakan, tampilkan saja
--lock
— Sertakan checksum dependensi ke dalam simpanan
Hal ini membantu memastikan Anda dapat kembali ke dependensi asli (yang belum diretas): untuk dapat memulihkan dependensi asli, peretas perlu menyimpannya di file Cargo.toml
. Jika CI mendeteksi ketidakcocokan checksum, ini berarti dependensi telah diperbarui pada sumber yang diretas. Anda sebaiknya memulihkannya, memperbarui, dan meretasnya lagi.
Anda dapat menjadikan penguncian sebagai perilaku default dengan menambahkan ini ke Cargo.toml
di ruang kerja
[workspace.metadata.hackerman]
lock = true
-D
, --no-dev
— Jangan menyatukan dependensi dev
-h
, --help
— Mencetak informasi bantuan
cargo-hackerman hack
menghitung dan menambahkan satu set minimal dependensi ekstra ke semua anggota ruang kerja sehingga fitur semua dependensi peti ini tetap sama ketika digunakan sebagai bagian dari keseluruhan ruang kerja atau digunakan sendiri.
Setelah dependensi diretas, Anda harus memulihkannya sebelum melakukan perubahan apa pun.
Hapus penyatuan ketergantungan peti yang ditambahkan oleh perintah hack
Penggunaan : cargo hackerman
restore
CARGO_OPTS
[ TOML
]...
Pilihan kargo:
--manifest-path
= PATH
— Jalur ke file Cargo.toml--frozen
— Memerlukan Cargo.lock dan cache yang terbaru--locked
— Membutuhkan Cargo.lock sudah yang terbaru--offline
— Jalankan tanpa mengakses jaringan-v
, --verbose
— meningkatkan verbositas, dapat digunakan beberapa kaliItem posisi yang tersedia:
TOML
— Memulihkan file satu per satu, bukan seluruh ruang kerjaOpsi yang tersedia:
-h
, --help
— Mencetak informasi bantuan Periksa apakah penyatuan diperlukan dan apakah checksum sudah benar
Mirip dengan cargo-hackerman hack --dry
, tetapi juga menyetel status keluar ke 1 sehingga Anda dapat menggunakannya sebagai bagian dari proses CI
Penggunaan : cargo hackerman
check
CARGO_OPTS
[ -D
]
Pilihan kargo:
--manifest-path
= PATH
— Jalur ke file Cargo.toml--frozen
— Memerlukan Cargo.lock dan cache yang terbaru--locked
— Membutuhkan Cargo.lock sudah yang terbaru--offline
— Jalankan tanpa mengakses jaringan-v
, --verbose
— meningkatkan verbositas, dapat digunakan beberapa kaliOpsi yang tersedia:
-D
, --no-dev
— Jangan menyatukan dependensi dev-h
, --help
— Mencetak informasi bantuan Pulihkan file dan gabungkan dengan driver penggabungan default
Penggunaan : cargo hackerman
merge
RESULT
REMOTE
BASE
LOCAL
Opsi yang tersedia:
-h
, --help
— Mencetak informasi bantuan Untuk menggunakannya Anda akan menambahkan sesuatu seperti ini ke ~/.gitconfig
atau .git/config
[merge "hackerman"]
name = merge restored files with hackerman
driver = cargo hackerman merge %O %A %B %P
Dan sesuatu seperti ini ke .git/gitattributes
Cargo.toml merge=hackerman
Jelaskan mengapa beberapa ketergantungan muncul. Fitur dan versi bersifat opsional
Penggunaan : cargo hackerman
explain
CARGO_OPTS
[ -T
] [ -P
] [ -s
] CRATE
[ FEATURE
] [ VERSION
]
Pilihan kargo:
--manifest-path
= PATH
— Jalur ke file Cargo.toml--frozen
— Memerlukan Cargo.lock dan cache yang terbaru--locked
— Membutuhkan Cargo.lock sudah yang terbaru--offline
— Jalankan tanpa mengakses jaringan-v
, --verbose
— meningkatkan verbositas, dapat digunakan beberapa kaliOpsi yang tersedia:
-T
, --no-transitive-opt
— Jangan menghapus tautan yang berlebihan-P
, --package-nodes
— Gunakan node paket alih-alih node fitur-s
, --stdout
— Cetak file dot ke stdout alih-alih memunculkan xdot
-h
, --help
— Mencetak informasi bantuanDengan jumlah ketergantungan yang besar, mungkin sulit untuk mengetahui mengapa sebenarnya beberapa sub-sub ketergantungan disertakan. hackerman menjelaskan memecahkan masalah ini dengan menelusuri rantai ketergantungan dari target dan ke ruang kerja.
explain
dimulai dari peti/fitur tertentu dan mengikuti tautan ketergantungan terbalik hingga mencapai semua titik persimpangan dengan ruang kerja tetapi tanpa memasuki ruang kerja itu sendiri.
Node putih mewakili anggota ruang kerja, node bulat mewakili fitur, node segi delapan mewakili peti dasar. Garis putus-putus mewakili ketergantungan khusus dev, garis putus-putus - baik dev maupun normal tetapi dengan fitur berbeda di dalamnya. Target biasanya disorot. Secara default, peretas memperluas node fitur info paket yang dapat dikembalikan dengan -P
dan mencoba mengurangi ketergantungan transitif agar pohon lebih mudah dibaca - ini dapat dikembalikan dengan -T
.
Jika peti hadir dalam beberapa versi, Anda dapat menentukan versi yang Anda minati, tetapi ini opsional.
Anda juga dapat menentukan fitur mana yang ingin dicari, jika tidak, hacker akan mencari semuanya.
Mencantumkan semua duplikat di ruang kerja
Penggunaan : cargo hackerman
dupes
CARGO_OPTS
Pilihan kargo:
--manifest-path
= PATH
— Jalur ke file Cargo.toml--frozen
— Memerlukan Cargo.lock dan cache yang terbaru--locked
— Membutuhkan Cargo.lock sudah yang terbaru--offline
— Jalankan tanpa mengakses jaringan-v
, --verbose
— meningkatkan verbositas, dapat digunakan beberapa kaliOpsi yang tersedia:
-h
, --help
— Mencetak informasi bantuan Buatlah pohon dari ketergantungan
Penggunaan : tree
cargo hackerman
CARGO_OPTS
[ -T
] [ -D
] [ -P
] [ -w
] [ -s
] [ CRATE
] [ FEATURE
] [ VERSION
]
Pilihan kargo:
--manifest-path
= PATH
— Jalur ke file Cargo.toml--frozen
— Memerlukan Cargo.lock dan cache yang terbaru--locked
— Membutuhkan Cargo.lock sudah yang terbaru--offline
— Jalankan tanpa mengakses jaringan-v
, --verbose
— meningkatkan verbositas, dapat digunakan beberapa kaliOpsi yang tersedia:
-T
, --no-transitive-opt
— Jangan menghapus tautan yang berlebihan-D
, --no-dev
— Jangan sertakan dependensi dev-P
, --package-nodes
— Gunakan node paket alih-alih node fitur-w
, --workspace
— Tetap berada di dalam ruang kerja-s
, --stdout
— Cetak file dot ke stdout alih-alih memunculkan xdot
-h
, --help
— Mencetak informasi bantuanContoh:
cargo hackerman tree rand 0.8.4
cargo hackerman tree serde_json preserve_order
Tampilkan manifes peti, readme, repositori, atau dokumentasi
Penggunaan : show
cargo hackerman
CARGO_OPTS
[ -m
| -r
| -d
| -R
] CRATE
[ VERSION
]
Pilihan kargo:
--manifest-path
= PATH
— Jalur ke file Cargo.toml--frozen
— Memerlukan Cargo.lock dan cache yang terbaru--locked
— Membutuhkan Cargo.lock sudah yang terbaru--offline
— Jalankan tanpa mengakses jaringan-v
, --verbose
— meningkatkan verbositas, dapat digunakan beberapa kaliOpsi yang tersedia:
-m
, --manifest
— Tampilkan manifes peti-r
, --readme
— Tampilkan peti readme-d
, --doc
— Buka URL dokumentasi-R
, --repository
— Gudang-h
, --help
— Mencetak informasi bantuanContoh:
cargo hackerman show --repository syn