Add the 'diffburst' tool, which does the following:

Reads the output of 'diff -r' and splits it into separate
    patch files, one per file. The files are named 'patch-XX'
    where XX is aa, ab, ac, ... Useful when creating ports.
This commit is contained in:
Archie Cobbs 1999-01-07 19:28:57 +00:00
parent de5d1ba57c
commit 740e54be27
4 changed files with 76 additions and 1 deletions

View File

@ -1,4 +1,4 @@
# $Id: README,v 1.13 1998/12/15 16:51:48 cracauer Exp $
# $Id: README,v 1.14 1998/12/17 12:21:19 cracauer Exp $
This directory is for tools.
@ -22,3 +22,6 @@ tcl_bmake Generates a bmake Makefile for src/lib/libtcl.
upgrade Scripts used for upgrading an installed system.
vop_table Generates a HTML document that shows all the VOP's in
the kernel.
diffburst Reads the output of 'diff -r' and splits it into separate
patch files, one per file. The files are named 'patch-XX'
where XX is aa, ab, ac, ... Useful when creating ports.

View File

@ -0,0 +1,9 @@
# $Id: Makefile,v 1.1 1997/12/06 00:44:04 archie Exp $
PROG= diffburst
SRCS= main.c
MAN1= diffburst.1
COPTS+= -g -Wall
.include <bsd.prog.mk>

View File

@ -0,0 +1,19 @@
.Dd Jan 7, 1999
.Dt DIFFBURST 1
.Os BSD 4.4
.Sh NAME
.Nm diffburst
.Nd split recursive diff output into separate files
.Sh SYNOPSIS
.Nm diffburst < input
.Sh DESCRIPTION
.Nm
reads the output of a recursive diff from standard input,
and writes it back out as a series of patchfiles, where each patchfile
contains the diff for a single file. The files are named
patch-aa, patch-ab, and so on.
.Pp
This program is intended to aid in developing FreeBSD ports,
where the 'one patchfile per file' rule applies.
.Sh AUTHOR
Archie Cobbs <archie@whistle.com>

View File

@ -0,0 +1,44 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <err.h>
/* Split a recursive diff into sub-patches to satisfy the requirement
that each patch only patch a single file */
int
main(int ac, char *av[])
{
int ln;
char line[8192];
char suf[2] = { 'a', 'a' };
FILE *fp = NULL;
memset(line, 0, sizeof(line));
for (ln = 1; fgets(line, sizeof(line) - 1, stdin); ln++)
{
if (line[strlen(line) - 1] != '\n')
errx(1, "line %d is too long", ln);
if (!strncmp(line, "diff", 4) && fp != NULL)
{
fclose(fp);
fp = NULL;
}
if (fp == NULL)
{
char name[200];
snprintf(name, sizeof(name), "patch-%c%c", suf[0], suf[1]);
if (suf[1]++ == 'z')
{
suf[1] = 'a';
suf[0]++;
}
if ((fp = fopen(name, "w")) == NULL)
err(1, "%s", name);
}
fprintf(fp, "%s", line);
}
return(0);
}