summaryrefslogtreecommitdiff
path: root/merge-cache.c
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@SteelEye.com>2005-04-24 03:50:10 (GMT)
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-24 03:50:10 (GMT)
commite2b6a9d0bf9335f24aa8b2be8ff00d3a4ccf6505 (patch)
treee18acff3eeac6bee8a34b6c25016f1dfbdefbd67 /merge-cache.c
parent58e28af6a4d4d4faa1fa628e91c0b33c2b87aade (diff)
downloadgit-e2b6a9d0bf9335f24aa8b2be8ff00d3a4ccf6505.zip
git-e2b6a9d0bf9335f24aa8b2be8ff00d3a4ccf6505.tar.gz
git-e2b6a9d0bf9335f24aa8b2be8ff00d3a4ccf6505.tar.bz2
[PATCH] make file merging respect permissions
1) permissions aren't respected in the merge script (primarily because they're never passed in to it in the first place). Fix that and also check for permission conflicts in the merge 2) the delete of a file in both branches may indeed be just that, but it could also be the indicator of a rename conflict (file moved to different locations in both branches), so error out and ask the committer for guidance. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'merge-cache.c')
-rw-r--r--merge-cache.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/merge-cache.c b/merge-cache.c
index 68ac4ab..11079b1 100644
--- a/merge-cache.c
+++ b/merge-cache.c
@@ -4,7 +4,7 @@
#include "cache.h"
static const char *pgm = NULL;
-static const char *arguments[5];
+static const char *arguments[8];
static void run_program(void)
{
@@ -18,6 +18,9 @@ static void run_program(void)
arguments[2],
arguments[3],
arguments[4],
+ arguments[5],
+ arguments[6],
+ arguments[7],
NULL);
die("unable to execute '%s'", pgm);
}
@@ -36,9 +39,13 @@ static int merge_entry(int pos, const char *path)
arguments[2] = "";
arguments[3] = "";
arguments[4] = path;
+ arguments[5] = "";
+ arguments[6] = "";
+ arguments[7] = "";
found = 0;
do {
static char hexbuf[4][60];
+ static char ownbuf[4][60];
struct cache_entry *ce = active_cache[pos];
int stage = ce_stage(ce);
@@ -46,7 +53,9 @@ static int merge_entry(int pos, const char *path)
break;
found++;
strcpy(hexbuf[stage], sha1_to_hex(ce->sha1));
+ sprintf(ownbuf[stage], "%o", ntohl(ce->ce_mode) & (~S_IFMT));
arguments[stage] = hexbuf[stage];
+ arguments[stage + 4] = ownbuf[stage];
} while (++pos < active_nr);
if (!found)
die("merge-cache: %s not in the cache", path);