git-read-tree: remove deleted files in the working directory

Only when "-u" is used of course.
This commit is contained in:
Linus Torvalds 2005-06-09 15:34:04 -07:00
Родитель 22f77b772d
Коммит aa16021efc
2 изменённых файлов: 20 добавлений и 6 удалений

Просмотреть файл

@ -452,6 +452,8 @@ int write_cache(int newfd, struct cache_entry **cache, int entries)
for (i = 0; i < entries; i++) {
struct cache_entry *ce = cache[i];
if (!ce->ce_mode)
continue;
if (ce_write(&c, newfd, ce, ce_size(ce)) < 0)
return -1;
}

Просмотреть файл

@ -124,6 +124,15 @@ static int merged_entry(struct cache_entry *merge, struct cache_entry *old, stru
return 1;
}
static int deleted_entry(struct cache_entry *ce, struct cache_entry *old, struct cache_entry **dst)
{
if (old)
verify_uptodate(old);
ce->ce_mode = 0;
*dst++ = ce;
return 1;
}
static int threeway_merge(struct cache_entry *stages[4], struct cache_entry **dst)
{
struct cache_entry *old = stages[0];
@ -183,23 +192,21 @@ static int twoway_merge(struct cache_entry **src, struct cache_entry **dst)
}
else if (oldtree && !newtree && same(current, oldtree)) {
/* 10 or 11 */
verify_uptodate(current);
return 0;
return deleted_entry(oldtree, current, dst);
}
else if (oldtree && newtree &&
same(current, oldtree) && !same(current, newtree)) {
/* 20 or 21 */
verify_uptodate(current);
return merged_entry(newtree, NULL, dst);
return merged_entry(newtree, current, dst);
}
else
/* all other failures */
return -1;
}
else if (newtree)
return merged_entry(newtree, NULL, dst);
return merged_entry(newtree, current, dst);
else
return 0;
return deleted_entry(oldtree, current, dst);
}
/*
@ -236,6 +243,11 @@ static void check_updates(struct cache_entry **src, int nr)
unsigned short mask = htons(CE_UPDATE);
while (nr--) {
struct cache_entry *ce = *src++;
if (!ce->ce_mode) {
if (update)
unlink(ce->name);
continue;
}
if (ce->ce_flags & mask) {
ce->ce_flags &= ~mask;
if (update)