mirror of
https://github.com/NLnetLabs/dnst.git
synced 2026-09-26 03:34:58 +02:00
Warning and error logging refactoring and cleanup.
This commit is contained in:
@@ -0,0 +1 @@
|
||||
. IN DNSKEY 256 3 8 AwEAAb14eIx8zaVrMaZG74PLSRa9Qqypj5L99H/I887NxKl1OOYnIuobN/gV6M/vZt3o/mST79wIqq3OwLpdlQbku7fXmkqG1k/PrsMecvX0bGlGBKt6txwXVvkBrin8yD0ERCkmK4DFXjeaYg0OoViwM55F5/MuxacN2+UgZHlMrXDUhJyluxpGGkj/6c3knIjGmkc/CGjJ6KO/h/yKg2Gd3o3026mN6rR0P2pe60Ar75G89kafHyMfK6/L/dYGSXMlvrHBhJUnl5iYbsjWuHnEWgnvKA3NLa2sz8VqAl1/J8HWtMxTkP0o85iSgBii+Akt/ENpsz4bzR3AqHS4FtNicks= ;{id = 2608 (zsk), size = 2048b}
|
||||
@@ -0,0 +1,10 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 8 (RSASHA256)
|
||||
Modulus: vXh4jHzNpWsxpkbvg8tJFr1CrKmPkv30f8jzzs3EqXU45ici6hs3+BXoz+9m3ej+ZJPv3Aiqrc7Aul2VBuS7t9eaSobWT8+uwx5y9fRsaUYEq3q3HBdW+QGuKfzIPQREKSYrgMVeN5piDQ6hWLAznkXn8y7Fpw3b5SBkeUytcNSEnKW7GkYaSP/pzeSciMaaRz8IaMnoo7+H/IqDYZ3ejfTbqY3qtHQ/al7rQCvvkbz2Rp8fIx8rr8v91gZJcyW+scGElSeXmJhuyNa4ecRaCe8oDc0trazPxWoCXX8nwda0zFOQ/SjzmJKAGKL4CS38Q2mzPhvNHcCodLgW02JySw==
|
||||
PublicExponent: AQAB
|
||||
PrivateExponent: E23lqr5nljV6V2tBx3mSqqbIzgzrQK8TIgF44vWd26S+K3fK8EfPQvz4LU6G9W2dnLHA8Ibg/cbMY7ASBq1xBIay9z6Bfpi0+qRGNKuWbGs2MmF4ooRQMmO2OO8Hl5424SNdZayXn0sRD/a2m/IhsPLJONpMgXd9266pLvkqdf3f0h6JpKGom+uPbZFKl0yaR7q8Ao9Y2TaBAWvvjAKa+izbYfCt4c6LUxwCzONLqw1WMWlQ5Zuxd7z0EbWPYvBSC46P5IiPt8/eVHy2tUNJlHVHzVo1yUhwN2+vdIp/PjzLa7l0QPYANexdgnpj6ag8QFilG4NdriVsPb1CPVHxxQ==
|
||||
Prime1: 5JaYcUzgJjyoqJOyY1/PiKBydnodUttqGUHE0XldLL+9n7dqlMDeDPPYvRTLmyKOogY7Ysp1cUJYCcpTQiv3w/OT/GO4Ajz4LFbfl/9uVNr+CoPD2Pjs7w1JLwkUnRz7rW3+XCj3j3/surOhZCen6IP/i9caxPjl09ROxziIATc=
|
||||
Prime2: 1DEBqP0itgfgqO3U5A7iLBgV2chNL6ePkoBNef1ZoGL5EK48aEZE4kXKimUe52ttvl4VECvrh6wKsTm1xHbJh8jgs5iEAqs8YDhKsbTAOlT7gTPyeFxd2NbCHOWH8Ca67g4sEUD5ouAdkwEX9gsTsGstYRZYKStr/GhvQRHT8Y0=
|
||||
Exponent1: H2il56OFhRt+nTM2Jrtqe754G9lpoBHwASptTc8cQ2LRPlnodioOGL+Ev25VD6ru6Eps7IUfIAHasPWw/P2nnLAiXGKjTQNtokIJlQwO7+/rSiySw4Rooew0axcXUwNBfbIIakdixL/yGjFGcsmUI7nHakKTNg9xHOsmK++TmH8=
|
||||
Exponent2: OJX9EFi5GfwN0F7kSBEkBYhCw3okA1JW+kWW47JJZXkfXHBqkZAzrHfaJIAE9sfyUzL5wP9FZz/c9hgivgrDgZ9zNNG2WpPZnPtGCA/gt22USIdW4PwY1sumplgboVJixTsoS02dhO7pVBuVjTq0/HYIevyfdBMtT/l1uc+MSr0=
|
||||
Coefficient: fBppTk4d6GUm/o5sQp1hgkDxprsOUlymemD3tmx9KJVMtBgcel+cABlg6yQFjRydbzOeI946T8DQB7SMpvGhlHg2e0/od5H6tse2rTsn08LfCpL3DqohnOjM4AdOm8p9aQ45z64JLjvydkXM46q4kWAuGJCX3+c0PEzLvuHHeMk=
|
||||
@@ -0,0 +1 @@
|
||||
. IN DS 18172 8 2 17ffa0fdbaf763427a24524c4391e5b0e6862e66f3d27abcd71f29675a57bb14
|
||||
@@ -0,0 +1 @@
|
||||
. IN DNSKEY 257 3 8 AwEAAdcVoa98ywpURLFQ1fUItHWFbzSn+rUPKIVrU+L3+LtqzDs02TefIH9bHhE0vecO8NjtJFj1jPTdldmVceyg6bojEvCu9W3nzFgSoM7r126d3zS08YFfkMs/R/sczQNSPi6Rlpz5MRJ7tDq+3ZsDkwzRtKGkZ6sPGpMSPKftdCIrUlBph27dwAm/eb0hpTWj+wE3RfWygQAWIIyIEhAnYvaLRzfkydba/1Yr3/NKPrLDmV7be/FO6/yt1bIM1dOhNd0jkLmPzuhPPNZBM8LmQCdWd35CiP93VLHsiAM73muXmtj0b1b7YDT6bTcFjtywwlGNqL+f/VQcHySK1SZXltk= ;{id = 18172 (ksk), size = 2048b}
|
||||
@@ -0,0 +1,10 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 8 (RSASHA256)
|
||||
Modulus: 1xWhr3zLClREsVDV9Qi0dYVvNKf6tQ8ohWtT4vf4u2rMOzTZN58gf1seETS95w7w2O0kWPWM9N2V2ZVx7KDpuiMS8K71befMWBKgzuvXbp3fNLTxgV+Qyz9H+xzNA1I+LpGWnPkxEnu0Or7dmwOTDNG0oaRnqw8akxI8p+10IitSUGmHbt3ACb95vSGlNaP7ATdF9bKBABYgjIgSECdi9otHN+TJ1tr/Vivf80o+ssOZXtt78U7r/K3VsgzV06E13SOQuY/O6E881kEzwuZAJ1Z3fkKI/3dUseyIAzvea5ea2PRvVvtgNPptNwWO3LDCUY2ov5/9VBwfJIrVJleW2Q==
|
||||
PublicExponent: AQAB
|
||||
PrivateExponent: Dy/8LRu/FpP2ucfpzmtL8CnOPXCdwl/h+PHS3ZRW9Zzynjz6wvOzOWr3XOMALyrzP3jB9/TMJuo9T5I+63o9UXhyjkORxFikKZU/J6f9nAD9Jt1JWbJO03CSJkgqrdEGilvwv6rU7Tzbmsj+yu2zWioLUDKqDf57XjvhGUEqJyi4vpKVJB5X+v3dOlta2Uz1Fc22Zbz6yXyH/hOn3NI2kIuQH36ozh3V5KzqTwVNXkHONd2zAEUMwlduV4Iad+rq6jXpLyYqCBoHzG/McHiAgULFTi27fS6OU+AMN5IkqM9zTftXcPNTQxSMTHZOmaSDIY75QY81j0iMYgqzjHT8kQ==
|
||||
Prime1: +s+mGMWMnkHMq3jqAmqmQOEhIinui6HisIEc7RMOtwg+e09li96D4AiQIp3nagYFKs1lkmpMc6FMiX+/DUwi+EpS0jH8z9eGPjSctvzXAkL9zIE2To6ndxcKxnv7f3XdpvhrdzOxx04TbreZTrBx+tdXOor6iHpTHxYlUOih1dU=
|
||||
Prime2: 24jEQmwgDuFP0oz8SQKUVzDEa//ynnjiWYhnlsXYs3MBGdmgzex3baTlBTJyGIoMiRpTb+ZqGa8H7/bBZvtBYUQRjou9oz0vTeWUI1zO7M6JBc6wHw/x83zXUF2mVJSwollkB4TY2C71CvGt6VL2bxKviPgemXag1puV6ChdKvU=
|
||||
Exponent1: wFGrTkFk0xEnbLC514KJ2yQF8RlwJjfLCIbodE1xsh2rM4itF/RW8NoAE9s60IyvN6Pp57yExQGBG8oN6JdiFTuAiFb2QTVFZbuYE6SLBdvymvbVeqVeei38ADifn5v0i4zfcrb78hTHR9WWw8T+kVbAN07MTwxlYmfr0z+eoMU=
|
||||
Exponent2: w4sL/XogCAELP6kS4tloVk16+BPwANX+D+/fDT5HKngqp+LgR+vz6Pbyg/GODWuRhOGtJkQfh6cPM+AgHuF4N/IQjV7NWMScCQ+QJvt42ReSl1imKdTjF5XAl7YC/N3Ag6uJ3OSo3c7dt5TT6rtaBE+piSAw6VLwKphFK5ggfK0=
|
||||
Coefficient: 0NnJiHn8kdLbmveOsjpRoDVCoIKUBdU2PtJ2AEsVC+Ik0IS8AnILZPNIW2Obfq6k14eL+0t7YKFtOMhK2YoCgTXrfvs6R6IGjtHcCubRuB4n/+SUi6Npp1W23Mm5d2EP/5cuvpwfRbZw5jXztWWi8Dm1dvnPes5irKywxT90sPk=
|
||||
@@ -0,0 +1 @@
|
||||
com. IN DS 58851 13 2 e957262b9b036e703d765c9027c96ee65cffac373f4d4876a472544a369e4389
|
||||
@@ -0,0 +1 @@
|
||||
com. IN DNSKEY 257 3 13 5imDagGYqsnL94awk/5ksPGFTwljcSdD8c1fb4Ra6YFrl4ouTtViaxltCmO9UTxhGZyVQw1uZP9ybKZ/LOPKhA== ;{id = 58851 (ksk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: AnimGdyeT5/DW0Fxycd/p/tlp7nxhfKIs3tWW0VNUpQ=
|
||||
@@ -0,0 +1 @@
|
||||
com. IN DNSKEY 256 3 13 SLyxevZzrkRhtnu+aYGtBR+L9H/XblWH5BJaKXNIngQGxbq0ndYsh6WJ6eT4dNSgJBbNOyb+9j9RRFZ8exatug== ;{id = 61184 (zsk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: +LpdTtg6ywWsDoCgsZcPsH75QB/6c7r729iQwtEfSRU=
|
||||
@@ -0,0 +1 @@
|
||||
de. IN DNSKEY 256 3 13 aIeDl5iVgvAmhjSSrRWlTDiI8qv3QkhL3Ee6Yx8WaizAj435c3wlle8mLRwds/JDLIc1XdIHljM2QBNADTwOFQ== ;{id = 34467 (zsk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: hsRJU36yxfcST9Td0wPSD5gxtEZX9LOdDg6naK/XVek=
|
||||
@@ -0,0 +1 @@
|
||||
de. IN DS 38315 13 2 79925d41ed74d5c19897298ca65a56a3bd5610b3973f6644cd630d6473136768
|
||||
@@ -0,0 +1 @@
|
||||
de. IN DNSKEY 257 3 13 cvUOUrn951Sp1LdhVi2kuYoLgINVMbFHWihMqRrjyblIRom84U5GETRjEGTQSnxhnTmvU4KA3OdL7RxX+pTcyQ== ;{id = 38315 (ksk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: w9Ej919ybNZH3zOgx6ssOiA/lm+1l7hEy+wOa9rmGmQ=
|
||||
@@ -0,0 +1 @@
|
||||
example.com. IN DS 23561 13 2 3a574940d1cad2532def4debb31d22d971ca762c6aa345d40a91475129c42570
|
||||
@@ -0,0 +1 @@
|
||||
example.com. IN DNSKEY 257 3 13 6W4xnMJ+f3Tzdat5635hP6KhMblsaeJDPijAqkVAotZGjXvBs5KWTyZiiXYJ/rNcAi3xf+TbQ4NOgOD7lwapaQ== ;{id = 23561 (ksk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: cbikm3oKmwSAh0Qk+FrW8OkC3aG1eJ6YckNEe0fPVhI=
|
||||
@@ -0,0 +1 @@
|
||||
example.com. IN DNSKEY 256 3 13 He3P9aBLDe2L9MeQfGU96jnOrULzhRVqHkYuhBLtmY19zgVdvHFcgvtMBZdns36De5hPuzD1Hhi982d1uxFcuQ== ;{id = 29203 (zsk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: 7ZB9TPwKwcrl8BJTM57NwmLVBWkHEHgT0vvaxU+Ea+A=
|
||||
@@ -0,0 +1 @@
|
||||
lol. IN DNSKEY 256 3 13 qtPP4BxrXvvOO99FMDwfAv+++uKw2IgHDfnIKvkKuAImtm+FxWltKZrPH6j+p9yFRNBO/qv+4gAAMzuxb1OD3Q== ;{id = 24819 (zsk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: SlLac4QRP5444d5A/cbO272zcIPsgdagmedIqeaguac=
|
||||
@@ -0,0 +1 @@
|
||||
lol. IN DS 46946 13 2 f3c77deac149c47fc5d17a215b8f8c4d4abf6ee23f5387be7d4cbb27dbd9bb59
|
||||
@@ -0,0 +1 @@
|
||||
lol. IN DNSKEY 257 3 13 9unhRHjEydG37e0u0bzkpTG0XlkSloHsEDjOF85+ui2IOsq7K4jCcU+v5/7/VGcW1sVaq2FxKOYDSTOR9BPrwg== ;{id = 46946 (ksk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: O6DLICCRtuP35PBQ/D8x836twzkRs1zLHIwqBUsQgQQ=
|
||||
@@ -0,0 +1 @@
|
||||
nu. IN DNSKEY 256 3 13 JntbD9Cr13hV9CJ/yVmCxqKP9/L5PGlEGCpm70NTW46JQzKF/Lt4rT7kOJbr++TIMBTEdvbSXsdBCrdF97dzWw== ;{id = 13385 (zsk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: HLKZapHzNPUvS5ytkAcNvL2piDJbggAmQYFdQzNgoRY=
|
||||
@@ -0,0 +1 @@
|
||||
nu. IN DS 20506 13 2 ac1ebb0d02e806ba954c9811bcc66ab170c5e7f5d1f13ea53992d2a226ff8315
|
||||
@@ -0,0 +1 @@
|
||||
nu. IN DNSKEY 257 3 13 suRmDGHQyN2y1aCCsNl2EH/coH/KdI8KclkZgL2SlVZLHMmr2Ulh54VfkLVNZJLTcaN8Er/D/Q+1zXxQ3wszkg== ;{id = 20506 (ksk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: FYTEa22T+x2MDf36YerBev5XtFuRu7NASiokJP7aA9o=
|
||||
@@ -0,0 +1 @@
|
||||
ovh. IN DNSKEY 256 3 13 lSU7WAWah8/gXUpcisaxV10tVo+54pAcTQcyGT/46oBSpCXzocLG4nSrA1gEvYBu8H2/Lg922E/CYsEF00jSug== ;{id = 3949 (zsk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: StAFkrSunwzjRAioiFLiD5nL31Q2G0nTDHmedO9yALY=
|
||||
@@ -0,0 +1 @@
|
||||
ovh. IN DS 54922 13 2 4c3fcc2b8d24d3e0a46e364857186f4b4d4e9365071106d5a6487bc9795b5765
|
||||
@@ -0,0 +1 @@
|
||||
ovh. IN DNSKEY 257 3 13 wV6OoOkqw+WO9LWafC5W9vdyLxRzzmuJi4laQ9FYpDt9PNDkNSKBPJZpm09l5B6mHfWHKr5XOkPM6BiV4kA8Ow== ;{id = 54922 (ksk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: 0COmnLjG5oq0o+XCzhhEitSVOayjZJ3xdjjwTQGWFHQ=
|
||||
@@ -0,0 +1 @@
|
||||
se. IN DNSKEY 256 3 13 eRPqHQ/hNK1d+JaVCzDK1DlQ8ztGM4V+qGLHGDQBNtC5ezgFoRGGCzJIIDl9fYaNm2VqV2X1W8aqFkLhfCUdmw== ;{id = 1606 (zsk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: B3IgNdfgyCTvyoAC0Xqh9JV4UvoXgWQmM5ClKkUUsYg=
|
||||
@@ -0,0 +1 @@
|
||||
se. IN DS 17203 13 2 44a6f19f0d8c797e4de35a64a0d56ad18adfa9cd24de9ea0e193390602cae6aa
|
||||
@@ -0,0 +1 @@
|
||||
se. IN DNSKEY 257 3 13 noRN6Q3QSNupXU6+heo/P7XjJw9GSAcavFcC0VK9RJ8BJUFDbzRNUxVWQ02xvjGsQGxYs+E6KaYcJhvDQfxlBw== ;{id = 17203 (ksk), size = 256b}
|
||||
@@ -0,0 +1,3 @@
|
||||
Private-key-format: v1.2
|
||||
Algorithm: 13 (ECDSAP256SHA256)
|
||||
PrivateKey: AsAzvuJJmpcIIEXPu+yhluu7AKcfmBDWdE0uX7Pxc2A=
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
target/release/dnst
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
target/release/dnst
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
target/release/dnst
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
target/debug/dnst
|
||||
@@ -0,0 +1,9 @@
|
||||
[1m[31merror:[0m a value is required for '[33m-f <file>[0m' but none was supplied
|
||||
|
||||
For more information, try '[1m--help[0m'.
|
||||
|
||||
Loading private key from './Kcom.+013+58851.private'
|
||||
Loading public key from './Kcom.+013+58851.key'
|
||||
Loading private key from './Kcom.+013+61184.private'
|
||||
Loading public key from './Kcom.+013+61184.key'
|
||||
Loading zone from '/etc/nsd/zones/verisign/com.zone'
|
||||
+25117
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,7 @@ use std::ffi::OsString;
|
||||
use std::fmt;
|
||||
use std::fs::File;
|
||||
use std::hash::RandomState;
|
||||
use std::io::{self, BufWriter, IsTerminal};
|
||||
use std::io::{self, BufWriter};
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
// TODO: use a re-export from domain?
|
||||
@@ -941,16 +941,7 @@ impl SignZone {
|
||||
}
|
||||
|
||||
fn write_iterations_warning(env: &impl Env, text: &str) {
|
||||
if std::io::stderr().is_terminal() {
|
||||
write!(
|
||||
env.stderr(),
|
||||
"{}",
|
||||
Error::colourize(Error::YELLOW, "Warning!")
|
||||
);
|
||||
} else {
|
||||
write!(env.stderr(), "Warning!")
|
||||
}
|
||||
writeln!(env.stderr(), " {}", text);
|
||||
Error::write_warning(&mut env.stderr(), text);
|
||||
writeln!(
|
||||
env.stderr(),
|
||||
"See: https://www.rfc-editor.org/rfc/rfc9276.html"
|
||||
|
||||
Vendored
+2
-2
@@ -51,11 +51,11 @@ impl Env for FakeEnv {
|
||||
}
|
||||
|
||||
fn stdout(&self) -> Stream<impl fmt::Write> {
|
||||
Stream(self.stdout.clone())
|
||||
Stream::new(self.stdout.clone(), false)
|
||||
}
|
||||
|
||||
fn stderr(&self) -> Stream<impl fmt::Write> {
|
||||
Stream(self.stderr.clone())
|
||||
Stream::new(self.stderr.clone(), false)
|
||||
}
|
||||
|
||||
fn in_cwd<'a>(&self, path: &'a impl AsRef<Path>) -> Cow<'a, Path> {
|
||||
|
||||
Vendored
+30
-3
@@ -35,21 +35,48 @@ pub trait Env {
|
||||
/// [`std::io::Write`]. Additionally, this `write_fmt` does not return a
|
||||
/// result. This means that we can use the [`write!`] and [`writeln`] macros
|
||||
/// without handling errors.
|
||||
pub struct Stream<T: fmt::Write>(T);
|
||||
pub struct Stream<T: fmt::Write> {
|
||||
writer: T,
|
||||
is_terminal: bool,
|
||||
}
|
||||
|
||||
impl<T: fmt::Write> Stream<T> {
|
||||
pub fn new(writer: T, is_terminal: bool) -> Self {
|
||||
Self { writer, is_terminal }
|
||||
}
|
||||
|
||||
pub fn write_fmt(&mut self, args: fmt::Arguments<'_>) {
|
||||
// This unwrap is not _really_ safe, but we are using this as stdout.
|
||||
// The `println` macro also ignores errors and `push_str` of the
|
||||
// fake stream also does not return an error. If this fails, it means
|
||||
// we can't write to stdout anymore so a graceful exit will be very
|
||||
// hard anyway.
|
||||
self.0.write_fmt(args).unwrap();
|
||||
self.writer.write_fmt(args).unwrap();
|
||||
}
|
||||
|
||||
pub fn write_str(&mut self, s: &str) {
|
||||
// Same as with write_fmt...
|
||||
self.0.write_str(s).unwrap();
|
||||
self.writer.write_str(s).unwrap();
|
||||
}
|
||||
|
||||
pub fn is_terminal(&self) -> bool {
|
||||
self.is_terminal
|
||||
}
|
||||
|
||||
pub fn colourize(&self, colour_code: u8, text: &str) -> String {
|
||||
// 1B is the ASCII C0 ESC control code that introduces an ANSI escape
|
||||
// sequence, 31 is the ANSI escape sequence for setting the terminal
|
||||
// foreground colour to red, and 0 resets all attributes to their
|
||||
// defaults.
|
||||
//
|
||||
// See:
|
||||
// - https://en.wikipedia.org/wiki/ANSI_escape_code#C0_control_codes
|
||||
// - https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
|
||||
if self.is_terminal {
|
||||
format!("\x1B[{colour_code}m{text}\x1B[0m")
|
||||
} else {
|
||||
text.to_string()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vendored
+3
-3
@@ -1,6 +1,6 @@
|
||||
use std::ffi::OsString;
|
||||
use std::fmt;
|
||||
use std::io;
|
||||
use std::io::{self, IsTerminal};
|
||||
use std::path::Path;
|
||||
|
||||
use super::Env;
|
||||
@@ -15,11 +15,11 @@ impl Env for RealEnv {
|
||||
}
|
||||
|
||||
fn stdout(&self) -> Stream<impl fmt::Write> {
|
||||
Stream(FmtWriter(io::stdout()))
|
||||
Stream::new(FmtWriter(io::stdout()), io::stdout().is_terminal())
|
||||
}
|
||||
|
||||
fn stderr(&self) -> Stream<impl fmt::Write> {
|
||||
Stream(FmtWriter(io::stderr()))
|
||||
Stream::new(FmtWriter(io::stderr()), io::stderr().is_terminal())
|
||||
}
|
||||
|
||||
fn in_cwd<'a>(&self, path: &'a impl AsRef<Path>) -> std::borrow::Cow<'a, std::path::Path> {
|
||||
|
||||
+13
-23
@@ -1,7 +1,7 @@
|
||||
use std::fmt;
|
||||
use std::fmt::{self, Display, Write};
|
||||
use std::{error, io};
|
||||
|
||||
use crate::env::Env;
|
||||
use crate::env::{Env, Stream};
|
||||
|
||||
//------------ Error ---------------------------------------------------------
|
||||
|
||||
@@ -58,7 +58,6 @@ impl Error {
|
||||
|
||||
/// Pretty-print this error.
|
||||
pub fn pretty_print(&self, env: impl Env) {
|
||||
use std::io::IsTerminal;
|
||||
let mut err = env.stderr();
|
||||
|
||||
let error = match &self.0.primary {
|
||||
@@ -75,16 +74,7 @@ impl Error {
|
||||
|
||||
// NOTE: This is a multicall binary, so argv[0] is necessary for
|
||||
// program operation. We would fail very early if it didn't exist.
|
||||
let prog = std::env::args().next().unwrap();
|
||||
let term = std::io::stderr().is_terminal();
|
||||
|
||||
let error_marker = if term {
|
||||
Self::colourize(Self::RED, "ERROR:")
|
||||
} else {
|
||||
"ERROR:".to_string()
|
||||
};
|
||||
|
||||
write!(err, "[{prog}] {error_marker} {error}");
|
||||
Self::write_error(&mut err, error);
|
||||
for context in &self.0.context {
|
||||
writeln!(err, "\n... while {context}");
|
||||
}
|
||||
@@ -105,16 +95,16 @@ impl Error {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn colourize(colour_code: u8, text: &str) -> String {
|
||||
// 1B is the ASCII C0 ESC control code that introduces an ANSI escape
|
||||
// sequence, 31 is the ANSI escape sequence for setting the terminal
|
||||
// foreground colour to red, and 0 resets all attributes to their
|
||||
// defaults.
|
||||
//
|
||||
// See:
|
||||
// - https://en.wikipedia.org/wiki/ANSI_escape_code#C0_control_codes
|
||||
// - https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
|
||||
format!("\x1B[{colour_code}m{text}\x1B[0m")
|
||||
pub fn write_error(writer: &mut Stream<impl Write>, text: impl Display) {
|
||||
let prog = std::env::args().next().unwrap();
|
||||
let marker = writer.colourize(Self::RED, "ERROR:");
|
||||
writeln!(writer, "[{prog}] {marker} {text}");
|
||||
}
|
||||
|
||||
pub fn write_warning(writer: &mut Stream<impl Write>, text: impl Display) {
|
||||
let prog = std::env::args().next().unwrap();
|
||||
let marker = writer.colourize(Self::YELLOW, "WARN:");
|
||||
writeln!(writer, "[{prog}] {marker} {text}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user