Skip to content

Commit

Permalink
Get rid of the dependency on RCS' merge program
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Dec 13, 2006
1 parent fbe0b24 commit e2b7008
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 89 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions Documentation/git-merge-index.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
9 changes: 0 additions & 9 deletions INSTALL
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion git-cvsserver.perl
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
2 changes: 1 addition & 1 deletion git-rerere.perl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion git.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
75 changes: 13 additions & 62 deletions merge-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

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;
mmbuffer_t res;
xpparam_t xpp;
int merge_status;

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)
Expand Down
14 changes: 1 addition & 13 deletions t/t0000-basic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

################################################################
Expand Down

0 comments on commit e2b7008

Please sign in to comment.