forked from rpms/glibc
0bc968985e
This is an automated DistroBaker update from upstream sources. If you do not know what this is about or would like to opt out, contact the OSCI team. Source: https://src.fedoraproject.org/rpms/glibc.git#df07cd507e60fb1effac0d28d1bb0137235725ee
103 lines
3.4 KiB
Diff
103 lines
3.4 KiB
Diff
commit db32fc27e7bdfb5468200a94e9152bcc1c971d25
|
||
Author: DJ Delorie <dj@redhat.com>
|
||
Date: Thu Mar 11 12:50:02 2021 -0500
|
||
|
||
test-container: Always copy test-specific support files [BZ #27537]
|
||
|
||
There's a small chance that a fresh checkout will result in some of
|
||
the test-specific container files will have the same timestamp and
|
||
size, which breaks the rsync logic in test-container, resulting in
|
||
tests running with the wrong support files.
|
||
|
||
This patch changes the rsync logic to always copy the test-specific
|
||
files, which normally would always be copied anyway. The rsync logic
|
||
for the testroot itself is unchanged.
|
||
|
||
(cherry picked from commit 20bee7134801cc932ff87fac511289b92fc94944)
|
||
|
||
diff --git a/support/test-container.c b/support/test-container.c
|
||
index 28cc44d9f1e28c10..94498d39019a4776 100644
|
||
--- a/support/test-container.c
|
||
+++ b/support/test-container.c
|
||
@@ -481,7 +481,7 @@ need_sync (char *ap, char *bp, struct stat *a, struct stat *b)
|
||
}
|
||
|
||
static void
|
||
-rsync_1 (path_buf * src, path_buf * dest, int and_delete)
|
||
+rsync_1 (path_buf * src, path_buf * dest, int and_delete, int force_copies)
|
||
{
|
||
DIR *dir;
|
||
struct dirent *de;
|
||
@@ -491,8 +491,9 @@ rsync_1 (path_buf * src, path_buf * dest, int and_delete)
|
||
r_append ("/", dest);
|
||
|
||
if (verbose)
|
||
- printf ("sync %s to %s %s\n", src->buf, dest->buf,
|
||
- and_delete ? "and delete" : "");
|
||
+ printf ("sync %s to %s%s%s\n", src->buf, dest->buf,
|
||
+ and_delete ? " and delete" : "",
|
||
+ force_copies ? " (forced)" : "");
|
||
|
||
size_t staillen = src->len;
|
||
|
||
@@ -521,10 +522,10 @@ rsync_1 (path_buf * src, path_buf * dest, int and_delete)
|
||
missing. */
|
||
lstat (dest->buf, &d);
|
||
|
||
- if (! need_sync (src->buf, dest->buf, &s, &d))
|
||
+ if (! force_copies && ! need_sync (src->buf, dest->buf, &s, &d))
|
||
{
|
||
if (S_ISDIR (s.st_mode))
|
||
- rsync_1 (src, dest, and_delete);
|
||
+ rsync_1 (src, dest, and_delete, force_copies);
|
||
continue;
|
||
}
|
||
|
||
@@ -559,7 +560,7 @@ rsync_1 (path_buf * src, path_buf * dest, int and_delete)
|
||
if (verbose)
|
||
printf ("+D %s\n", dest->buf);
|
||
maybe_xmkdir (dest->buf, (s.st_mode & 0777) | 0700);
|
||
- rsync_1 (src, dest, and_delete);
|
||
+ rsync_1 (src, dest, and_delete, force_copies);
|
||
break;
|
||
|
||
case S_IFLNK:
|
||
@@ -639,12 +640,12 @@ rsync_1 (path_buf * src, path_buf * dest, int and_delete)
|
||
}
|
||
|
||
static void
|
||
-rsync (char *src, char *dest, int and_delete)
|
||
+rsync (char *src, char *dest, int and_delete, int force_copies)
|
||
{
|
||
r_setup (src, &spath);
|
||
r_setup (dest, &dpath);
|
||
|
||
- rsync_1 (&spath, &dpath, and_delete);
|
||
+ rsync_1 (&spath, &dpath, and_delete, force_copies);
|
||
}
|
||
|
||
|
||
@@ -846,11 +847,11 @@ main (int argc, char **argv)
|
||
do_ldconfig = true;
|
||
|
||
rsync (pristine_root_path, new_root_path,
|
||
- file_exists (concat (command_root, "/preclean.req", NULL)));
|
||
+ file_exists (concat (command_root, "/preclean.req", NULL)), 0);
|
||
|
||
if (stat (command_root, &st) >= 0
|
||
&& S_ISDIR (st.st_mode))
|
||
- rsync (command_root, new_root_path, 0);
|
||
+ rsync (command_root, new_root_path, 0, 1);
|
||
|
||
new_objdir_path = xstrdup (concat (new_root_path,
|
||
support_objdir_root, NULL));
|
||
@@ -1044,7 +1045,7 @@ main (int argc, char **argv)
|
||
|
||
/* Child has exited, we can post-clean the test root. */
|
||
printf("running post-clean rsync\n");
|
||
- rsync (pristine_root_path, new_root_path, 1);
|
||
+ rsync (pristine_root_path, new_root_path, 1, 0);
|
||
|
||
if (WIFEXITED (status))
|
||
exit (WEXITSTATUS (status));
|