diff options
Diffstat (limited to 'recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch')
-rw-r--r-- | recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch b/recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch new file mode 100644 index 0000000..5452b46 --- /dev/null +++ b/recipes-core/coreutils/coreutils-6.9/coreutils-6.9-cp-i-u.patch | |||
@@ -0,0 +1,120 @@ | |||
1 | Upstream-Status: Inappropriate [legacy version] | ||
2 | |||
3 | This patch was imported from the Fedora Core 8 coreutils-6.9-9 package. | ||
4 | |||
5 | The package is stated as being Licensed as GPLv2+. | ||
6 | |||
7 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> | ||
8 | |||
9 | ---- | ||
10 | |||
11 | When "cp -i --update old new" would do nothing because "new" is | ||
12 | newer than "old", cp would nonetheless prompt for whether it is | ||
13 | ok to overwrite "new". Then, regardless of the response (because | ||
14 | of the --update option), cp would do nothing. | ||
15 | |||
16 | The following patch eliminates the unnecessary prompt in that case. | ||
17 | |||
18 | diff --git a/src/copy.c b/src/copy.c | ||
19 | index b7bf73b..0e549d2 100644 | ||
20 | --- a/src/copy.c | ||
21 | +++ b/src/copy.c | ||
22 | @@ -1210,6 +1210,30 @@ copy_internal (char const *src_name, char const *dst_name, | ||
23 | return false; | ||
24 | } | ||
25 | |||
26 | + if (!S_ISDIR (src_mode) && x->update) | ||
27 | + { | ||
28 | + /* When preserving time stamps (but not moving within a file | ||
29 | + system), don't worry if the destination time stamp is | ||
30 | + less than the source merely because of time stamp | ||
31 | + truncation. */ | ||
32 | + int options = ((x->preserve_timestamps | ||
33 | + && ! (x->move_mode | ||
34 | + && dst_sb.st_dev == src_sb.st_dev)) | ||
35 | + ? UTIMECMP_TRUNCATE_SOURCE | ||
36 | + : 0); | ||
37 | + | ||
38 | + if (0 <= utimecmp (dst_name, &dst_sb, &src_sb, options)) | ||
39 | + { | ||
40 | + /* We're using --update and the destination is not older | ||
41 | + than the source, so do not copy or move. Pretend the | ||
42 | + rename succeeded, so the caller (if it's mv) doesn't | ||
43 | + end up removing the source file. */ | ||
44 | + if (rename_succeeded) | ||
45 | + *rename_succeeded = true; | ||
46 | + return true; | ||
47 | + } | ||
48 | + } | ||
49 | + | ||
50 | /* When there is an existing destination file, we may end up | ||
51 | returning early, and hence not copying/moving the file. | ||
52 | This may be due to an interactive `negative' reply to the | ||
53 | @@ -1302,30 +1326,6 @@ copy_internal (char const *src_name, char const *dst_name, | ||
54 | return false; | ||
55 | } | ||
56 | } | ||
57 | - | ||
58 | - if (x->update) | ||
59 | - { | ||
60 | - /* When preserving time stamps (but not moving within a file | ||
61 | - system), don't worry if the destination time stamp is | ||
62 | - less than the source merely because of time stamp | ||
63 | - truncation. */ | ||
64 | - int options = ((x->preserve_timestamps | ||
65 | - && ! (x->move_mode | ||
66 | - && dst_sb.st_dev == src_sb.st_dev)) | ||
67 | - ? UTIMECMP_TRUNCATE_SOURCE | ||
68 | - : 0); | ||
69 | - | ||
70 | - if (0 <= utimecmp (dst_name, &dst_sb, &src_sb, options)) | ||
71 | - { | ||
72 | - /* We're using --update and the destination is not older | ||
73 | - than the source, so do not copy or move. Pretend the | ||
74 | - rename succeeded, so the caller (if it's mv) doesn't | ||
75 | - end up removing the source file. */ | ||
76 | - if (rename_succeeded) | ||
77 | - *rename_succeeded = true; | ||
78 | - return true; | ||
79 | - } | ||
80 | - } | ||
81 | } | ||
82 | |||
83 | if (x->move_mode) | ||
84 | diff --git a/tests/mv/update b/tests/mv/update | ||
85 | index 0c06024..6c3d149 100755 | ||
86 | --- a/tests/mv/update | ||
87 | +++ b/tests/mv/update | ||
88 | @@ -1,7 +1,7 @@ | ||
89 | #!/bin/sh | ||
90 | # make sure --update works as advertised | ||
91 | |||
92 | -# Copyright (C) 2001, 2004, 2006 Free Software Foundation, Inc. | ||
93 | +# Copyright (C) 2001, 2004, 2006-2007 Free Software Foundation, Inc. | ||
94 | |||
95 | # This program is free software; you can redistribute it and/or modify | ||
96 | # it under the terms of the GNU General Public License as published by | ||
97 | @@ -46,11 +46,16 @@ fi | ||
98 | |||
99 | fail=0 | ||
100 | |||
101 | -for cp_or_mv in cp mv; do | ||
102 | - # This is a no-op. | ||
103 | - $cp_or_mv --update old new || fail=1 | ||
104 | - case "`cat new`" in new) ;; *) fail=1 ;; esac | ||
105 | - case "`cat old`" in old) ;; *) fail=1 ;; esac | ||
106 | +for interactive in '' -i; do | ||
107 | + for cp_or_mv in cp mv; do | ||
108 | + # This is a no-op, with no prompt. | ||
109 | + # With coreutils-6.9 and earlier, using --update with -i would | ||
110 | + # mistakenly elicit a prompt. | ||
111 | + $cp_or_mv $interactive --update old new < /dev/null > out 2>&1 || fail=1 | ||
112 | + test -s out && fail=1 | ||
113 | + case "`cat new`" in new) ;; *) fail=1 ;; esac | ||
114 | + case "`cat old`" in old) ;; *) fail=1 ;; esac | ||
115 | + done | ||
116 | done | ||
117 | |||
118 | # This will actually perform the rename. | ||
119 | -- | ||
120 | 1.5.3.rc1.16.g9d6f | ||