1
0
mirror of https://github.com/git/git.git synced 2024-11-18 04:14:01 +01:00

Get rid of the dependency on RCS' merge program

Now that we have git-merge-file, an RCS merge lookalike, we no longer
need it. So long, merge, and thanks for all the fish!

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Johannes Schindelin 2006-12-13 00:01:41 +01:00 committed by Junio C Hamano
parent fbe0b24ca5
commit e2b7008752
8 changed files with 19 additions and 88 deletions

1
.gitignore vendored

@ -60,6 +60,7 @@ git-mailsplit
git-merge
git-merge-base
git-merge-index
git-merge-file
git-merge-tree
git-merge-octopus
git-merge-one-file

@ -40,8 +40,8 @@ If "git-merge-index" is called with multiple <file>s (or -a) then it
processes them in turn only stopping if merge returns a non-zero exit
code.
Typically this is run with the a script calling the merge command from
the RCS package.
Typically this is run with the a script calling git's imitation of
the merge command from the RCS package.
A sample script called "git-merge-one-file" is included in the
distribution.

@ -82,15 +82,6 @@ Issues of note:
do that even if it wasn't for git. There's no point in living
in the dark ages any more.
- "merge", the standard UNIX three-way merge program. It usually
comes with the "rcs" package on most Linux distributions, so if
you have a developer install you probably have it already, but a
"graphical user desktop" install might have left it out.
You'll only need the merge program if you do development using
git, and if you only use git to track other peoples work you'll
never notice the lack of it.
- "wish", the Tcl/Tk windowing shell is used in gitk to show the
history graphically

@ -945,7 +945,7 @@ sub req_update
$log->debug("Temporary directory for merge is $dir");
my $return = system("merge", $file_local, $file_old, $file_new);
my $return = system("git merge-file", $file_local, $file_old, $file_new);
$return >>= 8;
if ( $return == 0 )

@ -154,7 +154,7 @@ sub find_conflict {
sub merge {
my ($name, $path) = @_;
record_preimage($path, "$rr_dir/$name/thisimage");
unless (system('merge', map { "$rr_dir/$name/${_}image" }
unless (system('git merge-file', map { "$rr_dir/$name/${_}image" }
qw(this pre post))) {
my $in;
open $in, "<$rr_dir/$name/thisimage" or

@ -24,7 +24,7 @@ This is a dummy package which brings in all subpackages.
%package core
Summary: Core git tools
Group: Development/Tools
Requires: zlib >= 1.2, rsync, rcs, curl, less, openssh-clients, expat
Requires: zlib >= 1.2, rsync, curl, less, openssh-clients, expat
%description core
This is a stupid (but extremely fast) directory content manager. It
doesn't do a whole lot, but what it _does_ do is track directory

@ -3,52 +3,6 @@
#include "xdiff-interface.h"
#include "blob.h"
static void rm_temp_file(const char *filename)
{
unlink(filename);
free((void *)filename);
}
static const char *write_temp_file(mmfile_t *f)
{
int fd;
const char *tmp = getenv("TMPDIR");
char *filename;
if (!tmp)
tmp = "/tmp";
filename = mkpath("%s/%s", tmp, "git-tmp-XXXXXX");
fd = mkstemp(filename);
if (fd < 0)
return NULL;
filename = xstrdup(filename);
if (f->size != xwrite(fd, f->ptr, f->size)) {
rm_temp_file(filename);
return NULL;
}
close(fd);
return filename;
}
static void *read_temp_file(const char *filename, unsigned long *size)
{
struct stat st;
char *buf = NULL;
int fd = open(filename, O_RDONLY);
if (fd < 0)
return NULL;
if (!fstat(fd, &st)) {
*size = st.st_size;
buf = xmalloc(st.st_size);
if (st.st_size != xread(fd, buf, st.st_size)) {
free(buf);
buf = NULL;
}
}
close(fd);
return buf;
}
static int fill_mmfile_blob(mmfile_t *f, struct blob *obj)
{
void *buf;
@ -72,22 +26,19 @@ static void free_mmfile(mmfile_t *f)
static void *three_way_filemerge(mmfile_t *base, mmfile_t *our, mmfile_t *their, unsigned long *size)
{
void *res;
const char *t1, *t2, *t3;
mmbuffer_t res;
xpparam_t xpp;
int merge_status;
t1 = write_temp_file(base);
t2 = write_temp_file(our);
t3 = write_temp_file(their);
res = NULL;
if (t1 && t2 && t3) {
int code = run_command("merge", t2, t1, t3, NULL);
if (!code || code == -1)
res = read_temp_file(t2, size);
}
rm_temp_file(t1);
rm_temp_file(t2);
rm_temp_file(t3);
return res;
memset(&xpp, 0, sizeof(xpp));
merge_status = xdl_merge(base, our, ".our", their, ".their",
&xpp, XDL_MERGE_ZEALOUS, &res);
if (merge_status < 0)
return NULL;
*size = res.size;
return res.ptr;
}
static int common_outf(void *priv_, mmbuffer_t *mb, int nbuf)

@ -19,11 +19,7 @@ modification *should* take notice and update the test vectors here.
'
################################################################
# It appears that people are getting bitten by not installing
# 'merge' (usually part of RCS package in binary distributions).
# Check this and error out before running any tests. Also catch
# the bogosity of trying to run tests without building while we
# are at it.
# It appears that people try to run tests without building...
../git >/dev/null
if test $? != 1
@ -32,14 +28,6 @@ then
exit 1
fi
merge >/dev/null 2>/dev/null
if test $? = 127
then
echo >&2 'You do not seem to have "merge" installed.
Please check INSTALL document.'
exit 1
fi
. ./test-lib.sh
################################################################