Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package dysk for openSUSE:Factory checked in 
at 2026-10-20 12:38:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dysk (Old)
 and      /work/SRC/openSUSE:Factory/.dysk.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dysk"

Tue Oct 20 12:38:20 2026 rev:18 rq:1386149 version:3.8.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/dysk/dysk.changes        2026-10-17 
21:27:35.051343051 +0200
+++ /work/SRC/openSUSE:Factory/.dysk.new.3698736/dysk.changes   2026-10-20 
12:39:13.616761091 +0200
@@ -1,0 +2,9 @@
+Mon Oct 19 05:05:47 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 3.8.1:
+  * fix free_percent filter, eg -f 'free_percent>20%'
+  * -s use_percent and -s free_percent sort by default in the same
+    direction as -s use and -s free, and the inodes use columns
+    sort fullest first, like -s use
+
+-------------------------------------------------------------------

Old:
----
  dysk-3.8.0.obscpio

New:
----
  dysk-3.8.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dysk.spec ++++++
--- /var/tmp/diff_new_pack.vf60kM/_old  2026-10-20 12:39:15.583843418 +0200
+++ /var/tmp/diff_new_pack.vf60kM/_new  2026-10-20 12:39:15.586843544 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           dysk
-Version:        3.8.0
+Version:        3.8.1
 Release:        0
 Summary:        Get information on filesystems, like df but better
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.vf60kM/_old  2026-10-20 12:39:15.699848273 +0200
+++ /var/tmp/diff_new_pack.vf60kM/_new  2026-10-20 12:39:15.708848650 +0200
@@ -4,7 +4,7 @@
     <param name="scm">git</param>
     <param name="exclude">.git</param>
     <param name="versionformat">@PARENT_TAG@</param>
-    <param name="revision">refs/tags/v3.8.0</param>
+    <param name="revision">refs/tags/v3.8.1</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>
   </service>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.vf60kM/_old  2026-10-20 12:39:15.761850868 +0200
+++ /var/tmp/diff_new_pack.vf60kM/_new  2026-10-20 12:39:15.767851119 +0200
@@ -3,6 +3,6 @@
                 <param name="url">https://github.com/Canop/dysk</param>
               <param 
name="changesrevision">b8c61ea5f565759b12785658a1c6a80f3b13722c</param></service><service
 name="tar_scm">
                 <param name="url">https://github.com/Canop/dysk.git</param>
-              <param 
name="changesrevision">ce437e13cfc3f02ce2fdb6d2a4aeb552c0a940eb</param></service></servicedata>
+              <param 
name="changesrevision">c002b844cfc33d56aaa7a4c46b80b033b07e0dee</param></service></servicedata>
 (No newline at EOF)
 

++++++ dysk-3.8.0.obscpio -> dysk-3.8.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/CHANGELOG.md new/dysk-3.8.1/CHANGELOG.md
--- old/dysk-3.8.0/CHANGELOG.md 2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/CHANGELOG.md 2026-10-17 18:04:08.000000000 +0200
@@ -1,4 +1,11 @@
-### next
+<a name="v3.8.1"></a>
+### v3.8.1 - 2026/10/17
+- fix `free_percent` filter, eg `-f 'free_percent>20%'`
+- `-s use_percent` and `-s free_percent` sort by default in the same direction 
as `-s use` and `-s free`, and the inodes use columns sort fullest first, like 
`-s use`
+- 3.8.0's source archive reported version 3.7.1 - Fix #124
+
+<a name="v3.8.0"></a>
+### v3.8.0 - 2026/10/17
 - read inodes on Mac/iokit (not very interesting for APFS) - Fix #107
 - no panic on `--help` when stdout is closed - Fix #123
 - new `use_bar` and `inodes_bar` columns: bars without percentage - Fix #116
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/Cargo.lock new/dysk-3.8.1/Cargo.lock
--- old/dysk-3.8.0/Cargo.lock   2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/Cargo.lock   2026-10-17 18:04:08.000000000 +0200
@@ -75,9 +75,9 @@
 
 [[package]]
 name = "cfg-if"
-version = "1.0.4"
+version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
 
 [[package]]
 name = "cfg_aliases"
@@ -87,9 +87,9 @@
 
 [[package]]
 name = "clap"
-version = "4.6.6"
+version = "4.6.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca"
+checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -108,9 +108,9 @@
 
 [[package]]
 name = "clap_builder"
-version = "4.6.6"
+version = "4.6.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889"
+checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d"
 dependencies = [
  "anstream",
  "anstyle",
@@ -120,30 +120,30 @@
 
 [[package]]
 name = "clap_complete"
-version = "4.6.9"
+version = "4.6.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3be2ad0423bdbbb0e25bc89add796f3559706d4a95e1bc98e4d9662a957b6a19"
+checksum = "037e2a1a92236d0aff7e845093f64661d6df4c02c9fcc61a60e9e1d736fa392f"
 dependencies = [
  "clap",
 ]
 
 [[package]]
 name = "clap_derive"
-version = "4.6.4"
+version = "4.6.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061"
+checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0"
 dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 3.0.5",
+ "syn 3.0.9",
 ]
 
 [[package]]
 name = "clap_lex"
-version = "1.1.0"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
+checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486"
 
 [[package]]
 name = "clap_mangen"
@@ -197,9 +197,9 @@
 
 [[package]]
 name = "crokey"
-version = "1.5.0"
+version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "074bc31bff1084f74e5a145ad5f6ac74469fa312159faa5144f0b1c4506b8d80"
+checksum = "c41f5f8d5dba70b6f48daa17fee79ac7c3a13cc1b164f41d0de50c803e0266f2"
 dependencies = [
  "crokey-proc_macros",
  "crossterm",
@@ -210,15 +210,15 @@
 
 [[package]]
 name = "crokey-proc_macros"
-version = "1.5.0"
+version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b88c4ff2d5717616c3bb4a31d06b0b241ed811c7c0c41d077d77631bee7caad0"
+checksum = "2ca5122126412913548025b1d5574181121bcf7a06f8b530f4be713ebd81d418"
 dependencies = [
  "crossterm",
  "proc-macro2",
  "quote",
  "strict",
- "syn 2.0.119",
+ "syn 3.0.9",
 ]
 
 [[package]]
@@ -337,7 +337,7 @@
 
 [[package]]
 name = "dysk"
-version = "3.7.1"
+version = "3.8.1"
 dependencies = [
  "clap",
  "clap_complete",
@@ -349,7 +349,7 @@
 
 [[package]]
 name = "dysk-cli"
-version = "3.7.1"
+version = "3.8.1"
 dependencies = [
  "bet",
  "clap",
@@ -363,9 +363,9 @@
 
 [[package]]
 name = "equivalent"
-version = "1.0.2"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"
 
 [[package]]
 name = "errno"
@@ -429,9 +429,9 @@
 
 [[package]]
 name = "lazy-regex"
-version = "3.6.1"
+version = "3.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4994ba703f78b083e2f7946dac9251abd83fd43a0365f030e99b69be5b4b9ef9"
+checksum = "f0a2cce8a22920a29fdcc8c9170aa5d29edd9fbcf8bea856e24c2cb1c2419f67"
 dependencies = [
  "lazy-regex-proc_macros",
  "once_cell",
@@ -440,14 +440,14 @@
 
 [[package]]
 name = "lazy-regex-proc_macros"
-version = "3.6.1"
+version = "3.6.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fd97232314824e6dbef1918a871bb93f51070455e3715bf26e19a6d01aa977a0"
+checksum = "6f1e4b1f1d8c71edb4ff2b2150ec4606445fd2ddf67ddc097655daf59286baa6"
 dependencies = [
  "proc-macro2",
  "quote",
  "regex",
- "syn 2.0.119",
+ "syn 3.0.9",
 ]
 
 [[package]]
@@ -467,9 +467,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.189"
+version = "0.2.191"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
+checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
 
 [[package]]
 name = "linux-raw-sys"
@@ -479,9 +479,9 @@
 
 [[package]]
 name = "litrs"
-version = "1.0.0"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
+checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70"
 
 [[package]]
 name = "lock_api"
@@ -524,9 +524,9 @@
 
 [[package]]
 name = "mio"
-version = "1.2.3"
+version = "1.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8"
+checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee"
 dependencies = [
  "libc",
  "log",
@@ -654,9 +654,9 @@
 
 [[package]]
 name = "rustix"
-version = "1.1.4"
+version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
+checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d"
 dependencies = [
  "bitflags",
  "errno",
@@ -704,14 +704,14 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 3.0.5",
+ "syn 3.0.9",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.151"
+version = "1.0.154"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
+checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6"
 dependencies = [
  "itoa",
  "memchr",
@@ -722,9 +722,9 @@
 
 [[package]]
 name = "serde_spanned"
-version = "1.1.1"
+version = "1.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
+checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c"
 dependencies = [
  "serde_core",
 ]
@@ -762,9 +762,9 @@
 
 [[package]]
 name = "smallvec"
-version = "1.16.1"
+version = "1.16.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891"
+checksum = "5b3dc8af474f516a851ff4bd12db780f948b9250ad37211e4eec0bccea54e01b"
 
 [[package]]
 name = "snafu"
@@ -812,9 +812,9 @@
 
 [[package]]
 name = "syn"
-version = "3.0.5"
+version = "3.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9"
+checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -823,9 +823,9 @@
 
 [[package]]
 name = "termimad"
-version = "0.35.4"
+version = "0.35.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2374179aac8b77011a1aefe2f44d0c34eb680c9b4bd1c369a88991262c60c85a"
+checksum = "092b11fb38404fa873f019f8e5f300fa5787f381b7a58b923546d94b5a9065fd"
 dependencies = [
  "coolor",
  "crokey",
@@ -851,29 +851,29 @@
 
 [[package]]
 name = "thiserror"
-version = "2.0.20"
+version = "2.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f"
+checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "2.0.20"
+version = "2.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af"
+checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 3.0.5",
+ "syn 3.0.9",
 ]
 
 [[package]]
 name = "toml"
-version = "1.1.6+spec-1.1.0"
+version = "1.1.8+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "920602543f0911ab71da12c50d59701da54c196d1a2bf5cb4b75667f137a406a"
+checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d"
 dependencies = [
  "indexmap",
  "serde_core",
@@ -886,33 +886,33 @@
 
 [[package]]
 name = "toml_datetime"
-version = "1.1.1+spec-1.1.0"
+version = "1.1.2+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
+checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053"
 dependencies = [
  "serde_core",
 ]
 
 [[package]]
 name = "toml_parser"
-version = "1.1.3+spec-1.1.0"
+version = "1.1.5+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56"
+checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c"
 dependencies = [
  "winnow",
 ]
 
 [[package]]
 name = "toml_writer"
-version = "1.1.2+spec-1.1.0"
+version = "1.1.3+spec-1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2"
+checksum = "06bdbd8cfc056b8d2e2e85f29b56a3bdbecb527cef81eb39e3e7b98af4652770"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.24"
+version = "1.0.27"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
 
 [[package]]
 name = "unicode-segmentation"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/Cargo.toml new/dysk-3.8.1/Cargo.toml
--- old/dysk-3.8.0/Cargo.toml   2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/Cargo.toml   2026-10-17 18:04:08.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "dysk"
-version = "3.7.1"
+version = "3.8.1"
 authors = ["dystroy <[email protected]>"]
 edition = "2024"
 keywords = ["linux", "mac", "filesystem", "disk"]
@@ -22,13 +22,13 @@
 ]
 
 [dependencies]
-dysk-cli = { version = "3.7.1", path = "cli" } # beware: version is also in 
build dependencies
+dysk-cli = { version = "3.8.1", path = "cli" } # beware: version is also in 
build dependencies
 
 [build-dependencies]
 clap = { version = "4.6", features = ["derive", "cargo"] }
 clap_complete = "4.6"
 clap_mangen = "0.3"
-dysk-cli = { version = "3.7.1", path = "cli" }
+dysk-cli = { version = "3.8.1", path = "cli" }
 serde = { version = "1.0", features = ["derive"] }
 toml = "1"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/README.md new/dysk-3.8.1/README.md
--- old/dysk-3.8.0/README.md    2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/README.md    2026-10-17 18:04:08.000000000 +0200
@@ -20,7 +20,7 @@
 [srep]: https://repology.org/badge/tiny-repos/dysk.svg
 [lrep]: https://repology.org/project/dysk/versions
 
-A utility listing your filesystems, on Linux, Mac, and Windows (experimental).
+A utility listing your filesystems, on Linux, Mac, and Windows.
 
 Complete documentation lives at 
**[https://dystroy.org/dysk](https://dystroy.org/dysk)**
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/build-scripts/README.md 
new/dysk-3.8.1/build-scripts/README.md
--- old/dysk-3.8.0/build-scripts/README.md      2026-10-17 07:43:53.000000000 
+0200
+++ new/dysk-3.8.1/build-scripts/README.md      2026-10-17 18:04:08.000000000 
+0200
@@ -14,8 +14,8 @@
 missing, and the release has to be assembled from two machines through a 
staging
 server (`DYSK_STAGE_HOST`, see below).
 
-1. Commit, then on **each** machine that builds (just the Mac, unless you've 
set
-   up staging):
+1. Commit and push, then on **each** machine that builds (just the Mac, unless
+   you've set up staging):
 
        ./build-scripts/build-all-targets.sh
 
@@ -23,13 +23,15 @@
    the staging server, keyed by `<version>-<commit>`; targets already staged 
under
    that key are skipped, so a re-run after a failure only builds what's 
missing,
    and `--force` rebuilds them all. Any new commit changes the key, so 
everything
-   is rebuilt.
+   is rebuilt. It warns when HEAD isn't `origin/main`.
 
 2. On one machine, assemble and package:
 
        ./build-scripts/release.sh
 
-   Fetches the staged artifacts, checks every target is present, verifies each
+   Refuses to go on unless HEAD is exactly `origin/main` (not unpushed, not
+   behind) and no `v<version>` tag exists on origin at another commit. Then
+   fetches the staged artifacts, checks every target is present, verifies each
    binary, and produces `dysk_<version>.zip` (also the artifact to attach to 
the
    GitHub release), with a copy in `releases/`.
 
@@ -41,10 +43,20 @@
    server. Nothing goes through `~/dev/www/dystroy`: that tree mirrors the 
whole
    site on each machine, so pushing it from one machine republishes its stale
    copy of everything the other machines deployed. Previous zips are left in
-   place, so old versions stay downloadable.
+   place, so old versions stay downloadable. It also publishes `x86_64-linux`,
+   a link to `x86_64-unknown-linux-gnu`, for third-party install scripts using
+   that old path.
 
-   It then runs `website/deploy.sh`, last, so the site never describes a 
version
-   whose binaries aren't online yet.
+   It then creates and pushes the `v<version>` tag on HEAD, and runs
+   `website/deploy.sh`, last, so the site never describes a version whose
+   binaries aren't online yet.
+
+4. Create the GitHub release from that tag, not from a branch:
+
+       gh release create v<version> dysk_<version>.zip --verify-tag
+
+   With "target: main" in the GitHub form, the tag lands on whatever `main` is
+   on GitHub at that moment.
 
 Staging and deploy settings come from `build-scripts/_local.sh` (see below).
 Without it, `release.sh` builds locally on a single host and `deploy.sh` won't 
run.
@@ -112,6 +124,7 @@
 |----------|---------|----------|---------|
 | `DYSK_STAGE_HOST` | build-all-targets.sh, release.sh | for staged releases | 
ssh host every machine can reach; enables push/fetch of a multi-host release. 
Unset ⇒ single-host local builds. |
 | `DYSK_STAGE_DIR` | build-all-targets.sh, release.sh | no — default 
`dysk-staging` | staging dir on the server, relative to your ssh login home (or 
absolute, with a leading `/`). |
+| `DYSK_RELEASE_BRANCH` | build-all-targets.sh, release.sh | no — default 
`main` | branch of origin the released commit must be. |
 | `DYSK_DEPLOY_TARGET` | deploy.sh | yes, to deploy | rsync destination of the 
download dir, e.g. `[email protected]:prod/www.dystroy.org/dysk/download`. Must 
end in `/dysk/download`. |
 
 A full example:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/build-scripts/_common.sh 
new/dysk-3.8.1/build-scripts/_common.sh
--- old/dysk-3.8.0/build-scripts/_common.sh     2026-10-17 07:43:53.000000000 
+0200
+++ new/dysk-3.8.1/build-scripts/_common.sh     2026-10-17 18:04:08.000000000 
+0200
@@ -75,6 +75,72 @@
 
 tree_is_clean() { git diff --quiet HEAD 2>/dev/null; }
 
+release_tag() { printf 'v%s\n' "$(dysk_version)"; }
+
+# The commit the tag points at on origin, peeled; empty when there's no such 
tag.
+remote_tag_commit() { # remote_tag_commit <tag>
+    local refs peeled
+    refs=$(git ls-remote --tags origin "refs/tags/$1" "refs/tags/$1^{}") \
+        || die "couldn't query the tags of origin"
+    peeled=$(sed -n 's/[[:space:]].*\^{}$//p' <<< "$refs")
+    if [[ -n $peeled ]]; then
+        printf '%s\n' "$peeled"
+    else
+        sed -n 's/[[:space:]].*//p' <<< "$refs"
+    fi
+}
+
+fetch_release_branch() { git fetch --quiet origin "$DYSK_RELEASE_BRANCH"; }
+
+# Whether HEAD is exactly origin/<release branch> as last fetched: neither
+# unpushed nor behind.
+head_is_published() {
+    [[ $(git rev-parse HEAD) == $(git rev-parse "origin/$DYSK_RELEASE_BRANCH") 
]]
+}
+
+# Die unless the release can be tied to what's on origin: HEAD pushed and up to
+# date, and no release tag already pointing elsewhere.
+check_release_source() {
+    local head origin tag tagged
+    head=$(git rev-parse HEAD)
+    fetch_release_branch || die "couldn't fetch origin/$DYSK_RELEASE_BRANCH"
+    if ! head_is_published; then
+        origin=$(git rev-parse "origin/$DYSK_RELEASE_BRANCH")
+        if git merge-base --is-ancestor "$origin" HEAD; then
+            die "HEAD ${head:0:10} isn't pushed to origin/$DYSK_RELEASE_BRANCH 
— push it first"
+        elif git merge-base --is-ancestor HEAD "$origin"; then
+            die "HEAD ${head:0:10} is behind origin/$DYSK_RELEASE_BRANCH 
(${origin:0:10}) — pull first"
+        else
+            die "HEAD ${head:0:10} and origin/$DYSK_RELEASE_BRANCH 
(${origin:0:10}) have diverged"
+        fi
+    fi
+    tag=$(release_tag)
+    tagged=$(remote_tag_commit "$tag")
+    if [[ -n $tagged && $tagged != "$head" ]]; then
+        die "tag $tag already exists on origin at ${tagged:0:10}, not at HEAD 
${head:0:10}"
+    fi
+    ok "HEAD ${head:0:10} is origin/$DYSK_RELEASE_BRANCH${tagged:+, already 
tagged $tag}"
+}
+
+# Create the release tag on HEAD and push it, unless origin already has it 
there.
+push_release_tag() {
+    local tag head local_tagged
+    tag=$(release_tag)
+    head=$(git rev-parse HEAD)
+    if [[ $(remote_tag_commit "$tag") == "$head" ]]; then
+        ok "tag $tag already on origin"
+        return 0
+    fi
+    local_tagged=$(git rev-parse -q --verify "refs/tags/$tag^{commit}" || true)
+    if [[ -z $local_tagged ]]; then
+        git tag "$tag" HEAD
+    elif [[ $local_tagged != "$head" ]]; then
+        die "local tag $tag points at ${local_tagged:0:10}, not at HEAD 
${head:0:10}"
+    fi
+    git push --quiet origin "refs/tags/$tag"
+    ok "tag $tag created and pushed"
+}
+
 # Ask a yes/no question on the terminal, defaulting to no. With no terminal to
 # ask on (cron, CI) the answer is no, unless DYSK_YES is set.
 confirm() { # confirm <question>
@@ -133,3 +199,4 @@
 [[ -f "$_dysk_common_dir/_local.sh" ]] && source "$_dysk_common_dir/_local.sh"
 : "${DYSK_STAGE_HOST:=}"
 : "${DYSK_STAGE_DIR:=dysk-staging}"
+: "${DYSK_RELEASE_BRANCH:=main}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/build-scripts/build-all-targets.sh 
new/dysk-3.8.1/build-scripts/build-all-targets.sh
--- old/dysk-3.8.0/build-scripts/build-all-targets.sh   2026-10-17 
07:43:53.000000000 +0200
+++ new/dysk-3.8.1/build-scripts/build-all-targets.sh   2026-10-17 
18:04:08.000000000 +0200
@@ -27,6 +27,11 @@
 version=$(dysk_version)
 h1 "Building all targets for $NAME $version   (host $(host_os), 
darwin=$DARWIN_METHOD)"
 [[ $DARWIN_METHOD == skip ]] && warn "the macOS binaries will not be built 
(DARWIN_METHOD=skip)"
+if ! fetch_release_branch; then
+    warn "couldn't fetch origin/$DYSK_RELEASE_BRANCH to check this build 
matches it"
+elif ! head_is_published; then
+    warn "HEAD isn't origin/$DYSK_RELEASE_BRANCH: release.sh will refuse to 
package this build"
+fi
 
 # Decide up front whether this build will be staged, so a dirty tree is settled
 # now rather than after a long build.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/build-scripts/deploy.sh 
new/dysk-3.8.1/build-scripts/deploy.sh
--- old/dysk-3.8.0/build-scripts/deploy.sh      2026-10-17 07:43:53.000000000 
+0200
+++ new/dysk-3.8.1/build-scripts/deploy.sh      2026-10-17 18:04:08.000000000 
+0200
@@ -23,6 +23,9 @@
 
 version=$(dysk_version)
 
+# Legacy download path, still used by third-party install scripts.
+ln -s x86_64-unknown-linux-gnu build/x86_64-linux
+
 h1 "Deploying $version to $DYSK_DEPLOY_TARGET"
 # Everything must be world-readable to be served; -a then carries the modes 
over.
 # rsync's --chmod=D...,F... syntax isn't an option: macOS ships openrsync, 
which
@@ -33,6 +36,9 @@
 rsync -av "dysk_$version.zip" "$DYSK_DEPLOY_TARGET/"
 ok "deployed $version"
 
+h2 "Tagging the release"
+push_release_tag
+
 # Last: the site must never describe a version whose binaries aren't up yet.
 h2 "Deploying the website"
 "$here/../website/deploy.sh"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/build-scripts/release.sh 
new/dysk-3.8.1/build-scripts/release.sh
--- old/dysk-3.8.0/build-scripts/release.sh     2026-10-17 07:43:53.000000000 
+0200
+++ new/dysk-3.8.1/build-scripts/release.sh     2026-10-17 18:04:08.000000000 
+0200
@@ -16,6 +16,11 @@
 
 version=$(dysk_version)
 
+# The GitHub release and the source archives come from origin, so the binaries
+# must be built from the commit that's there.
+h2 "Checking the release source"
+check_release_source
+
 # Publishing a binary built from uncommitted work is worth a question, whether
 # or not the artifacts travelled through a staging server.
 if ! tree_is_clean; then
@@ -85,3 +90,5 @@
 ok "archived in releases/"
 
 h1 "Release $version ready: dysk_$version.zip"
+info "deploy.sh publishes it and tags $(release_tag); then create the GitHub 
release with"
+info "    gh release create $(release_tag) dysk_$version.zip --verify-tag"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/cli/Cargo.toml 
new/dysk-3.8.1/cli/Cargo.toml
--- old/dysk-3.8.0/cli/Cargo.toml       2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/cli/Cargo.toml       2026-10-17 18:04:08.000000000 +0200
@@ -1,6 +1,6 @@
 [package]
 name = "dysk-cli"
-version = "3.7.1"
+version = "3.8.1"
 authors = ["dystroy <[email protected]>"]
 edition = "2024"
 license = "MIT"
@@ -18,6 +18,6 @@
 lfs-core = "0.20.2"
 serde = "1.0"
 serde_json = "1.0"
-termimad = "0.35.4"
+termimad = "0.35.5"
 #termimad = { path = "../../termimad" }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/cli/src/col.rs 
new/dysk-3.8.1/cli/src/col.rs
--- old/dysk-3.8.0/cli/src/col.rs       2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/cli/src/col.rs       2026-10-17 18:04:08.000000000 +0200
@@ -336,15 +336,15 @@
             Self::Disk => Order::Asc,
             Self::Used => Order::Asc,
             Self::Use => Order::Desc,
-            Self::UsePercent => Order::Asc,
+            Self::UsePercent => Order::Desc,
             Self::UseBar => Order::Desc,
             Self::Free => Order::Asc,
-            Self::FreePercent => Order::Desc,
+            Self::FreePercent => Order::Asc,
             Self::Size => Order::Desc,
             Self::InodesUsed => Order::Asc,
-            Self::InodesUse => Order::Asc,
-            Self::InodesUsePercent => Order::Asc,
-            Self::InodesBar => Order::Asc,
+            Self::InodesUse => Order::Desc,
+            Self::InodesUsePercent => Order::Desc,
+            Self::InodesBar => Order::Desc,
             Self::InodesFree => Order::Asc,
             Self::InodesCount => Order::Asc,
             Self::MountPoint => Order::Asc,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/cli/src/col_expr.rs 
new/dysk-3.8.1/cli/src/col_expr.rs
--- old/dysk-3.8.0/cli/src/col_expr.rs  2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/cli/src/col_expr.rs  2026-10-17 18:04:08.000000000 +0200
@@ -123,10 +123,14 @@
                 mount.stats().as_ref().map(|s| s.use_share()),
                 parse_float(&self.value)?,
             ),
-            Col::Free | Col::FreePercent => self.operator.eval_option(
+            Col::Free => self.operator.eval_option(
                 mount.stats().as_ref().map(|s| s.available()),
                 parse_integer(&self.value)?,
             ),
+            Col::FreePercent => self.operator.eval_option(
+                mount.stats().as_ref().map(|s| 1.0 - s.use_share()),
+                parse_float(&self.value)?,
+            ),
             Col::Size => self.operator.eval_option(
                 mount.stats().as_ref().map(|s| s.size()),
                 parse_integer(&self.value)?,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/website/src/filters.md 
new/dysk-3.8.1/website/src/filters.md
--- old/dysk-3.8.0/website/src/filters.md       2026-10-17 07:43:53.000000000 
+0200
+++ new/dysk-3.8.1/website/src/filters.md       2026-10-17 18:04:08.000000000 
+0200
@@ -7,20 +7,20 @@
 
 # Normality
 
-The default selection of filesystems showcases your storage, avoiding any 
filesystem which both have no "disk" and aren't remote ones, bound to another 
filesystem, etc.
+The default selection of filesystems showcases your storage: it leaves out 
virtual filesystems, bound mounts, and other filesystems with no underlying 
disk, except remote ones.
 
 ![screen](img/dysk_rows-standard.png)
 
-Here are the rules of the current heuristics, in order: a filesystem
+More precisely, a filesystem is listed by default when all these conditions 
hold:
 
-1. is excluded when its usage statistics can't be read unless it's an 
unreachable remote one
-1. is excluded when it's bound to a previous one
-1. is excluded when it's of type `squashfs`
-1. is included when it's of type `zfs`
-1. is included when it's remote
-1. is excluded when its disk is a disk image
-1. is excluded when no underlying disk was found
-1. (on mac) is excluded when it's the read-only system volum, is mounted in 
`/System` (except `/System/Volumes/Data`) or in `/Library/Developper`
+* its usage statistics could be read, or it's unreachable (eg a remote one 
whose server is down)
+* it has an underlying disk, or it's remote, or it's of type `zfs`
+* its disk isn't a disk image
+* it isn't bound to another filesystem
+* it isn't of type `squashfs`
+* (on mac) it isn't the read-only system volume mounted on `/`, and isn't 
mounted in `/System` (except `/System/Volumes/Data`) or in `/Library/Developer`
+
+Usage statistics may also be missing because they were [skipped or took too 
long](../table#remote-filesystems).
 
 To see *all* filesystems of your system, do `dysk --all`:
 
@@ -36,6 +36,8 @@
 
 ![screen](img/dysk_rows-current.png)
 
+This filesystem is shown even when it isn't a "normal" one. Bound mounts of 
the same device are only shown with `-a`.
+
 # Filter argument
 
 The `--filter` argument, shortened in `-f`, lets you specify a constraint, or 
combine several ones.
@@ -55,9 +57,15 @@
 |>| greater
 |>=| greater or equal
 |<>| different
-|=| somehow equal - for example `fs=sda` matches `/dev/sda1`
+|=| on text columns, contains, ignoring case - for example `fs=sda` matches 
`/dev/sda1`; on other columns, equal
 |==|really equal
 
+The value is read according to the column:
+
+* sizes (`size`, `used`, `free`) and counts (`inodes_free`, etc.) take a 
number, optionally with a unit: `100G`, `4kB`, `1.5T`. Add `i` for 1024-based 
units, eg `54GiB`
+* shares (`use`, `use_percent`, `free_percent`, `inodes`, 
`inodes_use_percent`, etc.) take a percentage like `65%`, or a fraction like 
`0.65`
+* booleans (`remote`) take `true` or `false`, `yes` or `no`, `1` or `0`
+
 You can combine several column conditions with boolean operators `|` (or), `&` 
(and) and `!` (not) and if needed you can use parenthesis.
 
 For example you may want to select the volumes with not enough space with
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/website/src/index.md 
new/dysk-3.8.1/website/src/index.md
--- old/dysk-3.8.0/website/src/index.md 2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/website/src/index.md 2026-10-17 18:04:08.000000000 +0200
@@ -18,10 +18,11 @@
 * `RAM` : an in-memory device (such as zram)
 * `LVM` : a device mapped to one or several disks using LVM
 * `crypt` : a crypted disk
+* `imag` : a disk image (only listed with `-a`)
 
 By default, only the "normal" devices, the ones you're usually interested 
about, are shown, but you can see the other ones with the `-a` option.
 
-All sizes are normally based on the current SI recommendations (1M is one 
million bytes) but can be changed with `--units binary` (then 1M is 1,048,576 
bytes).
+All sizes are normally based on the current SI recommendations (1M is one 
million bytes) but can be changed with `--units binary` (then 1Mi is 1,048,576 
bytes), or `--units bytes` for exact byte counts.
 
 # Tables
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/website/src/install.md 
new/dysk-3.8.1/website/src/install.md
--- old/dysk-3.8.0/website/src/install.md       2026-10-17 07:43:53.000000000 
+0200
+++ new/dysk-3.8.1/website/src/install.md       2026-10-17 18:04:08.000000000 
+0200
@@ -1,13 +1,11 @@
 
-**dysk** works on Linux, Mac, and Windows (experimental).
+**dysk** works on Linux, Mac, and Windows.
 
 Current version: **<a id=current-version href=../download>download</a>**
 <script>
-console.log("in script");
 fetch("../download/version",{cache: "reload"})
     .then(response => response.text())
     .then(version => {
-        console.log(`version: #${version}#`);
         version = version.trim();
         if (!/^\d+(\.\d+)*(-\w+)?$/.test(version)) {
             console.warn("invalid version in download/version");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/website/src/json.md 
new/dysk-3.8.1/website/src/json.md
--- old/dysk-3.8.0/website/src/json.md  2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/website/src/json.md  2026-10-17 18:04:08.000000000 +0200
@@ -32,6 +32,7 @@
   "fs-type": "ext4",
   "id": 26,
   "mount-point": "/",
+  "options": "rw,relatime",
   "remote": false,
   "stats": {
     "available": "81G",
@@ -39,6 +40,7 @@
     "bfree": 22790364,
     "blocks": 59233748,
     "bsize": 4096,
+    "bused": 36443384,
     "inodes": {
       "avail": 13880393,
       "files": 15114240,
@@ -57,6 +59,11 @@
 
 Note that fields may be *added* in any version.
 
+The JSON output doesn't depend on `--cols`: all fields are always there.
+
+`size`, `used`, and `available` are formatted according to `--units`.
+For raw numbers, use `blocks`, `bavail`, `bfree`, and `bused`, which count 
blocks of `bsize` bytes.
+
 # All filesystems
 
 As for the table view, the JSON is by default limited to "normal" storage 
devices.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dysk-3.8.0/website/src/table.md 
new/dysk-3.8.1/website/src/table.md
--- old/dysk-3.8.0/website/src/table.md 2026-10-17 07:43:53.000000000 +0200
+++ new/dysk-3.8.1/website/src/table.md 2026-10-17 18:04:08.000000000 +0200
@@ -4,7 +4,7 @@
 
 # Columns
 
-You can run `dysk --list-cols` for the list of all columns.
+You can run `dysk --list-cols` for the list of all columns, with their aliases 
(eg `ifree` for `inodes_free`).
 
 ## All columns
 
@@ -24,12 +24,12 @@
 free | ✓ | cumulated size of the available blocks
 free_percent |  | percentage of available blocks
 size | ✓ | size of the volume
-inodesfree |  | available inodes
-inodesused |  | inodes used
+inodes_free |  | available inodes
+inodes_used |  | inodes used
 inodes |  | inodes use share, graphical
 inodes_use_percent |  | inodes use share, in percents
 inodes_bar |  | inodes use share, graphical, without percentage
-inodescount |  | total number of inodes in the filesystem
+inodes_total |  | total number of inodes in the filesystem
 mount | ✓ | mounting path
 uuid |  | filesystem's UUID
 partuuid |  | partition's UUID
@@ -67,12 +67,12 @@
 
 ![screen](img/dysk_c=+dev+inodes.png)
 
-To preprend the `label` column before the default ones, use `dysk -c label+`:
+To prepend the `label` column before the default ones, use `dysk -c label+`:
 
 ![screen](img/dysk_c=label+.png)
 
 The `-` sign removes columns.
-And adding an already present column moves it to the end (there's never 
duplicates).
+And adding an already present column moves it to the end (there are never 
duplicates).
 
 Here's removing the `fs` column and moving the `type` column to the end, with 
`dysk -c -fs+type`:
 
@@ -87,6 +87,8 @@
 
 The `desc` and `asc` directions can be abbreviated into `d` and `a`.
 
+Without a direction, the usual one for the column is used: for example `dysk 
-s size` lists the biggest filesystems first.
+
 For example, sorting on the device id:
 
 ![screen](img/dysk_s=dev.png)
@@ -102,6 +104,19 @@
 
 ![screen](img/color-ascii.png)
 
+`--color` takes `yes`, `no`, or `auto` (the default: colors only when the 
output is a terminal).
+
+`--bar-width` sets the width of the bars of the `use`, `use_bar`, `inodes`, 
and `inodes_bar` columns (5 by default).
+
+# Remote filesystems
+
+dysk reads the usage of remote filesystems (NFS, SMB, etc.) too.
+If that's slow, `--remote-stats no` skips it (on Linux and Windows): those 
filesystems are then only listed with `-a`.
+
+On Linux, reading the usage of a filesystem gives up after 50ms, and the `use` 
column then says `timeout`.
+Such a filesystem is only listed with `-a`.
+You may change the delay with `--timeout`, eg `--timeout 2s` or `--timeout 
500ms`, or wait as long as needed with `--timeout none`.
+
 # CSV
 
 With the `--csv` argument, you can ask dysk to output the table in CSV:
@@ -112,7 +127,7 @@
 
 You may choose the separator with the `--csv-separator` argument.
 
-Filters, sorting, and column selection work the same than for standard tables 
so you may do this:
+Filters, sorting, and column selection work the same as for standard tables so 
you may do this:
 
 ```bash
 dysk --csv -f 'size>100G' -c remote+default+inodes > mounts.csv

++++++ dysk.obsinfo ++++++
--- /var/tmp/diff_new_pack.vf60kM/_old  2026-10-20 12:39:16.235870707 +0200
+++ /var/tmp/diff_new_pack.vf60kM/_new  2026-10-20 12:39:16.249871293 +0200
@@ -1,5 +1,5 @@
 name: dysk
-version: 3.8.0
-mtime: 1792215833
-commit: ce437e13cfc3f02ce2fdb6d2a4aeb552c0a940eb
+version: 3.8.1
+mtime: 1792253048
+commit: c002b844cfc33d56aaa7a4c46b80b033b07e0dee
 

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/dysk/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.dysk.new.3698736/vendor.tar.zst differ: char 7, 
line 1

Reply via email to