int git_futils_rmdir_r( const char *path, const char *base, uint32_t flags) { int error; git_buf fullpath = GIT_BUF_INIT; futils__rmdir_data data; /* build path and find "root" where we should start calling mkdir */ if (git_path_join_unrooted(&fullpath, path, base, NULL) < 0) return -1; memset(&data, 0, sizeof(data)); data.base = base ? base : ""; data.baselen = base ? strlen(base) : 0; data.flags = flags; error = futils__rmdir_recurs_foreach(&data, &fullpath); /* remove now-empty parents if requested */ if (!error && (flags & GIT_RMDIR_EMPTY_PARENTS) != 0) error = git_path_walk_up( &fullpath, base, futils__rmdir_empty_parent, &data); if (error == GIT_ITEROVER) { giterr_clear(); error = 0; } git_buf_free(&fullpath); return error; }
void test_core_path__11a_walkup_cancel(void) { git_buf p = GIT_BUF_INIT; int cancel[] = { 3, 2, 1, 0 }; char *expect[] = { "/a/b/c/d/e/", "/a/b/c/d/", "/a/b/c/", "[CANCEL]", NULL, "/a/b/c/d/e", "/a/b/c/d/", "[CANCEL]", NULL, "/a/b/c/d/e", "[CANCEL]", NULL, "[CANCEL]", NULL, NULL }; char *root[] = { NULL, NULL, "/", "", NULL }; int i, j; check_walkup_info info; info.expect = expect; for (i = 0, j = 0; expect[i] != NULL; i++, j++) { git_buf_sets(&p, expect[i]); info.cancel_after = cancel[j]; info.expect_idx = i; cl_assert_equal_i( CANCEL_VALUE, git_path_walk_up(&p, root[j], check_one_walkup_step, &info) ); /* skip to next run of expectations */ while (expect[i] != NULL) i++; } git_buf_dispose(&p); }
void test_core_path__11_walkup(void) { git_buf p = GIT_BUF_INIT; char *expect[] = { "/a/b/c/d/e/", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", NULL, "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", NULL, "this is a path", NULL, "///a///b///c///d///e///", "///a///b///c///d///", "///a///b///c///", "///a///b///", "///a///", "///", NULL, NULL }; char *root[] = { NULL, NULL, "/", "", "/a/b", "/a/b/", NULL, NULL, NULL }; int i, j; check_walkup_info info; info.expect = expect; for (i = 0, j = 0; expect[i] != NULL; i++, j++) { git_buf_sets(&p, expect[i]); info.expect_idx = i; cl_git_pass( git_path_walk_up(&p, root[j], check_one_walkup_step, &info) ); cl_assert_equal_s(p.ptr, expect[i]); /* skip to next run of expectations */ while (expect[i] != NULL) i++; } git_buf_free(&p); }
void test_core_path__11_walkup(void) { git_buf p = GIT_BUF_INIT; char *expect[] = { /* 1 */ "/a/b/c/d/e/", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, /* 2 */ "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, /* 3 */ "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, /* 4 */ "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", "/a/", "/", NULL, /* 5 */ "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", NULL, /* 6 */ "/a/b/c/d/e", "/a/b/c/d/", "/a/b/c/", "/a/b/", NULL, /* 7 */ "this_is_a_path", "", NULL, /* 8 */ "this_is_a_path/", "", NULL, /* 9 */ "///a///b///c///d///e///", "///a///b///c///d///", "///a///b///c///", "///a///b///", "///a///", "///", NULL, /* 10 */ "a/b/c/", "a/b/", "a/", "", NULL, /* 11 */ "a/b/c", "a/b/", "a/", "", NULL, /* 12 */ "a/b/c/", "a/b/", "a/", NULL, /* 13 */ "", NULL, /* 14 */ "/", NULL, /* 15 */ NULL }; char *root[] = { /* 1 */ NULL, /* 2 */ NULL, /* 3 */ "/", /* 4 */ "", /* 5 */ "/a/b", /* 6 */ "/a/b/", /* 7 */ NULL, /* 8 */ NULL, /* 9 */ NULL, /* 10 */ NULL, /* 11 */ NULL, /* 12 */ "a/", /* 13 */ NULL, /* 14 */ NULL, }; int i, j; check_walkup_info info; info.expect = expect; info.cancel_after = -1; for (i = 0, j = 0; expect[i] != NULL; i++, j++) { git_buf_sets(&p, expect[i]); info.expect_idx = i; cl_git_pass( git_path_walk_up(&p, root[j], check_one_walkup_step, &info) ); cl_assert_equal_s(p.ptr, expect[i]); cl_assert(expect[info.expect_idx] == NULL); i = info.expect_idx; } git_buf_dispose(&p); }