зеркало из https://github.com/microsoft/git.git
git-read-tree: remove deleted files in the working directory
Only when "-u" is used of course.
This commit is contained in:
Родитель
22f77b772d
Коммит
aa16021efc
|
@ -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;
|
||||
}
|
||||
|
|
24
read-tree.c
24
read-tree.c
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче