delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2003/09/07/08:10:41

X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f
Date: Sun, 07 Sep 2003 13:19:03 +0100
From: "Richard Dawe" <rich AT phekda DOT freeserve DOT co DOT uk>
Sender: rich AT phekda DOT freeserve DOT co DOT uk
To: djgpp-workers AT delorie DOT com
X-Mailer: Emacs 21.3.50 (via feedmail 8.3.emacs20_6 I) and Blat ver 1.8.6
Subject: listfile2diff.sh
Message-Id: <E19vyMN-0000X7-00@phekda.freeserve.co.uk>
Reply-To: djgpp-workers AT delorie DOT com

Hello.

Below is the script I've started using to generate patches for DJGPP.
You give it a list file like this:

include/stdlib.h
src/libc/ansi/stdlib/foo.c

and it'll generate a patch for you. E.g.:

    listfile2diff.sh foo-files.txt -pu3

It copes with files that haven't been added to CVS yet.

Change 'mycvs' and 'nargs' to respectively: the name of your CVS program
(I use a bash shell script wrapper) and the number of filenames
to pass to CVS (I use two, to avoid command-line overflow).

Maybe it'll be useful for someone else.

Bye, Rich =]

#!/bin/sh

mycvs=cvsw
nargs=2

debug=0
if [ "a$1" = "a-g" ]; then
    debug=1
    shift
    set -x
fi

listfile=$1
shift

if [ "a$listfile" = "a" ]; then
    echo "Syntax: $0 <list-file> <diff-options>"
    exit 1
fi

if [ ! -r $listfile ]; then
    echo "Unable to read file list from $1"
    exit 1
fi

files=`cat $listfile`

# Check that all the files exist.
ok=1

for i in $files; do
    if [ ! -r $i ]; then
	echo "ERROR: $i does not exist!"
	ok=0
    fi
done

if [ "a$ok" = "a0" ]; then
    exit 1
fi

# Work out which files already exist in CVS and which are new.
existingfiles=
newfiles=

for i in $files; do
    b=$(basename $i)
    d=$(dirname $i)
    e=$d/CVS/Entries

    if [ ! -r $e ]; then
	newfiles="$newfiles $i"
    else
	grep $b $e >/dev/null 2>&1
	if [ "a$?" = "a0" ]; then
	    existingfiles="$existingfiles $i"
	else
	    newfiles="$newfiles $i"
	fi
    fi
done

if [ "a$debug" = "a1" ]; then
    echo "Existing files: $existingfiles"
    echo "New files: $newfiles"
fi

# Generate a diff.
if [ "a$existingfiles" != "a" ]; then
    echo $existingfiles | xargs -n $nargs $mycvs diff $*
fi

for i in $newfiles; do
    diff $* /dev/null $i
done

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019