|
630 | 630 | <span id="625">625</span>
|
631 | 631 | <span id="626">626</span>
|
632 | 632 | <span id="627">627</span>
|
| 633 | +<span id="628">628</span> |
| 634 | +<span id="629">629</span> |
| 635 | +<span id="630">630</span> |
| 636 | +<span id="631">631</span> |
| 637 | +<span id="632">632</span> |
633 | 638 | </pre><pre class="rust"><code><span class="comment">// This file is part of the uutils coreutils package.</span>
|
634 | 639 | <span class="comment">//</span>
|
635 | 640 | <span class="comment">// (c) Joseph Crail <jbcrail@gmail.com></span>
|
|
783 | 788 | }
|
784 | 789 | }
|
785 | 790 |
|
| 791 | +<span class="doccomment">/// resolve a relative path</span> |
786 | 792 | <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">resolve_relative_path</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">Path</span>) -> <span class="ident">Cow</span><span class="op"><</span><span class="ident">Path</span><span class="op">></span> {
|
787 | 793 | <span class="kw">if</span> <span class="ident">path</span>.<span class="ident">components</span>().<span class="ident">all</span>(<span class="op">|</span><span class="ident">e</span><span class="op">|</span> <span class="ident">e</span> <span class="op">!</span><span class="op">=</span> <span class="ident">Component::ParentDir</span>) {
|
788 | 794 | <span class="kw">return</span> <span class="ident">path</span>.<span class="ident">into</span>();
|
|
832 | 838 | <span class="ident">Logical</span>,
|
833 | 839 | }
|
834 | 840 |
|
835 |
| -<span class="comment">// copied from https://github.com/rust-lang/cargo/blob/2e4cfc2b7d43328b207879228a2ca7d427d188bb/src/cargo/util/paths.rs#L65-L90</span> |
836 |
| -<span class="comment">// both projects are MIT https://github.com/rust-lang/cargo/blob/master/LICENSE-MIT</span> |
837 |
| -<span class="comment">// for std impl progress see rfc https://github.com/rust-lang/rfcs/issues/2208</span> |
838 |
| -<span class="comment">// replace this once that lands</span> |
| 841 | +<span class="doccomment">/// Normalize a path by removing relative information</span> |
| 842 | +<span class="doccomment">/// For example, convert 'bar/../foo/bar.txt' => 'foo/bar.txt'</span> |
| 843 | +<span class="doccomment">/// copied from `<https://github.com/rust-lang/cargo/blob/2e4cfc2b7d43328b207879228a2ca7d427d188bb/src/cargo/util/paths.rs#L65-L90>`</span> |
| 844 | +<span class="doccomment">/// both projects are MIT `<https://github.com/rust-lang/cargo/blob/master/LICENSE-MIT>`</span> |
| 845 | +<span class="doccomment">/// for std impl progress see rfc `<https://github.com/rust-lang/rfcs/issues/2208>`</span> |
| 846 | +<span class="doccomment">/// replace this once that lands</span> |
839 | 847 | <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">normalize_path</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">Path</span>) -> <span class="ident">PathBuf</span> {
|
840 | 848 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">components</span> <span class="op">=</span> <span class="ident">path</span>.<span class="ident">components</span>().<span class="ident">peekable</span>();
|
841 | 849 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">ret</span> <span class="op">=</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">c</span> @ <span class="ident">Component::Prefix</span>(..)) <span class="op">=</span> <span class="ident">components</span>.<span class="ident">peek</span>().<span class="ident">cloned</span>() {
|
|
1025 | 1033 | }
|
1026 | 1034 |
|
1027 | 1035 | <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
|
| 1036 | +<span class="doccomment">/// Display the permissions of a file</span> |
| 1037 | +<span class="doccomment">/// On non unix like system, just show '----------'</span> |
1028 | 1038 | <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">display_permissions</span>(<span class="ident">metadata</span>: <span class="kw-2">&</span><span class="ident">fs::Metadata</span>, <span class="ident">display_file_type</span>: <span class="ident">bool</span>) -> <span class="ident">String</span> {
|
1029 | 1039 | <span class="kw">let</span> <span class="ident">mode</span>: <span class="ident">mode_t</span> <span class="op">=</span> <span class="ident">metadata</span>.<span class="ident">mode</span>() <span class="kw">as</span> <span class="ident">mode_t</span>;
|
1030 | 1040 | <span class="ident">display_permissions_unix</span>(<span class="ident">mode</span>, <span class="ident">display_file_type</span>)
|
1031 | 1041 | }
|
1032 | 1042 |
|
1033 | 1043 | <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
|
| 1044 | +<span class="doccomment">/// Display the permissions of a file on a unix like system</span> |
1034 | 1045 | <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">display_permissions_unix</span>(<span class="ident">mode</span>: <span class="ident">mode_t</span>, <span class="ident">display_file_type</span>: <span class="ident">bool</span>) -> <span class="ident">String</span> {
|
1035 | 1046 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">result</span>;
|
1036 | 1047 | <span class="kw">if</span> <span class="ident">display_file_type</span> {
|
|
1095 | 1106 | <span class="ident">result</span>
|
1096 | 1107 | }
|
1097 | 1108 |
|
1098 |
| -<span class="comment">// For some programs like install or mkdir, dir/. can be provided</span> |
1099 |
| -<span class="comment">// Special case to match GNU's behavior:</span> |
1100 |
| -<span class="comment">// install -d foo/. should work and just create foo/</span> |
1101 |
| -<span class="comment">// std::fs::create_dir("foo/."); fails in pure Rust</span> |
1102 |
| -<span class="comment">// See also mkdir.rs for another occurrence of this</span> |
| 1109 | +<span class="doccomment">/// For some programs like install or mkdir, dir/. can be provided</span> |
| 1110 | +<span class="doccomment">/// Special case to match GNU's behavior:</span> |
| 1111 | +<span class="doccomment">/// install -d foo/. should work and just create foo/</span> |
| 1112 | +<span class="doccomment">/// std::fs::create_dir("foo/."); fails in pure Rust</span> |
1103 | 1113 | <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">dir_strip_dot_for_creation</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">Path</span>) -> <span class="ident">PathBuf</span> {
|
1104 | 1114 | <span class="kw">if</span> <span class="ident">path</span>.<span class="ident">to_string_lossy</span>().<span class="ident">ends_with</span>(<span class="string">"/."</span>) {
|
1105 | 1115 | <span class="comment">// Do a simple dance to strip the "/."</span>
|
|
0 commit comments