summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ccc4feb)
raw | patch | inline | side by side (parent: ccc4feb)
author | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Fri, 15 Apr 2005 18:08:33 +0000 (11:08 -0700) | ||
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Fri, 15 Apr 2005 18:08:33 +0000 (11:08 -0700) |
This allows scripts to manually add entries to the cache explicitly.
Need to do some way to remove them too, even if the path exists.
Need to do some way to remove them too, even if the path exists.
update-cache.c | patch | blob | history |
diff --git a/update-cache.c b/update-cache.c
index 85d0591c8500ac916b573ca3934cea84fe0f8106..065705a9b4350a907ce7e9ac4e661de894f9fd6a 100644 (file)
--- a/update-cache.c
+++ b/update-cache.c
}
}
+static int add_cacheinfo(char *arg1, char *arg2, char *arg3)
+{
+ int size, len;
+ unsigned int mode;
+ unsigned char sha1[20];
+ struct cache_entry *ce;
+
+ if (sscanf(arg1, "%o", &mode) != 1)
+ return -1;
+ printf("got mode %o\n", mode);
+ if (get_sha1_hex(arg2, sha1))
+ return -1;
+ printf("got sha1 %s\n", sha1_to_hex(sha1));
+ if (!verify_path(arg3))
+ return -1;
+ printf("got path %s\n", arg3);
+
+ len = strlen(arg3);
+ size = cache_entry_size(len);
+ ce = malloc(size);
+ memset(ce, 0, size);
+
+ memcpy(ce->sha1, sha1, 20);
+ memcpy(ce->name, arg3, len);
+ ce->ce_namelen = htons(len);
+ ce->ce_mode = htonl(mode);
+ return add_cache_entry(ce, allow_add);
+}
+
static int remove_lock = 0;
static void remove_lock_file(void)
refresh_cache();
continue;
}
+ if (!strcmp(path, "--cacheinfo")) {
+ if (i+3 >= argc || add_cacheinfo(argv[i+1], argv[i+2], argv[i+3]))
+ die("update-cache: --cacheinfo <mode> <sha1> <path>");
+ i += 3;
+ continue;
+ }
die("unknown option %s", path);
}
if (!verify_path(path)) {