summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/patch/patch-2.6.1/global-reject-file.diff
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/patch/patch-2.6.1/global-reject-file.diff')
-rw-r--r--meta/recipes-devtools/patch/patch-2.6.1/global-reject-file.diff186
1 files changed, 186 insertions, 0 deletions
diff --git a/meta/recipes-devtools/patch/patch-2.6.1/global-reject-file.diff b/meta/recipes-devtools/patch/patch-2.6.1/global-reject-file.diff
new file mode 100644
index 0000000000..cd3a600f3a
--- /dev/null
+++ b/meta/recipes-devtools/patch/patch-2.6.1/global-reject-file.diff
@@ -0,0 +1,186 @@
1Index: patch-2.6.1/patch.man
2===================================================================
3--- patch-2.6.1.orig/patch.man
4+++ patch-2.6.1/patch.man
5@@ -557,6 +557,15 @@ instead of the default
6 .B \&.rej
7 file. When \fIrejectfile\fP is \fB\-\fP, discard rejects.
8 .TP
9+.BI \*=global\-reject\-file= rejectfile
10+Put all rejects into
11+.I rejectfile
12+instead of creating separate reject files for all files that have rejects. The
13+.I rejectfile
14+will contain headers that identify which file each reject refers to. Note that
15+the global reject file is created even if \-\-dry\-run is specified (while
16+non-global reject files will only be created without \-\-dry\-run).
17+.TP
18 \fB\-R\fP or \fB\*=reverse\fP
19 Assume that this patch was created with the old and new files swapped.
20 (Yes, I'm afraid that does happen occasionally, human nature being what it
21Index: patch-2.6.1/src/patch.c
22===================================================================
23--- patch-2.6.1.orig/src/patch.c
24+++ patch-2.6.1/src/patch.c
25@@ -52,6 +52,7 @@ static void reinitialize_almost_everythi
26 static void remove_if_needed (char const *, int volatile *);
27 static void usage (FILE *, int) __attribute__((noreturn));
28
29+static void reject_header (const char *filename);
30 static void abort_hunk (bool, bool);
31 static void abort_hunk_context (bool, bool);
32 static void abort_hunk_unified (bool, bool);
33@@ -83,6 +84,7 @@ static int Argc;
34 static char * const *Argv;
35
36 static FILE *rejfp; /* reject file pointer */
37+static char *global_reject;
38
39 static char const *patchname;
40 static char *rejname;
41@@ -159,6 +161,10 @@ main (int argc, char **argv)
42 /* Make sure we clean up in case of disaster. */
43 set_signals (false);
44
45+ /* initialize global reject file */
46+ if (global_reject)
47+ init_reject ();
48+
49 if (inname && outfile)
50 {
51 apply_empty_patch = true;
52@@ -205,8 +211,9 @@ main (int argc, char **argv)
53 init_output (TMPOUTNAME, exclusive, &outstate);
54 }
55
56- /* initialize reject file */
57- init_reject ();
58+ /* initialize per-patch reject file */
59+ if (!global_reject)
60+ init_reject ();
61
62 /* find out where all the lines are */
63 if (!skip_rest_of_patch)
64@@ -295,6 +302,8 @@ main (int argc, char **argv)
65 || ! where
66 || ! apply_hunk (&outstate, where))))
67 {
68+ if (!failed)
69+ reject_header(outname);
70 abort_hunk (! failed, reverse);
71 failed++;
72 if (verbosity == VERBOSE ||
73@@ -331,7 +340,8 @@ main (int argc, char **argv)
74 fclose (outstate.ofp);
75 outstate.ofp = 0;
76 }
77- fclose (rejfp);
78+ if (!global_reject)
79+ fclose (rejfp);
80 continue;
81 }
82
83@@ -430,13 +440,13 @@ main (int argc, char **argv)
84 struct stat rejst;
85
86 if ((failed && fstat (fileno (rejfp), &rejst) != 0)
87- || fclose (rejfp) != 0)
88+ || (( !global_reject && fclose (rejfp) != 0)))
89 write_fatal ();
90 if (failed) {
91 somefailed = true;
92 say ("%d out of %d hunk%s %s", failed, hunk, "s" + (hunk == 1),
93 skip_rest_of_patch ? "ignored" : "FAILED");
94- if (outname && (! rejname || strcmp (rejname, "-") != 0)) {
95+ if (!global_reject && outname && (! rejname || strcmp (rejname, "-") != 0)) {
96 char *rej = rejname;
97 if (!rejname) {
98 /* FIXME: This should really be done differnely! */
99@@ -485,6 +495,23 @@ main (int argc, char **argv)
100 }
101 set_signals (true);
102 }
103+ if (global_reject)
104+ {
105+ struct stat rejst;
106+
107+ if ((somefailed && fstat (fileno (rejfp), &rejst) != 0)
108+ || fclose (rejfp) != 0)
109+ write_fatal ();
110+ if (somefailed)
111+ {
112+ say (" -- saving rejects to file %s\n", quotearg (global_reject));
113+ /*if (! dry_run)
114+ {*/
115+ move_file (TMPREJNAME, &TMPREJNAME_needs_removal,
116+ &rejst, global_reject, 0644, false);
117+ /*}*/
118+ }
119+ }
120 if (outstate.ofp && (ferror (outstate.ofp) || fclose (outstate.ofp) != 0))
121 write_fatal ();
122 cleanup ();
123@@ -572,6 +599,7 @@ static struct option const longopts[] =
124 {"posix", no_argument, NULL, CHAR_MAX + 7},
125 {"quoting-style", required_argument, NULL, CHAR_MAX + 8},
126 {"reject-format", required_argument, NULL, CHAR_MAX + 9},
127+ {"global-reject-file", required_argument, NULL, CHAR_MAX + 10},
128 {NULL, no_argument, NULL, 0}
129 };
130
131@@ -636,6 +664,7 @@ static char const *const option_help[] =
132 "",
133 " -d DIR --directory=DIR Change the working directory to DIR first.",
134 " --reject-format=FORMAT Create 'context' or 'unified' rejects.",
135+" --global-reject-file=file Put all rejects into one file.",
136 " --binary Read and write data in binary mode.",
137 "",
138 " -v --version Output version info.",
139@@ -852,6 +881,9 @@ get_some_switches (void)
140 else
141 usage (stderr, 2);
142 break;
143+ case CHAR_MAX + 10:
144+ global_reject = savestr (optarg);
145+ break;
146 default:
147 usage (stderr, 2);
148 }
149@@ -1512,6 +1544,37 @@ similar (register char const *a, registe
150 }
151 }
152
153+ static char *
154+format_timestamp (char timebuf[37], bool which)
155+{
156+ time_t ts = pch_timestamp(which);
157+ if (ts != -1)
158+ {
159+ struct tm *tm = localtime(&ts);
160+ strftime(timebuf, 37, "\t%Y-%m-%d %H:%M:%S.000000000 %z", tm);
161+ }
162+ else
163+ timebuf[0] = 0;
164+ return timebuf;
165+}
166+
167+/* Write a header in a reject file that combines multiple hunks. */
168+static void
169+reject_header (const char *outname)
170+{
171+ char timebuf0[37], timebuf1[37];
172+ if (!global_reject)
173+ return;
174+ if (diff_type == UNI_DIFF)
175+ fprintf(rejfp, "--- %s.orig%s\n+++ %s%s\n",
176+ outname, format_timestamp(timebuf0, reverse),
177+ outname, format_timestamp(timebuf1, !reverse));
178+ else
179+ fprintf(rejfp, "*** %s.orig%s\n--- %s%s\n",
180+ outname, format_timestamp(timebuf0, reverse),
181+ outname, format_timestamp(timebuf1, !reverse));
182+}
183+
184 /* Make a temporary file. */
185
186 #if HAVE_MKTEMP && ! HAVE_DECL_MKTEMP && ! defined mktemp