|
1683 | 1683 | <span id="1678">1678</span>
|
1684 | 1684 | <span id="1679">1679</span>
|
1685 | 1685 | <span id="1680">1680</span>
|
| 1686 | +<span id="1681">1681</span> |
| 1687 | +<span id="1682">1682</span> |
| 1688 | +<span id="1683">1683</span> |
| 1689 | +<span id="1684">1684</span> |
| 1690 | +<span id="1685">1685</span> |
| 1691 | +<span id="1686">1686</span> |
| 1692 | +<span id="1687">1687</span> |
| 1693 | +<span id="1688">1688</span> |
| 1694 | +<span id="1689">1689</span> |
1686 | 1695 | </pre><pre class="rust"><code><span class="attribute">#![<span class="ident">allow</span>(<span class="ident">clippy::missing_safety_doc</span>)]</span>
|
1687 | 1696 | <span class="attribute">#![<span class="ident">allow</span>(<span class="ident">clippy::extra_unused_lifetimes</span>)]</span>
|
1688 | 1697 |
|
|
2782 | 2791 | <span class="kw">let</span> <span class="ident">source_metadata</span> <span class="op">=</span> <span class="ident">fs::symlink_metadata</span>(<span class="ident">source</span>).<span class="ident">context</span>(<span class="ident">context</span>)<span class="question-mark">?</span>;
|
2783 | 2792 | <span class="kw">match</span> <span class="kw-2">*</span><span class="ident">attribute</span> {
|
2784 | 2793 | <span class="ident">Attribute::Mode</span> => {
|
2785 |
| - <span class="ident">fs::set_permissions</span>(<span class="ident">dest</span>, <span class="ident">source_metadata</span>.<span class="ident">permissions</span>()).<span class="ident">context</span>(<span class="ident">context</span>)<span class="question-mark">?</span>; |
2786 |
| - <span class="comment">// FIXME: Implement this for windows as well</span> |
2787 |
| - <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"feat_acl"</span>)]</span> |
2788 |
| - <span class="ident">exacl::getfacl</span>(<span class="ident">source</span>, <span class="prelude-val">None</span>) |
2789 |
| - .<span class="ident">and_then</span>(<span class="op">|</span><span class="ident">acl</span><span class="op">|</span> <span class="ident">exacl::setfacl</span>(<span class="kw-2">&</span>[<span class="ident">dest</span>], <span class="kw-2">&</span><span class="ident">acl</span>, <span class="prelude-val">None</span>)) |
2790 |
| - .<span class="ident">map_err</span>(<span class="op">|</span><span class="ident">err</span><span class="op">|</span> <span class="ident">Error::Error</span>(<span class="ident">err</span>.<span class="ident">to_string</span>()))<span class="question-mark">?</span>; |
| 2794 | + <span class="comment">// The `chmod()` system call that underlies the</span> |
| 2795 | + <span class="comment">// `fs::set_permissions()` call is unable to change the</span> |
| 2796 | + <span class="comment">// permissions of a symbolic link. In that case, we just</span> |
| 2797 | + <span class="comment">// do nothing, since every symbolic link has the same</span> |
| 2798 | + <span class="comment">// permissions.</span> |
| 2799 | + <span class="kw">if</span> <span class="op">!</span><span class="ident">is_symlink</span>(<span class="ident">dest</span>) { |
| 2800 | + <span class="ident">fs::set_permissions</span>(<span class="ident">dest</span>, <span class="ident">source_metadata</span>.<span class="ident">permissions</span>()).<span class="ident">context</span>(<span class="ident">context</span>)<span class="question-mark">?</span>; |
| 2801 | + <span class="comment">// FIXME: Implement this for windows as well</span> |
| 2802 | + <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"feat_acl"</span>)]</span> |
| 2803 | + <span class="ident">exacl::getfacl</span>(<span class="ident">source</span>, <span class="prelude-val">None</span>) |
| 2804 | + .<span class="ident">and_then</span>(<span class="op">|</span><span class="ident">acl</span><span class="op">|</span> <span class="ident">exacl::setfacl</span>(<span class="kw-2">&</span>[<span class="ident">dest</span>], <span class="kw-2">&</span><span class="ident">acl</span>, <span class="prelude-val">None</span>)) |
| 2805 | + .<span class="ident">map_err</span>(<span class="op">|</span><span class="ident">err</span><span class="op">|</span> <span class="ident">Error::Error</span>(<span class="ident">err</span>.<span class="ident">to_string</span>()))<span class="question-mark">?</span>; |
| 2806 | + } |
2791 | 2807 | }
|
2792 | 2808 | <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">unix</span>)]</span>
|
2793 | 2809 | <span class="ident">Attribute::Ownership</span> => {
|
|
2813 | 2829 | .<span class="ident">map_err</span>(<span class="ident">Error::Error</span>)<span class="question-mark">?</span>;
|
2814 | 2830 | }
|
2815 | 2831 | <span class="ident">Attribute::Timestamps</span> => {
|
2816 |
| - <span class="ident">filetime::set_file_times</span>( |
2817 |
| - <span class="ident">Path::new</span>(<span class="ident">dest</span>), |
2818 |
| - <span class="ident">FileTime::from_last_access_time</span>(<span class="kw-2">&</span><span class="ident">source_metadata</span>), |
2819 |
| - <span class="ident">FileTime::from_last_modification_time</span>(<span class="kw-2">&</span><span class="ident">source_metadata</span>), |
2820 |
| - )<span class="question-mark">?</span>; |
| 2832 | + <span class="kw">let</span> <span class="ident">atime</span> <span class="op">=</span> <span class="ident">FileTime::from_last_access_time</span>(<span class="kw-2">&</span><span class="ident">source_metadata</span>); |
| 2833 | + <span class="kw">let</span> <span class="ident">mtime</span> <span class="op">=</span> <span class="ident">FileTime::from_last_modification_time</span>(<span class="kw-2">&</span><span class="ident">source_metadata</span>); |
| 2834 | + <span class="kw">if</span> <span class="ident">is_symlink</span>(<span class="ident">dest</span>) { |
| 2835 | + <span class="ident">filetime::set_symlink_file_times</span>(<span class="ident">dest</span>, <span class="ident">atime</span>, <span class="ident">mtime</span>)<span class="question-mark">?</span>; |
| 2836 | + } <span class="kw">else</span> { |
| 2837 | + <span class="ident">filetime::set_file_times</span>(<span class="ident">dest</span>, <span class="ident">atime</span>, <span class="ident">mtime</span>)<span class="question-mark">?</span>; |
| 2838 | + } |
2821 | 2839 | }
|
2822 | 2840 | <span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">feature</span> <span class="op">=</span> <span class="string">"feat_selinux"</span>)]</span>
|
2823 | 2841 | <span class="ident">Attribute::Context</span> => {
|
|
0 commit comments