diff options
author | James Bottomley <James.Bottomley@SteelEye.com> | 2005-04-24 15:14:16 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-24 15:14:16 -0700 |
commit | c6e007b0942a373bbf87fa3e4e11e2d90907de8c (patch) | |
tree | b4186a52c7b88fb1e715af5ab4a94845df20414b /update-cache.c | |
parent | 32718b6c5e8dfe3ca39731b962ec6ada40407af4 (diff) | |
download | git-c6e007b0942a373bbf87fa3e4e11e2d90907de8c.tar.gz |
[PATCH] update-cache: add "--ignore-missing" option
This adds an --ignore-missing option to update-cache, which makes it
ignore missing files. Together with the "-n" option to checkout-cache,
it allows me to do
checkout-cache -n -f -a && update-cache --ignore-missing --refresh
which only updates and refreshes the files I already have checked out.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'update-cache.c')
-rw-r--r-- | update-cache.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/update-cache.c b/update-cache.c index 4353b80890..02c213cfb6 100644 --- a/update-cache.c +++ b/update-cache.c @@ -12,7 +12,23 @@ * like "update-cache *" and suddenly having all the object * files be revision controlled. */ -static int allow_add = 0, allow_remove = 0; +static int allow_add = 0, allow_remove = 0, not_new = 0; + +/* Three functions to allow overloaded pointer return; see linux/err.h */ +static inline void *ERR_PTR(long error) +{ + return (void *) error; +} + +static inline long PTR_ERR(const void *ptr) +{ + return (long) ptr; +} + +static inline long IS_ERR(const void *ptr) +{ + return (unsigned long)ptr > (unsigned long)-1000L; +} static int index_fd(unsigned char *sha1, int fd, struct stat *st) { @@ -172,7 +188,7 @@ static struct cache_entry *refresh_entry(struct cache_entry *ce) int changed, size; if (stat(ce->name, &st) < 0) - return NULL; + return ERR_PTR(-errno); changed = cache_match_stat(ce, &st); if (!changed) @@ -183,10 +199,10 @@ static struct cache_entry *refresh_entry(struct cache_entry *ce) * to refresh the entry - it's not going to match */ if (changed & MODE_CHANGED) - return NULL; + return ERR_PTR(-EINVAL); if (compare_data(ce, st.st_size)) - return NULL; + return ERR_PTR(-EINVAL); size = ce_size(ce); updated = malloc(size); @@ -212,8 +228,9 @@ static void refresh_cache(void) } new = refresh_entry(ce); - if (!new) { - printf("%s: needs update\n", ce->name); + if (IS_ERR(new)) { + if (!(not_new && PTR_ERR(new) == -ENOENT)) + printf("%s: needs update\n", ce->name); continue; } active_cache[i] = new; @@ -328,6 +345,10 @@ int main(int argc, char **argv) i += 3; continue; } + if (!strcmp(path, "--ignore-missing")) { + not_new = 1; + continue; + } die("unknown option %s", path); } if (!verify_path(path)) { |