|
771 | 771 | <span id="769">769</span>
|
772 | 772 | <span id="770">770</span>
|
773 | 773 | <span id="771">771</span>
|
| 774 | +<span id="772">772</span> |
| 775 | +<span id="773">773</span> |
| 776 | +<span id="774">774</span> |
| 777 | +<span id="775">775</span> |
| 778 | +<span id="776">776</span> |
| 779 | +<span id="777">777</span> |
774 | 780 | </pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
|
775 | 781 | <span class="comment">// *</span>
|
776 | 782 | <span class="comment">// * (c) Ben Eills <ben@beneills.com></span>
|
|
793 | 799 | <span class="kw">use</span> <span class="ident">uucore::entries</span>::{<span class="ident">grp2gid</span>, <span class="ident">usr2uid</span>};
|
794 | 800 | <span class="kw">use</span> <span class="ident">uucore::error</span>::{<span class="ident">FromIo</span>, <span class="ident">UError</span>, <span class="ident">UIoError</span>, <span class="ident">UResult</span>, <span class="ident">UUsageError</span>};
|
795 | 801 | <span class="kw">use</span> <span class="ident">uucore::format_usage</span>;
|
| 802 | +<span class="kw">use</span> <span class="ident">uucore::fs::dir_strip_dot_for_creation</span>; |
796 | 803 | <span class="kw">use</span> <span class="ident">uucore::mode::get_umask</span>;
|
797 | 804 | <span class="kw">use</span> <span class="ident">uucore::perms</span>::{<span class="ident">wrap_chown</span>, <span class="ident">Verbosity</span>, <span class="ident">VerbosityLevel</span>};
|
798 | 805 |
|
|
1168 | 1175 | <span class="kw">for</span> <span class="ident">path</span> <span class="kw">in</span> <span class="ident">paths</span>.<span class="ident">iter</span>().<span class="ident">map</span>(<span class="ident">Path::new</span>) {
|
1169 | 1176 | <span class="comment">// if the path already exist, don't try to create it again</span>
|
1170 | 1177 | <span class="kw">if</span> <span class="op">!</span><span class="ident">path</span>.<span class="ident">exists</span>() {
|
| 1178 | + <span class="comment">// Special case to match GNU's behavior:</span> |
| 1179 | + <span class="comment">// install -d foo/. should work and just create foo/</span> |
| 1180 | + <span class="comment">// std::fs::create_dir("foo/."); fails in pure Rust</span> |
| 1181 | + <span class="comment">// See also mkdir.rs for another occurrence of this</span> |
| 1182 | + <span class="kw">let</span> <span class="ident">path_to_create</span> <span class="op">=</span> <span class="ident">dir_strip_dot_for_creation</span>(<span class="ident">path</span>); |
1171 | 1183 | <span class="comment">// Differently than the primary functionality</span>
|
1172 | 1184 | <span class="comment">// (MainFunction::Standard), the directory functionality should</span>
|
1173 | 1185 | <span class="comment">// create all ancestors (or components) of a directory</span>
|
|
1177 | 1189 | <span class="comment">// target directory. All created ancestor directories will have</span>
|
1178 | 1190 | <span class="comment">// the default mode. Hence it is safe to use fs::create_dir_all</span>
|
1179 | 1191 | <span class="comment">// and then only modify the target's dir mode.</span>
|
1180 |
| - <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span> |
1181 |
| - <span class="ident">fs::create_dir_all</span>(<span class="ident">path</span>).<span class="ident">map_err_context</span>(<span class="op">|</span><span class="op">|</span> <span class="ident">path</span>.<span class="ident">maybe_quote</span>().<span class="ident">to_string</span>()) |
| 1192 | + <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span> <span class="ident">fs::create_dir_all</span>(<span class="ident">path_to_create</span>.<span class="ident">as_path</span>()) |
| 1193 | + .<span class="ident">map_err_context</span>(<span class="op">|</span><span class="op">|</span> <span class="ident">path_to_create</span>.<span class="ident">as_path</span>().<span class="ident">maybe_quote</span>().<span class="ident">to_string</span>()) |
1182 | 1194 | {
|
1183 | 1195 | <span class="macro">show!</span>(<span class="ident">e</span>);
|
1184 | 1196 | <span class="kw">continue</span>;
|
1185 | 1197 | }
|
1186 | 1198 |
|
1187 | 1199 | <span class="kw">if</span> <span class="ident">b</span>.<span class="ident">verbose</span> {
|
1188 |
| - <span class="macro">println!</span>(<span class="string">"creating directory {}"</span>, <span class="ident">path</span>.<span class="ident">quote</span>()); |
| 1200 | + <span class="macro">println!</span>(<span class="string">"creating directory {}"</span>, <span class="ident">path_to_create</span>.<span class="ident">quote</span>()); |
1189 | 1201 | }
|
1190 | 1202 | }
|
1191 | 1203 |
|
|
0 commit comments