merrick@UUNET.UU.NET (01/10/90)
Hello
I am currently trying to get RCS running on a System V (2.X) machine, and
have run into the following roadblock:
* The System V I am using does not have the diff and diff3 versions
required by RCS.
* I have obtained the "gnudiff" package from uunet, but it seems
that the diff3 supplied is not the one RCS needs. The RCS merge
shell script calls diff3 with many arguments (including revision
numbers to be used as labels for the differences), far more than
the GNU diff3 is willing to entertain.
* I cannot find source to the RCS variant of diff3 anywhere.
To further my frustration, I have most recently been working on
a Pyramid, which has RCS - including the elusive diff3 - distributed
with OSx, but binary only.
* The project we want to employ RCS on will need to make extensive
use of branching and merging.
I'd really appreciate information on where I'm likely to find RCS diff3.
FYI, both the RCS and GNUdiff sources were obtained from the /usr/spool/ftp/gnu
directory on uunet.
Thanks for any and all help,
Phillip Merrick {...!uunet!viar1!merrick}
Viar and Company, Alexandria, VA. trinkle@CS.PURDUE.EDU (01/10/90)
The GNU diff3 works for ci and co, but does not work for rcsmerge
(which uses the merge script). I have included a different version of
merge for the GNU diff3 and a patch to GNU diff3 to make it return the
number of overlaps as it's exit status. Please let me know if this
works for you. If I get enough positive feedback on the GNU
diff/merge stuff, I will encourage GNU to modify diff3 or add an
option that will cause it to return the number of overlaps.
The diff/diff3 source used to be distributed with RCS, but it was
discontinued because it was a violation of licenses.
Daniel Trinkle trinkle@cs.purdue.edu
Dept. of Computer Sciences {backbone}!purdue!trinkle
Purdue University 317-494-7844
West Lafayette, IN 47907
============================== merge.sh ==============================
PATH=/bin:/usr/bin
DIFF=/usr/new/bin/diff
DIFF3="/usr/new/bin/diff3 -C"
p=w
case $1 in
-p)
p='1,$p'
shift
esac
case $# in
0|1|2)
echo >&2 "merge: usage: merge [-p] file1 file2 file3"
exit 1
esac
case $p in
w)
if test ! -w $1
then
echo >&2 "$1 not writeable"
exit 1
fi
esac
trap 's=$?; rm -f /tmp/d3a$$ /tmp/d3b$$; exit $s' 0
trap exit 1 2 3 13 15
umask 077
{
$DIFF3 -E $1 $2 $3
case $? in
0) ;;
1) echo >&2 merge: warning: 1 overlap during merge.;;
*) echo >&2 merge: warning: $? overlaps during merge.
esac
echo 'g/^>>>>>>> '$3'$/s//>>>>>>> '$5'/'
echo $p
} | ed - $1
============================== diff3.c.patch ==============================
*** diff3.c.old Tue Dec 19 14:50:53 1989
--- diff3.c Tue Dec 19 14:49:44 1989
***************
*** 192,198 ****
struct diff_block *process_diff ();
struct diff3_block *make_3way_diff ();
void output_diff3 ();
! void output_diff3_edscript ();
void usage ();
struct diff3_block *using_to_diff3_block ();
--- 192,198 ----
struct diff_block *process_diff ();
struct diff3_block *make_3way_diff ();
void output_diff3 ();
! int output_diff3_edscript ();
void usage ();
struct diff3_block *using_to_diff3_block ();
***************
*** 229,234 ****
--- 229,235 ----
int mapping [3];
int shiftmap;
int incompat;
+ int overlap_count;
struct diff_block *thread1, *thread2;
struct diff3_block *diff;
***************
*** 308,319 ****
}
diff = make_3way_diff (thread1, thread2);
if (edscript)
! output_diff3_edscript (stdout, diff, mapping, argv[optind],
argv[optind + 1], argv[optind + 2]);
else
output_diff3 (stdout, diff, mapping);
! exit (0);
}
/*
--- 309,323 ----
}
diff = make_3way_diff (thread1, thread2);
if (edscript)
! overlap_count = output_diff3_edscript (stdout, diff, mapping, argv[optind],
argv[optind + 1], argv[optind + 2]);
else
output_diff3 (stdout, diff, mapping);
! if (edscript)
! exit(overlap_count);
! else
! exit (0);
}
/*
***************
*** 1287,1296 ****
* on which it works. Thus file0, file1, and file2 are the filenames
* passed on the command line.
*
* See options.h for documentation on the global variables which this
* routine pays attention to.
*/
! void
output_diff3_edscript (outputfile, diff, mapping, file0, file1, file2)
FILE *outputfile;
struct diff3_block *diff;
--- 1291,1302 ----
* on which it works. Thus file0, file1, and file2 are the filenames
* passed on the command line.
*
+ * Returns the number of overlaps.
+ *
* See options.h for documentation on the global variables which this
* routine pays attention to.
*/
! int
output_diff3_edscript (outputfile, diff, mapping, file0, file1, file2)
FILE *outputfile;
struct diff3_block *diff;
***************
*** 1300,1309 ****
--- 1306,1317 ----
int rev_mapping[3];
int i;
int leading_dot;
+ int overlap_count;
struct diff3_block *newblock, *thisblock;
char *cp;
leading_dot = 0;
+ overlap_count = 0;
for (i = 0; i < 3; i++)
rev_mapping [mapping [i]] = i;
***************
*** 1348,1353 ****
--- 1356,1362 ----
putc ('\n', outputfile);
}
fprintf (outputfile, ">>>>>>> %s\n.\n", file2);
+ overlap_count++;
/* Add in code to take care of leading dots, if necessary. */
if (leading_dot)
***************
*** 1421,1426 ****
--- 1430,1436 ----
}
}
if (finalwrite) fprintf (outputfile, "w\nq\n");
+ return(overlap_count);
}
/*
======================================================================dkelly@npiatl.UUCP (Dwight Kelly) (01/11/90)
viar1!merrick@UUNET.UU.NET writes: >I am currently trying to get RCS running on a System V (2.X) machine, and >have run into the following roadblock: > * The System V I am using does not have the diff and diff3 versions > required by RCS. Get an earlier version of RCS, like 1.3. It included diff and diff3 source. I can provide it if you will email me. Dwight Kelly Network Publications, Inc. Lawrenceville, GA
tower@ai.mit.edu (Leonard H. Tower Jr.) (01/12/90)
Date: 10 Jan 90 16:41:26 GMT From: swrinde!emory!stiatl!rsiatl!kd4nc!npiatl!dkelly@cs.utexas.edu (Dwight Kelly) Organization: Network Publications, Inc. Atlanta, GA Sender: bug-gnu-utils-request@prep.ai.mit.edu viar1!merrick@UUNET.UU.NET writes: >I am currently trying to get RCS running on a System V (2.X) machine, and >have run into the following roadblock: > * The System V I am using does not have the diff and diff3 versions > required by RCS. Get an earlier version of RCS, like 1.3. It included diff and diff3 source. I can provide it if you will email me. Dwight Kelly Network Publications, Inc. Lawrenceville, GA Or pick up the GNU diff from prep.ai.mit.edu or one of the other fpt or uucp archives. gnu@prep.ai.mit.edu can send you a list. enjoy -len
fineman@ptolemy.arc.nasa.gov (Charles Fineman) (01/12/90)
Leonard H. Tower Jr. writes: > > viar1!merrick@UUNET.UU.NET writes: > > > * The System V I am using does not have the diff and diff3 versions > > required by RCS. > > Get an earlier version of RCS, like 1.3. It included diff and diff3 source. > I can provide it if you will email me. > > Or pick up the GNU diff from prep.ai.mit.edu or one of the other fpt > or uucp archives. gnu@prep.ai.mit.edu can send you a list. > > enjoy -len Well, the GNU diff program won't work without modification. The diff3 that RCS wants to use is the one in /lib (or it is /usr/lib). The point being that RCS passes the version numbers of the respective input files so one can see which conflicting change belongs to which version. I modified my private version but I'll post the diffs if you folks are interested (I may do it anyways, but there's a better chance if someone prods me!) ~Chuck Fineman