зеркало из 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++) {
|
for (i = 0; i < entries; i++) {
|
||||||
struct cache_entry *ce = cache[i];
|
struct cache_entry *ce = cache[i];
|
||||||
|
if (!ce->ce_mode)
|
||||||
|
continue;
|
||||||
if (ce_write(&c, newfd, ce, ce_size(ce)) < 0)
|
if (ce_write(&c, newfd, ce, ce_size(ce)) < 0)
|
||||||
return -1;
|
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;
|
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)
|
static int threeway_merge(struct cache_entry *stages[4], struct cache_entry **dst)
|
||||||
{
|
{
|
||||||
struct cache_entry *old = stages[0];
|
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)) {
|
else if (oldtree && !newtree && same(current, oldtree)) {
|
||||||
/* 10 or 11 */
|
/* 10 or 11 */
|
||||||
verify_uptodate(current);
|
return deleted_entry(oldtree, current, dst);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
else if (oldtree && newtree &&
|
else if (oldtree && newtree &&
|
||||||
same(current, oldtree) && !same(current, newtree)) {
|
same(current, oldtree) && !same(current, newtree)) {
|
||||||
/* 20 or 21 */
|
/* 20 or 21 */
|
||||||
verify_uptodate(current);
|
return merged_entry(newtree, current, dst);
|
||||||
return merged_entry(newtree, NULL, dst);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* all other failures */
|
/* all other failures */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (newtree)
|
else if (newtree)
|
||||||
return merged_entry(newtree, NULL, dst);
|
return merged_entry(newtree, current, dst);
|
||||||
else
|
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);
|
unsigned short mask = htons(CE_UPDATE);
|
||||||
while (nr--) {
|
while (nr--) {
|
||||||
struct cache_entry *ce = *src++;
|
struct cache_entry *ce = *src++;
|
||||||
|
if (!ce->ce_mode) {
|
||||||
|
if (update)
|
||||||
|
unlink(ce->name);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (ce->ce_flags & mask) {
|
if (ce->ce_flags & mask) {
|
||||||
ce->ce_flags &= ~mask;
|
ce->ce_flags &= ~mask;
|
||||||
if (update)
|
if (update)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче