check-files.con commit Make fetch/pull scripts terminate cleanly on errors (ed37b5b)
   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)
  21                        die("%s: %s", path, strerror(errno));
  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)
  28                die("preparing to update existing file '%s' not in cache", path);
  29        ce = active_cache[pos];
  30
  31        if (lstat(path, &st) < 0)
  32                die("lstat(%s): %s", path, strerror(errno));
  33
  34        changed = ce_match_stat(ce, &st);
  35        if (changed)
  36                die("preparing to update file '%s' not uptodate in cache", path);
  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}