Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Fix "update-cache" not fixing up the size field as appropriate.
author
Linus Torvalds
<torvalds@ppc970.osdl.org>
Mon, 11 Apr 2005 18:33:58 +0000
(11:33 -0700)
committer
Linus Torvalds
<torvalds@ppc970.osdl.org>
Mon, 11 Apr 2005 18:33:58 +0000
(11:33 -0700)
The size field isn't in the tree information, so we need to
update it if the sha1 matches.
update-cache.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
cfd88e2
)
diff --git
a/update-cache.c
b/update-cache.c
index 68a0ae0444d700593198c748a00c9f2b0841bda8..b39185a1fecb18626fb3c3cc8bd5054096f3edfe 100644
(file)
--- a/
update-cache.c
+++ b/
update-cache.c
@@
-123,7
+123,7
@@
static int match_data(int fd, void *buffer, unsigned long size)
return 0;
}
return 0;
}
-static int compare_data(struct cache_entry *ce)
+static int compare_data(struct cache_entry *ce
, unsigned long expected_size
)
{
int match = -1;
int fd = open(ce->name, O_RDONLY);
{
int match = -1;
int fd = open(ce->name, O_RDONLY);
@@
-135,7
+135,7
@@
static int compare_data(struct cache_entry *ce)
buffer = read_sha1_file(ce->sha1, type, &size);
if (buffer) {
buffer = read_sha1_file(ce->sha1, type, &size);
if (buffer) {
- if (size ==
ce->st
_size && !strcmp(type, "blob"))
+ if (size ==
expected
_size && !strcmp(type, "blob"))
match = match_data(fd, buffer, size);
free(buffer);
}
match = match_data(fd, buffer, size);
free(buffer);
}
@@
-169,19
+169,20
@@
static struct cache_entry *refresh_entry(struct cache_entry *ce)
return ce;
/*
return ce;
/*
- * If the
length
has changed, there's no point in trying
+ * If the
mode
has changed, there's no point in trying
* to refresh the entry - it's not going to match
*/
* to refresh the entry - it's not going to match
*/
- if (changed &
(DATA_CHANGED | MODE_CHANGED)
)
+ if (changed &
MODE_CHANGED
)
return NULL;
return NULL;
- if (compare_data(ce))
+ if (compare_data(ce
, st.st_size
))
return NULL;
size = ce_size(ce);
updated = malloc(size);
memcpy(updated, ce, size);
fill_stat_cache_info(updated, &st);
return NULL;
size = ce_size(ce);
updated = malloc(size);
memcpy(updated, ce, size);
fill_stat_cache_info(updated, &st);
+ updated->st_size = st.st_size;
return updated;
}
return updated;
}