summaryrefslogtreecommitdiff
path: root/update-cache.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-06 23:48:43 (GMT)
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-06 23:48:43 (GMT)
commitee267527aa80807f37caf1d00bcf1b5263945adb (patch)
tree4176958cd88ae4187b85f1d6bc4b2dd40cd63f28 /update-cache.c
parenta02ebff6127c5fc981668fb570f0a80f2b7657ca (diff)
downloadgit-ee267527aa80807f37caf1d00bcf1b5263945adb.zip
git-ee267527aa80807f37caf1d00bcf1b5263945adb.tar.gz
git-ee267527aa80807f37caf1d00bcf1b5263945adb.tar.bz2
Revert bogus optimization that avoids index file writes
It didn't properly mark all cache updates as being dirty, and causes merge errors due to that. In particular, it didn't notice when a file was force-removed. Besides, it was ugly as hell. I've put in place a slightly cleaner version, but I've not enabled the optimization because I don't want to be burned again.
Diffstat (limited to 'update-cache.c')
-rw-r--r--update-cache.c43
1 files changed, 3 insertions, 40 deletions
diff --git a/update-cache.c b/update-cache.c
index 97d5e8b..735d199 100644
--- a/update-cache.c
+++ b/update-cache.c
@@ -15,12 +15,6 @@
*/
static int allow_add = 0, allow_remove = 0, not_new = 0;
-/*
- * update-cache --refresh may not touch anything at all, in which case
- * writing 1.6MB of the same thing is a waste.
- */
-static int cache_changed = 0;
-
/* Three functions to allow overloaded pointer return; see linux/err.h */
static inline void *ERR_PTR(long error)
{
@@ -57,7 +51,7 @@ static void fill_stat_cache_info(struct cache_entry *ce, struct stat *st)
ce->ce_size = htonl(st->st_size);
}
-static int add_file_to_cache_1(char *path)
+static int add_file_to_cache(char *path)
{
int size, namelen;
struct cache_entry *ce;
@@ -101,35 +95,9 @@ static int add_file_to_cache_1(char *path)
default:
return -1;
}
- if (!cache_changed) {
- /* If we have not smudged the cache, be careful
- * to keep it clean. Find out if we have a matching
- * cache entry that add_cache_entry would replace with,
- * and if it matches then do not bother calling it.
- */
- int pos = cache_name_pos(ce->name, namelen);
- if ((0 <= pos) &&
- !memcmp(active_cache[pos], ce, sizeof(*ce))) {
- free(ce);
- /* magic to tell add_file_to_cache that
- * we have not updated anything.
- */
- return 999;
- }
- }
return add_cache_entry(ce, allow_add);
}
-static int add_file_to_cache(char *path)
-{
- int ret = add_file_to_cache_1(path);
- if (ret == 0)
- cache_changed = 1;
- else if (ret == 999)
- ret = 0;
- return ret;
-}
-
static int match_data(int fd, void *buffer, unsigned long size)
{
while (size) {
@@ -236,7 +204,6 @@ static struct cache_entry *refresh_entry(struct cache_entry *ce)
return ERR_PTR(-EINVAL);
}
- cache_changed = 1;
size = ce_size(ce);
updated = xmalloc(size);
memcpy(updated, ce, size);
@@ -270,6 +237,7 @@ static int refresh_cache(void)
}
continue;
}
+ active_cache_changed = 1;
active_cache[i] = new;
}
return has_errors;
@@ -317,7 +285,6 @@ static int add_cacheinfo(char *arg1, char *arg2, char *arg3)
if (!verify_path(arg3))
return -1;
- cache_changed = 1;
len = strlen(arg3);
size = cache_entry_size(len);
ce = xmalloc(size);
@@ -412,11 +379,7 @@ int main(int argc, char **argv)
if (add_file_to_cache(path))
die("Unable to add %s to database", path);
}
-
- if (!cache_changed)
- unlink(lockfile);
- else if (write_cache(newfd, active_cache, active_nr) ||
- rename(lockfile, indexfile))
+ if (write_cache(newfd, active_cache, active_nr) || rename(lockfile, indexfile))
die("Unable to write new cachefile");
lockfile_name = NULL;