]> git.ipfire.org Git - thirdparty/git.git/blame - check-files.c
[PATCH] Consolidate the error handling
[thirdparty/git.git] / check-files.c
CommitLineData
74b46e32
LT
1/*
2 * check-files.c
3 *
4 * Check that a set of files are up-to-date in the filesystem or
5 * do not exist. Used to verify a patch target before doing a patch.
6 *
7 * Copyright (C) 2005 Linus Torvalds
8 */
9#include "cache.h"
10
11static void check_file(const char *path)
12{
13 int fd = open(path, O_RDONLY);
14 struct cache_entry *ce;
15 struct stat st;
16 int pos, changed;
17
18 /* Nonexistent is fine */
19 if (fd < 0) {
20 if (errno != ENOENT)
2de381f9 21 die("%s: %s", path, strerror(errno));
74b46e32
LT
22 return;
23 }
24
25 /* Exists but is not in the cache is not fine */
26 pos = cache_name_pos(path, strlen(path));
27 if (pos < 0)
2de381f9 28 die("preparing to update existing file '%s' not in cache", path);
74b46e32
LT
29 ce = active_cache[pos];
30
31 if (fstat(fd, &st) < 0)
2de381f9 32 die("fstat(%s): %s", path, strerror(errno));
74b46e32
LT
33
34 changed = cache_match_stat(ce, &st);
35 if (changed)
2de381f9 36 die("preparing to update file '%s' not uptodate in cache", path);
74b46e32
LT
37}
38
39int main(int argc, char **argv)
40{
41 int i;
42
43 read_cache();
44 for (i = 1; i < argc ; i++)
45 check_file(argv[i]);
46 return 0;
47}