projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add the simple scripts I used to do a merge with content conflicts.
[git.git]
/
checkout-cache.c
diff --git
a/checkout-cache.c
b/checkout-cache.c
index
cfbc47e
..
5cd473c
100644
(file)
--- a/
checkout-cache.c
+++ b/
checkout-cache.c
@@
-46,21
+46,22
@@
static void create_directories(const char *path)
len = slash - path;
memcpy(buf, path, len);
buf[len] = 0;
len = slash - path;
memcpy(buf, path, len);
buf[len] = 0;
- mkdir(buf, 07
00
);
+ mkdir(buf, 07
55
);
}
}
static int create_file(const char *path, unsigned int mode)
{
}
}
static int create_file(const char *path, unsigned int mode)
{
- int fd = open(path, O_WRONLY | O_TRUNC | O_CREAT, 0600);
+ int fd;
+
+ mode = (mode & 0100) ? 0777 : 0666;
+ fd = open(path, O_WRONLY | O_TRUNC | O_CREAT, mode);
if (fd < 0) {
if (errno == ENOENT) {
create_directories(path);
if (fd < 0) {
if (errno == ENOENT) {
create_directories(path);
- fd = open(path, O_WRONLY | O_TRUNC | O_CREAT,
0600
);
+ fd = open(path, O_WRONLY | O_TRUNC | O_CREAT,
mode
);
}
}
}
}
- if (fd >= 0)
- fchmod(fd, mode);
return fd;
}
return fd;
}
@@
-74,37
+75,44
@@
static int write_entry(struct cache_entry *ce)
new = read_sha1_file(ce->sha1, type, &size);
if (!new || strcmp(type, "blob")) {
new = read_sha1_file(ce->sha1, type, &size);
if (!new || strcmp(type, "blob")) {
-
fprintf(stderr, "checkout-cache: unable to read sha1 file of %s (%s)\n
",
+
return error("checkout-cache: unable to read sha1 file of %s (%s)
",
ce->name, sha1_to_hex(ce->sha1));
ce->name, sha1_to_hex(ce->sha1));
- return -1;
}
}
- fd = create_file(ce->name,
ce->st_mode
);
+ fd = create_file(ce->name,
ntohl(ce->ce_mode)
);
if (fd < 0) {
if (fd < 0) {
- fprintf(stderr, "checkout-cache: unable to create %s (%s)\n",
- ce->name, strerror(errno));
free(new);
free(new);
- return -1;
+ return error("checkout-cache: unable to create %s (%s)",
+ ce->name, strerror(errno));
}
wrote = write(fd, new, size);
close(fd);
free(new);
}
wrote = write(fd, new, size);
close(fd);
free(new);
- if (wrote == size)
- return 0;
- fprintf(stderr, "checkout-cache: unable to write %s\n", ce->name);
- return -1;
+ if (wrote != size)
+ return error("checkout-cache: unable to write %s", ce->name);
+ return 0;
}
static int checkout_entry(struct cache_entry *ce)
{
}
static int checkout_entry(struct cache_entry *ce)
{
- if (!force) {
- struct stat st;
+ struct stat st;
- if (!stat(ce->name, &st)) {
- unsigned changed = cache_match_stat(ce, &st);
- if (changed && !quiet)
+ if (!stat(ce->name, &st)) {
+ unsigned changed = cache_match_stat(ce, &st);
+ if (!changed)
+ return 0;
+ if (!force) {
+ if (!quiet)
fprintf(stderr, "checkout-cache: %s already exists\n", ce->name);
return 0;
}
fprintf(stderr, "checkout-cache: %s already exists\n", ce->name);
return 0;
}
+
+ /*
+ * We unlink the old file, to get the new one with the
+ * right permissions (including umask, which is nasty
+ * to emulate by hand - much easier to let the system
+ * just do the right thing)
+ */
+ unlink(ce->name);
}
return write_entry(ce);
}
}
return write_entry(ce);
}
@@
-113,8
+121,15
@@
static int checkout_file(const char *name)
{
int pos = cache_name_pos(name, strlen(name));
if (pos < 0) {
{
int pos = cache_name_pos(name, strlen(name));
if (pos < 0) {
- if (!quiet)
- fprintf(stderr, "checkout-cache: %s is not in the cache\n", name);
+ if (!quiet) {
+ pos = -pos - 1;
+ fprintf(stderr,
+ "checkout-cache: %s is %s.\n",
+ name,
+ (pos < active_nr &&
+ !strcmp(active_cache[pos]->name, name)) ?
+ "unmerged" : "not in the cache");
+ }
return -1;
}
return checkout_entry(active_cache[pos]);
return -1;
}
return checkout_entry(active_cache[pos]);
@@
-126,6
+141,8
@@
static int checkout_all(void)
for (i = 0; i < active_nr ; i++) {
struct cache_entry *ce = active_cache[i];
for (i = 0; i < active_nr ; i++) {
struct cache_entry *ce = active_cache[i];
+ if (ce_stage(ce))
+ continue;
if (checkout_entry(ce) < 0)
return -1;
}
if (checkout_entry(ce) < 0)
return -1;
}
@@
-137,8
+154,7
@@
int main(int argc, char **argv)
int i, force_filename = 0;
if (read_cache() < 0) {
int i, force_filename = 0;
if (read_cache() < 0) {
- fprintf(stderr, "Invalid cache\n");
- exit(1);
+ die("invalid cache");
}
for (i = 1; i < argc; i++) {
}
for (i = 1; i < argc; i++) {