|
492 | 492 | <span id="492">492</span>
|
493 | 493 | <span id="493">493</span>
|
494 | 494 | <span id="494">494</span>
|
| 495 | +<span id="495">495</span> |
| 496 | +<span id="496">496</span> |
| 497 | +<span id="497">497</span> |
| 498 | +<span id="498">498</span> |
| 499 | +<span id="499">499</span> |
| 500 | +<span id="500">500</span> |
| 501 | +<span id="501">501</span> |
| 502 | +<span id="502">502</span> |
| 503 | +<span id="503">503</span> |
| 504 | +<span id="504">504</span> |
| 505 | +<span id="505">505</span> |
| 506 | +<span id="506">506</span> |
| 507 | +<span id="507">507</span> |
| 508 | +<span id="508">508</span> |
| 509 | +<span id="509">509</span> |
| 510 | +<span id="510">510</span> |
| 511 | +<span id="511">511</span> |
| 512 | +<span id="512">512</span> |
| 513 | +<span id="513">513</span> |
| 514 | +<span id="514">514</span> |
| 515 | +<span id="515">515</span> |
| 516 | +<span id="516">516</span> |
| 517 | +<span id="517">517</span> |
| 518 | +<span id="518">518</span> |
| 519 | +<span id="519">519</span> |
| 520 | +<span id="520">520</span> |
| 521 | +<span id="521">521</span> |
495 | 522 | </pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
|
496 | 523 | <span class="comment">// *</span>
|
497 | 524 | <span class="comment">// * (c) Alex Lyon <arcterus@mail.com></span>
|
|
797 | 824 | }
|
798 | 825 | } <span class="kw">else</span> {
|
799 | 826 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">dirs</span>: <span class="ident">VecDeque</span><span class="op"><</span><span class="ident">DirEntry</span><span class="op">></span> <span class="op">=</span> <span class="ident">VecDeque::new</span>();
|
| 827 | + <span class="comment">// The Paths to not descend into. We need to this because WalkDir doesn't have a way, afaik, to not descend into a directory</span> |
| 828 | + <span class="comment">// So we have to just ignore paths as they come up if they start with a path we aren't descending into</span> |
| 829 | + <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">not_descended</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">PathBuf</span><span class="op">></span> <span class="op">=</span> <span class="ident">Vec::new</span>(); |
800 | 830 |
|
801 |
| - <span class="kw">for</span> <span class="ident">entry</span> <span class="kw">in</span> <span class="ident">WalkDir::new</span>(<span class="ident">path</span>) { |
| 831 | + <span class="lifetime">'outer</span>: <span class="kw">for</span> <span class="ident">entry</span> <span class="kw">in</span> <span class="ident">WalkDir::new</span>(<span class="ident">path</span>) { |
802 | 832 | <span class="kw">match</span> <span class="ident">entry</span> {
|
803 | 833 | <span class="prelude-val">Ok</span>(<span class="ident">entry</span>) => {
|
| 834 | + <span class="kw">if</span> <span class="ident">options</span>.<span class="ident">interactive</span> <span class="op">==</span> <span class="ident">InteractiveMode::Always</span> { |
| 835 | + <span class="kw">for</span> <span class="ident">not_descend</span> <span class="kw">in</span> <span class="kw-2">&</span><span class="ident">not_descended</span> { |
| 836 | + <span class="kw">if</span> <span class="ident">entry</span>.<span class="ident">path</span>().<span class="ident">starts_with</span>(<span class="ident">not_descend</span>) { |
| 837 | + <span class="comment">// We don't need to continue the rest of code in this loop if we are in a directory we don't want to descend into</span> |
| 838 | + <span class="kw">continue</span> <span class="lifetime">'outer</span>; |
| 839 | + } |
| 840 | + } |
| 841 | + } |
804 | 842 | <span class="kw">let</span> <span class="ident">file_type</span> <span class="op">=</span> <span class="ident">entry</span>.<span class="ident">file_type</span>();
|
805 | 843 | <span class="kw">if</span> <span class="ident">file_type</span>.<span class="ident">is_dir</span>() {
|
806 |
| - <span class="ident">dirs</span>.<span class="ident">push_back</span>(<span class="ident">entry</span>); |
| 844 | + <span class="comment">// If we are in Interactive Mode Always and the directory isn't empty we ask if we should descend else we push this directory onto dirs vector</span> |
| 845 | + <span class="kw">if</span> <span class="ident">options</span>.<span class="ident">interactive</span> <span class="op">==</span> <span class="ident">InteractiveMode::Always</span> |
| 846 | + <span class="op">&&</span> <span class="ident">fs::read_dir</span>(<span class="ident">entry</span>.<span class="ident">path</span>()).<span class="ident">unwrap</span>().<span class="ident">count</span>() <span class="op">!</span><span class="op">=</span> <span class="number">0</span> |
| 847 | + { |
| 848 | + <span class="comment">// If we don't descend we push this directory onto our not_descended vector else we push this directory onto dirs vector</span> |
| 849 | + <span class="kw">if</span> <span class="ident">prompt_descend</span>(<span class="ident">entry</span>.<span class="ident">path</span>()) { |
| 850 | + <span class="ident">dirs</span>.<span class="ident">push_back</span>(<span class="ident">entry</span>); |
| 851 | + } <span class="kw">else</span> { |
| 852 | + <span class="ident">not_descended</span>.<span class="ident">push</span>(<span class="ident">entry</span>.<span class="ident">path</span>().<span class="ident">to_path_buf</span>()); |
| 853 | + } |
| 854 | + } <span class="kw">else</span> { |
| 855 | + <span class="ident">dirs</span>.<span class="ident">push_back</span>(<span class="ident">entry</span>); |
| 856 | + } |
807 | 857 | } <span class="kw">else</span> {
|
808 | 858 | <span class="ident">had_err</span> <span class="op">=</span> <span class="ident">remove_file</span>(<span class="ident">entry</span>.<span class="ident">path</span>(), <span class="ident">options</span>).<span class="ident">bitor</span>(<span class="ident">had_err</span>);
|
809 | 859 | }
|
|
941 | 991 | }
|
942 | 992 | }
|
943 | 993 |
|
| 994 | +<span class="kw">fn</span> <span class="ident">prompt_descend</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">Path</span>) -> <span class="ident">bool</span> { |
| 995 | + <span class="ident">prompt</span>(<span class="kw-2">&</span>(<span class="macro">format!</span>(<span class="string">"rm: descend into directory {}? "</span>, <span class="ident">path</span>.<span class="ident">quote</span>()))) |
| 996 | +} |
| 997 | + |
944 | 998 | <span class="kw">fn</span> <span class="ident">prompt_file</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">Path</span>, <span class="ident">is_dir</span>: <span class="ident">bool</span>) -> <span class="ident">bool</span> {
|
945 | 999 | <span class="kw">if</span> <span class="ident">is_dir</span> {
|
946 | 1000 | <span class="ident">prompt</span>(<span class="kw-2">&</span>(<span class="macro">format!</span>(<span class="string">"rm: remove directory {}? "</span>, <span class="ident">path</span>.<span class="ident">quote</span>())))
|
|
0 commit comments