Re: [PATCH 18/19] update-index: test the system before enabling untracked cache
From: Eric Sunshine <hidden>
Date: 2016-06-15 23:02:48
On Mon, Oct 27, 2014 at 8:10 AM, Nguyễn Thái Ngọc Duy [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> ---diff --git a/builtin/update-index.c b/builtin/update-index.c index e57e2d7..471c0b4 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c@@ -48,6 +48,145 @@ static void report(const char *fmt, ...) va_end(vp); } +static int test_if_untracked_cache_is_supported(void) +{ + struct stat st; + struct stat_data base; + int fd; + + fprintf(stderr, _("Testing ")); + xmkdir("dir-mtime-test"); + atexit(remove_test_directory); + xstat("dir-mtime-test", &st); + fill_stat_data(&base, &st); + fputc('.', stderr); + + avoid_racy(); + fd = create_file("dir-mtime-test/newfile"); + xstat("dir-mtime-test", &st); + if (!match_stat_data(&base, &st)) {
close(fd);
+ fputc('\n', stderr);
+ fprintf_ln(stderr,_("directory stat info does not "
+ "change after adding a new file"));
+ return 0;
+ }
+ fill_stat_data(&base, &st);
+ fputc('.', stderr);
+
+ avoid_racy();
+ xmkdir("dir-mtime-test/new-dir");
+ xstat("dir-mtime-test", &st);
+ if (!match_stat_data(&base, &st)) {close(fd);
+ fputc('\n', stderr);
+ fprintf_ln(stderr, _("directory stat info does not change "
+ "after adding a new directory"));
+ return 0;
+ }
+ fill_stat_data(&base, &st);
+ fputc('.', stderr);
+
+ avoid_racy();
+ write_or_die(fd, "data", 4);
+ close(fd);
+ xstat("dir-mtime-test", &st);
+ if (match_stat_data(&base, &st)) {
+ fputc('\n', stderr);
+ fprintf_ln(stderr, _("directory stat info changes "
+ "after updating a file"));
+ return 0;
+ }
+ fputc('.', stderr);
+
+ avoid_racy();
+ close(create_file("dir-mtime-test/new-dir/new"));
+ xstat("dir-mtime-test", &st);
+ if (match_stat_data(&base, &st)) {
+ fputc('\n', stderr);
+ fprintf_ln(stderr, _("directory stat info changes after "
+ "adding a file inside subdirectory"));
+ return 0;
+ }
+ fputc('.', stderr);
+
+ avoid_racy();
+ xunlink("dir-mtime-test/newfile");
+ xstat("dir-mtime-test", &st);
+ if (!match_stat_data(&base, &st)) {
+ fputc('\n', stderr);
+ fprintf_ln(stderr, _("directory stat info does not "
+ "change after deleting a file"));
+ return 0;
+ }
+ fill_stat_data(&base, &st);
+ fputc('.', stderr);
+
+ avoid_racy();
+ xunlink("dir-mtime-test/new-dir/new");
+ xrmdir("dir-mtime-test/new-dir");
+ xstat("dir-mtime-test", &st);
+ if (!match_stat_data(&base, &st)) {
+ fputc('\n', stderr);
+ fprintf_ln(stderr, _("directory stat info does not "
+ "change after deleting a directory"));
+ return 0;
+ }
+
+ xrmdir("dir-mtime-test");
+ fprintf_ln(stderr, _(" OK"));
+ return 1;
+}