You've already forked uutils.github.io
mirror of
https://github.com/uutils/uutils.github.io.git
synced 2026-06-10 16:12:28 -07:00
deploy: b3ede5bce1
This commit is contained in:
+162
-14
@@ -1881,6 +1881,80 @@
|
||||
<span id="1879">1879</span>
|
||||
<span id="1880">1880</span>
|
||||
<span id="1881">1881</span>
|
||||
<span id="1882">1882</span>
|
||||
<span id="1883">1883</span>
|
||||
<span id="1884">1884</span>
|
||||
<span id="1885">1885</span>
|
||||
<span id="1886">1886</span>
|
||||
<span id="1887">1887</span>
|
||||
<span id="1888">1888</span>
|
||||
<span id="1889">1889</span>
|
||||
<span id="1890">1890</span>
|
||||
<span id="1891">1891</span>
|
||||
<span id="1892">1892</span>
|
||||
<span id="1893">1893</span>
|
||||
<span id="1894">1894</span>
|
||||
<span id="1895">1895</span>
|
||||
<span id="1896">1896</span>
|
||||
<span id="1897">1897</span>
|
||||
<span id="1898">1898</span>
|
||||
<span id="1899">1899</span>
|
||||
<span id="1900">1900</span>
|
||||
<span id="1901">1901</span>
|
||||
<span id="1902">1902</span>
|
||||
<span id="1903">1903</span>
|
||||
<span id="1904">1904</span>
|
||||
<span id="1905">1905</span>
|
||||
<span id="1906">1906</span>
|
||||
<span id="1907">1907</span>
|
||||
<span id="1908">1908</span>
|
||||
<span id="1909">1909</span>
|
||||
<span id="1910">1910</span>
|
||||
<span id="1911">1911</span>
|
||||
<span id="1912">1912</span>
|
||||
<span id="1913">1913</span>
|
||||
<span id="1914">1914</span>
|
||||
<span id="1915">1915</span>
|
||||
<span id="1916">1916</span>
|
||||
<span id="1917">1917</span>
|
||||
<span id="1918">1918</span>
|
||||
<span id="1919">1919</span>
|
||||
<span id="1920">1920</span>
|
||||
<span id="1921">1921</span>
|
||||
<span id="1922">1922</span>
|
||||
<span id="1923">1923</span>
|
||||
<span id="1924">1924</span>
|
||||
<span id="1925">1925</span>
|
||||
<span id="1926">1926</span>
|
||||
<span id="1927">1927</span>
|
||||
<span id="1928">1928</span>
|
||||
<span id="1929">1929</span>
|
||||
<span id="1930">1930</span>
|
||||
<span id="1931">1931</span>
|
||||
<span id="1932">1932</span>
|
||||
<span id="1933">1933</span>
|
||||
<span id="1934">1934</span>
|
||||
<span id="1935">1935</span>
|
||||
<span id="1936">1936</span>
|
||||
<span id="1937">1937</span>
|
||||
<span id="1938">1938</span>
|
||||
<span id="1939">1939</span>
|
||||
<span id="1940">1940</span>
|
||||
<span id="1941">1941</span>
|
||||
<span id="1942">1942</span>
|
||||
<span id="1943">1943</span>
|
||||
<span id="1944">1944</span>
|
||||
<span id="1945">1945</span>
|
||||
<span id="1946">1946</span>
|
||||
<span id="1947">1947</span>
|
||||
<span id="1948">1948</span>
|
||||
<span id="1949">1949</span>
|
||||
<span id="1950">1950</span>
|
||||
<span id="1951">1951</span>
|
||||
<span id="1952">1952</span>
|
||||
<span id="1953">1953</span>
|
||||
<span id="1954">1954</span>
|
||||
<span id="1955">1955</span>
|
||||
</pre><pre class="rust">
|
||||
<span class="comment">// This file is part of the uutils coreutils package.</span>
|
||||
<span class="comment">//</span>
|
||||
@@ -3278,14 +3352,17 @@ only ignore '.' and '..'."</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">display_dir_entry_size</span>(<span class="ident">entry</span>: <span class="kw-2">&</span><span class="ident">PathData</span>, <span class="ident">config</span>: <span class="kw-2">&</span><span class="ident">Config</span>) <span class="op">-</span><span class="op">></span> (<span class="ident">usize</span>, <span class="ident">usize</span>) {
|
||||
<span class="kw">fn</span> <span class="ident">display_dir_entry_size</span>(<span class="ident">entry</span>: <span class="kw-2">&</span><span class="ident">PathData</span>, <span class="ident">config</span>: <span class="kw-2">&</span><span class="ident">Config</span>) <span class="op">-</span><span class="op">></span> (<span class="ident">usize</span>, <span class="ident">usize</span>, <span class="ident">usize</span>, <span class="ident">usize</span>) {
|
||||
<span class="comment">// TODO: Cache/memoize the display_* results so we don't have to recalculate them.</span>
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">md</span>) <span class="op">=</span> <span class="ident">entry</span>.<span class="ident">md</span>() {
|
||||
(
|
||||
<span class="ident">display_symlink_count</span>(<span class="ident">md</span>).<span class="ident">len</span>(),
|
||||
<span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>).<span class="ident">len</span>(),
|
||||
<span class="ident">display_group</span>(<span class="ident">md</span>, <span class="ident">config</span>).<span class="ident">len</span>(),
|
||||
<span class="ident">display_size_or_rdev</span>(<span class="ident">md</span>, <span class="ident">config</span>).<span class="ident">len</span>(),
|
||||
)
|
||||
} <span class="kw">else</span> {
|
||||
(<span class="number">0</span>, <span class="number">0</span>)
|
||||
(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3293,15 +3370,28 @@ only ignore '.' and '..'."</span>,
|
||||
<span class="macro">format!</span>(<span class="string">"{:>width$}"</span>, <span class="ident">string</span>, <span class="ident">width</span> <span class="op">=</span> <span class="ident">count</span>)
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">pad_right</span>(<span class="ident">string</span>: <span class="ident">String</span>, <span class="ident">count</span>: <span class="ident">usize</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="macro">format!</span>(<span class="string">"{:<width$}"</span>, <span class="ident">string</span>, <span class="ident">width</span> <span class="op">=</span> <span class="ident">count</span>)
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">display_items</span>(<span class="ident">items</span>: <span class="kw-2">&</span>[<span class="ident">PathData</span>], <span class="ident">config</span>: <span class="kw-2">&</span><span class="ident">Config</span>, <span class="ident">out</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">BufWriter</span><span class="op"><</span><span class="ident">Stdout</span><span class="op">></span>) {
|
||||
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">format</span> <span class="op">=</span><span class="op">=</span> <span class="ident">Format::Long</span> {
|
||||
<span class="kw">let</span> (<span class="kw-2">mut</span> <span class="ident">max_links</span>, <span class="kw-2">mut</span> <span class="ident">max_width</span>) <span class="op">=</span> (<span class="number">1</span>, <span class="number">1</span>);
|
||||
<span class="kw">let</span> (
|
||||
<span class="kw-2">mut</span> <span class="ident">longest_link_count_len</span>,
|
||||
<span class="kw-2">mut</span> <span class="ident">longest_uname_len</span>,
|
||||
<span class="kw-2">mut</span> <span class="ident">longest_group_len</span>,
|
||||
<span class="kw-2">mut</span> <span class="ident">longest_size_len</span>,
|
||||
) <span class="op">=</span> (<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">total_size</span> <span class="op">=</span> <span class="number">0</span>;
|
||||
|
||||
<span class="kw">for</span> <span class="ident">item</span> <span class="kw">in</span> <span class="ident">items</span> {
|
||||
<span class="kw">let</span> (<span class="ident">links</span>, <span class="ident">width</span>) <span class="op">=</span> <span class="ident">display_dir_entry_size</span>(<span class="ident">item</span>, <span class="ident">config</span>);
|
||||
<span class="ident">max_links</span> <span class="op">=</span> <span class="ident">links</span>.<span class="ident">max</span>(<span class="ident">max_links</span>);
|
||||
<span class="ident">max_width</span> <span class="op">=</span> <span class="ident">width</span>.<span class="ident">max</span>(<span class="ident">max_width</span>);
|
||||
<span class="kw">let</span> (<span class="ident">link_count_len</span>, <span class="ident">uname_len</span>, <span class="ident">group_len</span>, <span class="ident">size_len</span>) <span class="op">=</span>
|
||||
<span class="ident">display_dir_entry_size</span>(<span class="ident">item</span>, <span class="ident">config</span>);
|
||||
<span class="ident">longest_link_count_len</span> <span class="op">=</span> <span class="ident">link_count_len</span>.<span class="ident">max</span>(<span class="ident">longest_link_count_len</span>);
|
||||
<span class="ident">longest_size_len</span> <span class="op">=</span> <span class="ident">size_len</span>.<span class="ident">max</span>(<span class="ident">longest_size_len</span>);
|
||||
<span class="ident">longest_uname_len</span> <span class="op">=</span> <span class="ident">uname_len</span>.<span class="ident">max</span>(<span class="ident">longest_uname_len</span>);
|
||||
<span class="ident">longest_group_len</span> <span class="op">=</span> <span class="ident">group_len</span>.<span class="ident">max</span>(<span class="ident">longest_group_len</span>);
|
||||
<span class="ident">longest_size_len</span> <span class="op">=</span> <span class="ident">size_len</span>.<span class="ident">max</span>(<span class="ident">longest_size_len</span>);
|
||||
<span class="ident">total_size</span> <span class="op">+</span><span class="op">=</span> <span class="ident">item</span>.<span class="ident">md</span>().<span class="ident">map_or</span>(<span class="number">0</span>, <span class="op">|</span><span class="ident">md</span><span class="op">|</span> <span class="ident">get_block_size</span>(<span class="ident">md</span>, <span class="ident">config</span>));
|
||||
}
|
||||
|
||||
@@ -3310,7 +3400,15 @@ only ignore '.' and '..'."</span>,
|
||||
}
|
||||
|
||||
<span class="kw">for</span> <span class="ident">item</span> <span class="kw">in</span> <span class="ident">items</span> {
|
||||
<span class="ident">display_item_long</span>(<span class="ident">item</span>, <span class="ident">max_links</span>, <span class="ident">max_width</span>, <span class="ident">config</span>, <span class="ident">out</span>);
|
||||
<span class="ident">display_item_long</span>(
|
||||
<span class="ident">item</span>,
|
||||
<span class="ident">longest_link_count_len</span>,
|
||||
<span class="ident">longest_uname_len</span>,
|
||||
<span class="ident">longest_group_len</span>,
|
||||
<span class="ident">longest_size_len</span>,
|
||||
<span class="ident">config</span>,
|
||||
<span class="ident">out</span>,
|
||||
);
|
||||
}
|
||||
} <span class="kw">else</span> {
|
||||
<span class="kw">let</span> <span class="ident">names</span> <span class="op">=</span> <span class="ident">items</span>.<span class="ident">iter</span>().<span class="ident">filter_map</span>(<span class="op">|</span><span class="ident">i</span><span class="op">|</span> <span class="ident">display_file_name</span>(<span class="ident">i</span>, <span class="ident">config</span>));
|
||||
@@ -3415,10 +3513,48 @@ only ignore '.' and '..'."</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="doccomment">/// This writes to the BufWriter out a single string of the output of `ls -l`.</span>
|
||||
<span class="doccomment">///</span>
|
||||
<span class="doccomment">/// It writes the following keys, in order:</span>
|
||||
<span class="doccomment">/// * `inode` ([`get_inode`], config-optional)</span>
|
||||
<span class="doccomment">/// * `permissions` ([`display_permissions`])</span>
|
||||
<span class="doccomment">/// * `symlink_count` ([`display_symlink_count`])</span>
|
||||
<span class="doccomment">/// * `owner` ([`display_uname`], config-optional)</span>
|
||||
<span class="doccomment">/// * `group` ([`display_group`], config-optional)</span>
|
||||
<span class="doccomment">/// * `author` ([`display_uname`], config-optional)</span>
|
||||
<span class="doccomment">/// * `size / rdev` ([`display_size_or_rdev`])</span>
|
||||
<span class="doccomment">/// * `system_time` ([`get_system_time`])</span>
|
||||
<span class="doccomment">/// * `file_name` ([`display_file_name`])</span>
|
||||
<span class="doccomment">///</span>
|
||||
<span class="doccomment">/// This function needs to display information in columns:</span>
|
||||
<span class="doccomment">/// * permissions and system_time are already guaranteed to be pre-formatted in fixed length.</span>
|
||||
<span class="doccomment">/// * file_name is the last column and is left-aligned.</span>
|
||||
<span class="doccomment">/// * Everything else needs to be padded using [`pad_left`].</span>
|
||||
<span class="doccomment">///</span>
|
||||
<span class="doccomment">/// That's why we have the parameters:</span>
|
||||
<span class="doccomment">/// ```txt</span>
|
||||
<span class="doccomment">/// max_links: usize,</span>
|
||||
<span class="doccomment">/// longest_uname_len: usize,</span>
|
||||
<span class="doccomment">/// longest_group_len: usize,</span>
|
||||
<span class="doccomment">/// max_size: usize,</span>
|
||||
<span class="doccomment">/// ```</span>
|
||||
<span class="doccomment">/// that decide the maximum possible character count of each field.</span>
|
||||
<span class="doccomment">///</span>
|
||||
<span class="doccomment">/// [`get_inode`]: ls::get_inode</span>
|
||||
<span class="doccomment">/// [`display_permissions`]: ls::display_permissions</span>
|
||||
<span class="doccomment">/// [`display_symlink_count`]: ls::display_symlink_count</span>
|
||||
<span class="doccomment">/// [`display_uname`]: ls::display_uname</span>
|
||||
<span class="doccomment">/// [`display_group`]: ls::display_group</span>
|
||||
<span class="doccomment">/// [`display_size_or_rdev`]: ls::display_size_or_rdev</span>
|
||||
<span class="doccomment">/// [`get_system_time`]: ls::get_system_time</span>
|
||||
<span class="doccomment">/// [`display_file_name`]: ls::display_file_name</span>
|
||||
<span class="doccomment">/// [`pad_left`]: ls::pad_left</span>
|
||||
<span class="kw">fn</span> <span class="ident">display_item_long</span>(
|
||||
<span class="ident">item</span>: <span class="kw-2">&</span><span class="ident">PathData</span>,
|
||||
<span class="ident">max_links</span>: <span class="ident">usize</span>,
|
||||
<span class="ident">max_size</span>: <span class="ident">usize</span>,
|
||||
<span class="ident">longest_link_count_len</span>: <span class="ident">usize</span>,
|
||||
<span class="ident">longest_uname_len</span>: <span class="ident">usize</span>,
|
||||
<span class="ident">longest_group_len</span>: <span class="ident">usize</span>,
|
||||
<span class="ident">longest_size_len</span>: <span class="ident">usize</span>,
|
||||
<span class="ident">config</span>: <span class="kw-2">&</span><span class="ident">Config</span>,
|
||||
<span class="ident">out</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">BufWriter</span><span class="op"><</span><span class="ident">Stdout</span><span class="op">></span>,
|
||||
) {
|
||||
@@ -3441,27 +3577,39 @@ only ignore '.' and '..'."</span>,
|
||||
<span class="ident">out</span>,
|
||||
<span class="string">"{} {}"</span>,
|
||||
<span class="ident">display_permissions</span>(<span class="ident">md</span>, <span class="bool-val">true</span>),
|
||||
<span class="ident">pad_left</span>(<span class="ident">display_symlink_count</span>(<span class="ident">md</span>), <span class="ident">max_links</span>),
|
||||
<span class="ident">pad_left</span>(<span class="ident">display_symlink_count</span>(<span class="ident">md</span>), <span class="ident">longest_link_count_len</span>),
|
||||
);
|
||||
|
||||
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">long</span>.<span class="ident">owner</span> {
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">" {}"</span>, <span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>));
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
|
||||
<span class="ident">out</span>,
|
||||
<span class="string">" {}"</span>,
|
||||
<span class="ident">pad_right</span>(<span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">longest_uname_len</span>)
|
||||
);
|
||||
}
|
||||
|
||||
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">long</span>.<span class="ident">group</span> {
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">" {}"</span>, <span class="ident">display_group</span>(<span class="ident">md</span>, <span class="ident">config</span>));
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
|
||||
<span class="ident">out</span>,
|
||||
<span class="string">" {}"</span>,
|
||||
<span class="ident">pad_right</span>(<span class="ident">display_group</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">longest_group_len</span>)
|
||||
);
|
||||
}
|
||||
|
||||
<span class="comment">// Author is only different from owner on GNU/Hurd, so we reuse</span>
|
||||
<span class="comment">// the owner, since GNU/Hurd is not currently supported by Rust.</span>
|
||||
<span class="kw">if</span> <span class="ident">config</span>.<span class="ident">long</span>.<span class="ident">author</span> {
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(<span class="ident">out</span>, <span class="string">" {}"</span>, <span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>));
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">write!</span>(
|
||||
<span class="ident">out</span>,
|
||||
<span class="string">" {}"</span>,
|
||||
<span class="ident">pad_right</span>(<span class="ident">display_uname</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">longest_uname_len</span>)
|
||||
);
|
||||
}
|
||||
|
||||
<span class="kw">let</span> <span class="kw">_</span> <span class="op">=</span> <span class="macro">writeln!</span>(
|
||||
<span class="ident">out</span>,
|
||||
<span class="string">" {} {} {}"</span>,
|
||||
<span class="ident">pad_left</span>(<span class="ident">display_size_or_rdev</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">max_size</span>),
|
||||
<span class="ident">pad_left</span>(<span class="ident">display_size_or_rdev</span>(<span class="ident">md</span>, <span class="ident">config</span>), <span class="ident">longest_size_len</span>),
|
||||
<span class="ident">display_date</span>(<span class="ident">md</span>, <span class="ident">config</span>),
|
||||
<span class="comment">// unwrap is fine because it fails when metadata is not available</span>
|
||||
<span class="comment">// but we already know that it is because it's checked at the</span>
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user