Signed-off-by: Brad Roberts <braddr@puremagic.com> Signed-off-by: Petr Baudis <pasky@ucw.cz>
		
			
				
	
	
		
			48 lines
		
	
	
		
			997 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			997 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * check-files.c
 | 
						|
 *
 | 
						|
 * Check that a set of files are up-to-date in the filesystem or
 | 
						|
 * do not exist. Used to verify a patch target before doing a patch.
 | 
						|
 *
 | 
						|
 * Copyright (C) 2005 Linus Torvalds
 | 
						|
 */
 | 
						|
#include "cache.h"
 | 
						|
 | 
						|
static void check_file(const char *path)
 | 
						|
{
 | 
						|
	int fd = open(path, O_RDONLY);
 | 
						|
	struct cache_entry *ce;
 | 
						|
	struct stat st;
 | 
						|
	int pos, changed;
 | 
						|
 | 
						|
	/* Nonexistent is fine */
 | 
						|
	if (fd < 0) {
 | 
						|
		if (errno != ENOENT)
 | 
						|
			die("%s: %s", path, strerror(errno));
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	/* Exists but is not in the cache is not fine */
 | 
						|
	pos = cache_name_pos(path, strlen(path));
 | 
						|
	if (pos < 0)
 | 
						|
		die("preparing to update existing file '%s' not in cache", path);
 | 
						|
	ce = active_cache[pos];
 | 
						|
 | 
						|
	if (lstat(path, &st) < 0)
 | 
						|
		die("lstat(%s): %s", path, strerror(errno));
 | 
						|
 | 
						|
	changed = ce_match_stat(ce, &st);
 | 
						|
	if (changed)
 | 
						|
		die("preparing to update file '%s' not uptodate in cache", path);
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc, char **argv)
 | 
						|
{
 | 
						|
	int i;
 | 
						|
 | 
						|
	read_cache();
 | 
						|
	for (i = 1; i < argc ; i++)
 | 
						|
		check_file(argv[i]);
 | 
						|
	return 0;
 | 
						|
}
 |