Skip to content

Commit 3686a94

Browse files
committed
deploy: c249eba
1 parent 0a8f925 commit 3686a94

File tree

6 files changed

+242
-46
lines changed

6 files changed

+242
-46
lines changed

dev/src/uu_install/install.rs.html

Lines changed: 89 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,38 @@
808808
<span id="803">803</span>
809809
<span id="804">804</span>
810810
<span id="805">805</span>
811+
<span id="806">806</span>
812+
<span id="807">807</span>
813+
<span id="808">808</span>
814+
<span id="809">809</span>
815+
<span id="810">810</span>
816+
<span id="811">811</span>
817+
<span id="812">812</span>
818+
<span id="813">813</span>
819+
<span id="814">814</span>
820+
<span id="815">815</span>
821+
<span id="816">816</span>
822+
<span id="817">817</span>
823+
<span id="818">818</span>
824+
<span id="819">819</span>
825+
<span id="820">820</span>
826+
<span id="821">821</span>
827+
<span id="822">822</span>
828+
<span id="823">823</span>
829+
<span id="824">824</span>
830+
<span id="825">825</span>
831+
<span id="826">826</span>
832+
<span id="827">827</span>
833+
<span id="828">828</span>
834+
<span id="829">829</span>
835+
<span id="830">830</span>
836+
<span id="831">831</span>
837+
<span id="832">832</span>
838+
<span id="833">833</span>
839+
<span id="834">834</span>
840+
<span id="835">835</span>
841+
<span id="836">836</span>
842+
<span id="837">837</span>
811843
</pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
812844
<span class="comment">// *</span>
813845
<span class="comment">// * (c) Ben Eills &lt;ben@beneills.com&gt;</span>
@@ -1180,6 +1212,17 @@
11801212
<span class="kw">let</span> <span class="ident">backup_mode</span> <span class="op">=</span> <span class="ident">backup_control::determine_backup_mode</span>(<span class="ident">matches</span>)<span class="question-mark">?</span>;
11811213
<span class="kw">let</span> <span class="ident">target_dir</span> <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">value_of</span>(<span class="ident">OPT_TARGET_DIRECTORY</span>).<span class="ident">map</span>(<span class="op">|</span><span class="ident">d</span><span class="op">|</span> <span class="ident">d</span>.<span class="ident">to_owned</span>());
11821214

1215+
<span class="kw">let</span> <span class="ident">preserve_timestamps</span> <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">OPT_PRESERVE_TIMESTAMPS</span>);
1216+
<span class="kw">let</span> <span class="ident">compare</span> <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">OPT_COMPARE</span>);
1217+
<span class="kw">let</span> <span class="ident">strip</span> <span class="op">=</span> <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">OPT_STRIP</span>);
1218+
<span class="kw">if</span> <span class="ident">preserve_timestamps</span> <span class="op">&amp;&amp;</span> <span class="ident">compare</span> {
1219+
<span class="macro">show_error!</span>(<span class="string">&quot;Options --compare and --preserve-timestamps are mutually exclusive&quot;</span>);
1220+
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="number">1</span>.<span class="ident">into</span>());
1221+
}
1222+
<span class="kw">if</span> <span class="ident">compare</span> <span class="op">&amp;&amp;</span> <span class="ident">strip</span> {
1223+
<span class="macro">show_error!</span>(<span class="string">&quot;Options --compare and --strip are mutually exclusive&quot;</span>);
1224+
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="number">1</span>.<span class="ident">into</span>());
1225+
}
11831226
<span class="prelude-val">Ok</span>(<span class="ident">Behavior</span> {
11841227
<span class="ident">main_function</span>,
11851228
<span class="ident">specified_mode</span>,
@@ -1188,9 +1231,9 @@
11881231
<span class="ident">owner</span>: <span class="ident">matches</span>.<span class="ident">value_of</span>(<span class="ident">OPT_OWNER</span>).<span class="ident">unwrap_or</span>(<span class="string">&quot;&quot;</span>).<span class="ident">to_string</span>(),
11891232
<span class="ident">group</span>: <span class="ident">matches</span>.<span class="ident">value_of</span>(<span class="ident">OPT_GROUP</span>).<span class="ident">unwrap_or</span>(<span class="string">&quot;&quot;</span>).<span class="ident">to_string</span>(),
11901233
<span class="ident">verbose</span>: <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">OPT_VERBOSE</span>),
1191-
<span class="ident">preserve_timestamps</span>: <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">OPT_PRESERVE_TIMESTAMPS</span>),
1192-
<span class="ident">compare</span>: <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">OPT_COMPARE</span>),
1193-
<span class="ident">strip</span>: <span class="ident">matches</span>.<span class="ident">is_present</span>(<span class="ident">OPT_STRIP</span>),
1234+
<span class="ident">preserve_timestamps</span>,
1235+
<span class="ident">compare</span>,
1236+
<span class="ident">strip</span>,
11941237
<span class="ident">strip_program</span>: <span class="ident">String::from</span>(
11951238
<span class="ident">matches</span>
11961239
.<span class="ident">value_of</span>(<span class="ident">OPT_STRIP_PROGRAM</span>)
@@ -1281,13 +1324,19 @@
12811324
<span class="kw">if</span> <span class="ident">sources</span>.<span class="ident">len</span>() <span class="op">&gt;</span> <span class="number">1</span> <span class="op">|</span><span class="op">|</span> (<span class="ident">target</span>.<span class="ident">exists</span>() <span class="op">&amp;&amp;</span> <span class="ident">target</span>.<span class="ident">is_dir</span>()) {
12821325
<span class="ident">copy_files_into_dir</span>(<span class="ident">sources</span>, <span class="kw-2">&amp;</span><span class="ident">target</span>, <span class="ident">b</span>)
12831326
} <span class="kw">else</span> {
1284-
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">parent</span>) <span class="op">=</span> <span class="ident">target</span>.<span class="ident">parent</span>() {
1285-
<span class="kw">if</span> <span class="op">!</span><span class="ident">parent</span>.<span class="ident">exists</span>() <span class="op">&amp;&amp;</span> <span class="ident">b</span>.<span class="ident">create_leading</span> {
1327+
<span class="comment">// if -t is used in combination with -D, create whole target because it does not include filename</span>
1328+
<span class="kw">let</span> <span class="ident">to_create</span>: <span class="prelude-ty">Option</span><span class="op">&lt;</span><span class="kw-2">&amp;</span><span class="ident">Path</span><span class="op">&gt;</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">b</span>.<span class="ident">target_dir</span>.<span class="ident">is_some</span>() <span class="op">&amp;&amp;</span> <span class="ident">b</span>.<span class="ident">create_leading</span> {
1329+
<span class="prelude-val">Some</span>(<span class="ident">target</span>.<span class="ident">as_path</span>())
1330+
} <span class="kw">else</span> {
1331+
<span class="ident">target</span>.<span class="ident">parent</span>()
1332+
};
1333+
1334+
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">to_create</span>) <span class="op">=</span> <span class="ident">to_create</span> {
1335+
<span class="kw">if</span> <span class="op">!</span><span class="ident">to_create</span>.<span class="ident">exists</span>() <span class="op">&amp;&amp;</span> <span class="ident">b</span>.<span class="ident">create_leading</span> {
12861336
<span class="kw">if</span> <span class="ident">b</span>.<span class="ident">verbose</span> {
12871337
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">result</span> <span class="op">=</span> <span class="ident">PathBuf::new</span>();
1288-
<span class="comment">// When creating directories with -Dv, show directory creations step</span>
1289-
<span class="comment">// by step</span>
1290-
<span class="kw">for</span> <span class="ident">part</span> <span class="kw">in</span> <span class="ident">parent</span>.<span class="ident">components</span>() {
1338+
<span class="comment">// When creating directories with -Dv, show directory creations step by step</span>
1339+
<span class="kw">for</span> <span class="ident">part</span> <span class="kw">in</span> <span class="ident">to_create</span>.<span class="ident">components</span>() {
12911340
<span class="ident">result</span>.<span class="ident">push</span>(<span class="ident">part</span>.<span class="ident">as_os_str</span>());
12921341
<span class="kw">if</span> <span class="op">!</span><span class="ident">Path::new</span>(<span class="ident">part</span>.<span class="ident">as_os_str</span>()).<span class="ident">is_dir</span>() {
12931342
<span class="comment">// Don&#39;t display when the directory already exists</span>
@@ -1296,32 +1345,39 @@
12961345
}
12971346
}
12981347

1299-
<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">parent</span>) {
1300-
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">InstallError::CreateDirFailed</span>(<span class="ident">parent</span>.<span class="ident">to_path_buf</span>(), <span class="ident">e</span>).<span class="ident">into</span>());
1348+
<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">to_create</span>) {
1349+
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">InstallError::CreateDirFailed</span>(<span class="ident">to_create</span>.<span class="ident">to_path_buf</span>(), <span class="ident">e</span>).<span class="ident">into</span>());
13011350
}
13021351

13031352
<span class="comment">// Silent the warning as we want to the error message</span>
13041353
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy::question_mark</span>)]</span>
1305-
<span class="kw">if</span> <span class="ident">mode::chmod</span>(<span class="ident">parent</span>, <span class="ident">b</span>.<span class="ident">mode</span>()).<span class="ident">is_err</span>() {
1306-
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">InstallError::ChmodFailed</span>(<span class="ident">parent</span>.<span class="ident">to_path_buf</span>()).<span class="ident">into</span>());
1354+
<span class="kw">if</span> <span class="ident">mode::chmod</span>(<span class="ident">to_create</span>, <span class="ident">b</span>.<span class="ident">mode</span>()).<span class="ident">is_err</span>() {
1355+
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">InstallError::ChmodFailed</span>(<span class="ident">to_create</span>.<span class="ident">to_path_buf</span>()).<span class="ident">into</span>());
13071356
}
13081357
}
13091358
}
13101359

1311-
<span class="kw">if</span> <span class="ident">target</span>.<span class="ident">is_file</span>() <span class="op">|</span><span class="op">|</span> <span class="ident">is_new_file_path</span>(<span class="kw-2">&amp;</span><span class="ident">target</span>) {
1312-
<span class="ident">copy</span>(
1313-
<span class="ident">sources</span>.<span class="ident">get</span>(<span class="number">0</span>).<span class="ident">ok_or_else</span>(<span class="op">|</span><span class="op">|</span> {
1314-
<span class="ident">UUsageError::new</span>(
1315-
<span class="number">1</span>,
1316-
<span class="macro">format!</span>(
1317-
<span class="string">&quot;missing destination file operand after &#39;{}&#39;&quot;</span>,
1318-
<span class="ident">target</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>()
1319-
),
1320-
)
1321-
})<span class="question-mark">?</span>,
1322-
<span class="kw-2">&amp;</span><span class="ident">target</span>,
1323-
<span class="ident">b</span>,
1360+
<span class="kw">let</span> <span class="ident">source</span> <span class="op">=</span> <span class="ident">sources</span>.<span class="ident">first</span>().<span class="ident">ok_or_else</span>(<span class="op">|</span><span class="op">|</span> {
1361+
<span class="ident">UUsageError::new</span>(
1362+
<span class="number">1</span>,
1363+
<span class="macro">format!</span>(
1364+
<span class="string">&quot;missing destination file operand after &#39;{}&#39;&quot;</span>,
1365+
<span class="ident">target</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>()
1366+
),
13241367
)
1368+
})<span class="question-mark">?</span>;
1369+
1370+
<span class="comment">// If the -D flag was passed (target does not include filename),</span>
1371+
<span class="comment">// we need to add the source name to the target_dir</span>
1372+
<span class="comment">// because `copy` expects `to` to be a file, not a directory</span>
1373+
<span class="kw">let</span> <span class="ident">target</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident">target</span>.<span class="ident">is_dir</span>() <span class="op">&amp;&amp;</span> <span class="ident">b</span>.<span class="ident">create_leading</span> {
1374+
<span class="ident">target</span>.<span class="ident">join</span>(<span class="ident">source</span>)
1375+
} <span class="kw">else</span> {
1376+
<span class="ident">target</span> <span class="comment">// already includes dest filename</span>
1377+
};
1378+
1379+
<span class="kw">if</span> <span class="ident">target</span>.<span class="ident">is_file</span>() <span class="op">|</span><span class="op">|</span> <span class="ident">is_new_file_path</span>(<span class="kw-2">&amp;</span><span class="ident">target</span>) {
1380+
<span class="ident">copy</span>(<span class="ident">source</span>, <span class="kw-2">&amp;</span><span class="ident">target</span>, <span class="ident">b</span>)
13251381
} <span class="kw">else</span> {
13261382
<span class="prelude-val">Err</span>(<span class="ident">InstallError::InvalidTarget</span>(<span class="ident">target</span>).<span class="ident">into</span>())
13271383
}
@@ -1395,6 +1451,9 @@
13951451
<span class="comment">// The codes actually making use of the backup process don&#39;t seem to agree</span>
13961452
<span class="comment">// on how best to approach the issue. (mv and ln, for example)</span>
13971453
<span class="kw">if</span> <span class="ident">to</span>.<span class="ident">exists</span>() {
1454+
<span class="kw">if</span> <span class="ident">b</span>.<span class="ident">verbose</span> {
1455+
<span class="macro">println!</span>(<span class="string">&quot;removed {}&quot;</span>, <span class="ident">to</span>.<span class="ident">quote</span>());
1456+
}
13981457
<span class="ident">backup_path</span> <span class="op">=</span> <span class="ident">backup_control::get_backup_path</span>(<span class="ident">b</span>.<span class="ident">backup_mode</span>, <span class="ident">to</span>, <span class="kw-2">&amp;</span><span class="ident">b</span>.<span class="ident">suffix</span>);
13991458
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="kw-2">ref</span> <span class="ident">backup_path</span>) <span class="op">=</span> <span class="ident">backup_path</span> {
14001459
<span class="comment">// TODO!!</span>
@@ -1564,13 +1623,18 @@
15641623

15651624
<span class="comment">// setuid || setgid || sticky</span>
15661625
<span class="kw">let</span> <span class="ident">extra_mode</span>: <span class="ident">u32</span> <span class="op">=</span> <span class="number">0o7000</span>;
1626+
<span class="comment">// setuid || setgid || sticky || permissions</span>
1627+
<span class="kw">let</span> <span class="ident">all_modes</span>: <span class="ident">u32</span> <span class="op">=</span> <span class="number">0o7777</span>;
15671628

15681629
<span class="kw">if</span> <span class="ident">b</span>.<span class="ident">specified_mode</span>.<span class="ident">unwrap_or</span>(<span class="number">0</span>) <span class="op">&amp;</span> <span class="ident">extra_mode</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span>
15691630
<span class="op">|</span><span class="op">|</span> <span class="ident">from_meta</span>.<span class="ident">mode</span>() <span class="op">&amp;</span> <span class="ident">extra_mode</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span>
15701631
<span class="op">|</span><span class="op">|</span> <span class="ident">to_meta</span>.<span class="ident">mode</span>() <span class="op">&amp;</span> <span class="ident">extra_mode</span> <span class="op">!</span><span class="op">=</span> <span class="number">0</span>
15711632
{
15721633
<span class="kw">return</span> <span class="prelude-val">Ok</span>(<span class="bool-val">true</span>);
15731634
}
1635+
<span class="kw">if</span> <span class="ident">b</span>.<span class="ident">mode</span>() <span class="op">!</span><span class="op">=</span> <span class="ident">to_meta</span>.<span class="ident">mode</span>() <span class="op">&amp;</span> <span class="ident">all_modes</span> {
1636+
<span class="kw">return</span> <span class="prelude-val">Ok</span>(<span class="bool-val">true</span>);
1637+
}
15741638

15751639
<span class="kw">if</span> <span class="op">!</span><span class="ident">from_meta</span>.<span class="ident">is_file</span>() <span class="op">|</span><span class="op">|</span> <span class="op">!</span><span class="ident">to_meta</span>.<span class="ident">is_file</span>() {
15761640
<span class="kw">return</span> <span class="prelude-val">Ok</span>(<span class="bool-val">true</span>);

0 commit comments

Comments
 (0)