Avoid doing the "filelist" thing, since "git-apply" picks up the files automatically

..and git-apply does a lot better job at it anyway.

Also, we break the comment/diff on a line that starts with "diff -", not
just on the "---" line.  Especially for git diffs, we actually want that
line in the diff.

(We should probably also break on "Index: ..." followed by "=====")
This commit is contained in:
Linus Torvalds 2005-06-23 09:40:23 -07:00
parent f48516746f
commit a196d8d423
3 changed files with 11 additions and 62 deletions

View file

@ -7,11 +7,10 @@
## The arguments are:
## $1 - file with commit message
## $2 - file with the actual patch
## $3 - file with list of filenames the patch touches
## $4 - "info" file with Author, email and subject
## $5 - optional file containing signoff to add
## $3 - "info" file with Author, email and subject
## $4 - optional file containing signoff to add
##
signoff="$5"
signoff="$4"
final=.dotest/final-commit
##
## If this file exists, we ask before applying
@ -19,8 +18,7 @@ final=.dotest/final-commit
query_apply=.dotest/.query_apply
MSGFILE=$1
PATCHFILE=$2
FILES=$3
INFO=$4
INFO=$3
EDIT=${VISUAL:-$EDITOR}
EDIT=${EDIT:-vi}

4
dotest
View file

@ -19,9 +19,9 @@ esac
mailsplit $1 .dotest || exit 1
for i in .dotest/*
do
mailinfo .dotest/msg .dotest/patch .dotest/file < $i > .dotest/info || exit 1
mailinfo .dotest/msg .dotest/patch < $i > .dotest/info || exit 1
stripspace < .dotest/msg > .dotest/msg-clean
applypatch .dotest/msg-clean .dotest/patch .dotest/file .dotest/info "$2"
applypatch .dotest/msg-clean .dotest/patch .dotest/info "$2"
ret=$?
if [ $ret -ne 0 ]; then
# 2 is a special exit code from applypatch to indicate that

View file

@ -7,7 +7,7 @@
#include <string.h>
#include <ctype.h>
static FILE *cmitmsg, *patchfile, *filelist;
static FILE *cmitmsg, *patchfile;
static char line[1000];
static char date[1000];
@ -181,45 +181,6 @@ static void cleanup_space(char *buf)
}
}
/*
* Hacky hacky. This depends not only on -p1, but on
* filenames not having some special characters in them,
* like tilde.
*/
static void show_filename(char *line)
{
int len;
char *name = strchr(line, '/');
if (!name || !isspace(*line))
return;
name++;
len = 0;
for (;;) {
unsigned char c = name[len];
switch (c) {
default:
len++;
continue;
case 0: case ' ':
case '\t': case '\n':
break;
/* patch tends to special-case these things.. */
case '~':
break;
}
break;
}
/* remove ".orig" from the end - common patch behaviour */
if (len > 5 && !memcmp(name+len-5, ".orig", 5))
len -=5;
if (!len)
return;
fprintf(filelist, "%.*s\n", len, name);
}
static void handle_rest(void)
{
char *sub = cleanup_subject(subject);
@ -231,14 +192,9 @@ static void handle_rest(void)
FILE *out = cmitmsg;
do {
/* Track filename information from the patch.. */
if (!memcmp("---", line, 3)) {
if (!memcmp("diff -", line, 6) ||
!memcmp("---", line, 3))
out = patchfile;
show_filename(line+3);
}
if (!memcmp("+++", line, 3))
show_filename(line+3);
fputs(line, out);
} while (fgets(line, sizeof(line), stdin) != NULL);
@ -283,13 +239,13 @@ static void handle_body(void)
static void usage(void)
{
fprintf(stderr, "mailinfo msg-file path-file filelist-file < email\n");
fprintf(stderr, "mailinfo msg-file path-file < email\n");
exit(1);
}
int main(int argc, char ** argv)
{
if (argc != 4)
if (argc != 3)
usage();
cmitmsg = fopen(argv[1], "w");
if (!cmitmsg) {
@ -301,11 +257,6 @@ int main(int argc, char ** argv)
perror(argv[2]);
exit(1);
}
filelist = fopen(argv[3], "w");
if (!filelist) {
perror(argv[3]);
exit(1);
}
while (fgets(line, sizeof(line), stdin) != NULL) {
int len = eatspace(line);
if (!len) {