forked from git/git
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
t6601: add helper for testing path-walk API
Add some tests based on the current behavior, doing interesting checks for different sets of branches, ranges, and the --boundary option. This sets a baseline for the behavior and we can extend it as new options are introduced. Signed-off-by: Derrick Stolee <[email protected]>
- Loading branch information
1 parent
7ff4fe5
commit df84412
Showing
8 changed files
with
223 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
#define USE_THE_REPOSITORY_VARIABLE | ||
|
||
#include "test-tool.h" | ||
#include "environment.h" | ||
#include "hex.h" | ||
#include "object-name.h" | ||
#include "object.h" | ||
#include "pretty.h" | ||
#include "revision.h" | ||
#include "setup.h" | ||
#include "parse-options.h" | ||
#include "path-walk.h" | ||
#include "oid-array.h" | ||
|
||
static const char * const path_walk_usage[] = { | ||
N_("test-tool path-walk <options> -- <revision-options>"), | ||
NULL | ||
}; | ||
|
||
struct path_walk_test_data { | ||
uintmax_t tree_nr; | ||
uintmax_t blob_nr; | ||
}; | ||
|
||
static int emit_block(const char *path, struct oid_array *oids, | ||
enum object_type type, void *data) | ||
{ | ||
struct path_walk_test_data *tdata = data; | ||
const char *typestr; | ||
|
||
switch (type) { | ||
case OBJ_TREE: | ||
typestr = "TREE"; | ||
tdata->tree_nr += oids->nr; | ||
break; | ||
|
||
case OBJ_BLOB: | ||
typestr = "BLOB"; | ||
tdata->blob_nr += oids->nr; | ||
break; | ||
|
||
default: | ||
BUG("we do not understand this type"); | ||
} | ||
|
||
for (size_t i = 0; i < oids->nr; i++) | ||
printf("%s:%s:%s\n", typestr, path, oid_to_hex(&oids->oid[i])); | ||
|
||
return 0; | ||
} | ||
|
||
int cmd__path_walk(int argc, const char **argv) | ||
{ | ||
int res; | ||
struct rev_info revs = REV_INFO_INIT; | ||
struct path_walk_info info = PATH_WALK_INFO_INIT; | ||
struct path_walk_test_data data = { 0 }; | ||
struct option options[] = { | ||
OPT_END(), | ||
}; | ||
|
||
setup_git_directory(); | ||
revs.repo = the_repository; | ||
|
||
argc = parse_options(argc, argv, NULL, | ||
options, path_walk_usage, | ||
PARSE_OPT_KEEP_UNKNOWN_OPT | PARSE_OPT_KEEP_ARGV0); | ||
|
||
if (argc > 1) | ||
setup_revisions(argc, argv, &revs, NULL); | ||
else | ||
usage(path_walk_usage[0]); | ||
|
||
info.revs = &revs; | ||
info.path_fn = emit_block; | ||
info.path_fn_data = &data; | ||
|
||
res = walk_objects_by_path(&info); | ||
|
||
printf("trees:%" PRIuMAX "\n" | ||
"blobs:%" PRIuMAX "\n", | ||
data.tree_nr, data.blob_nr); | ||
|
||
release_revisions(&revs); | ||
return res; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
#!/bin/sh | ||
|
||
test_description='direct path-walk API tests' | ||
|
||
. ./test-lib.sh | ||
|
||
test_expect_success 'setup test repository' ' | ||
git checkout -b base && | ||
mkdir left && | ||
mkdir right && | ||
echo a >a && | ||
echo b >left/b && | ||
echo c >right/c && | ||
git add . && | ||
git commit -m "first" && | ||
echo d >right/d && | ||
git add right && | ||
git commit -m "second" && | ||
echo bb >left/b && | ||
git commit -a -m "third" && | ||
git checkout -b topic HEAD~1 && | ||
echo cc >right/c && | ||
git commit -a -m "topic" | ||
' | ||
|
||
test_expect_success 'all' ' | ||
test-tool path-walk -- --all >out && | ||
cat >expect <<-EOF && | ||
TREE::$(git rev-parse topic^{tree}) | ||
TREE::$(git rev-parse base^{tree}) | ||
TREE::$(git rev-parse base~1^{tree}) | ||
TREE::$(git rev-parse base~2^{tree}) | ||
TREE:left/:$(git rev-parse base:left) | ||
TREE:left/:$(git rev-parse base~2:left) | ||
TREE:right/:$(git rev-parse topic:right) | ||
TREE:right/:$(git rev-parse base~1:right) | ||
TREE:right/:$(git rev-parse base~2:right) | ||
trees:9 | ||
BLOB:a:$(git rev-parse base~2:a) | ||
BLOB:left/b:$(git rev-parse base~2:left/b) | ||
BLOB:left/b:$(git rev-parse base:left/b) | ||
BLOB:right/c:$(git rev-parse base~2:right/c) | ||
BLOB:right/c:$(git rev-parse topic:right/c) | ||
BLOB:right/d:$(git rev-parse base~1:right/d) | ||
blobs:6 | ||
EOF | ||
sort expect >expect.sorted && | ||
sort out >out.sorted && | ||
test_cmp expect.sorted out.sorted | ||
' | ||
|
||
test_expect_success 'topic only' ' | ||
test-tool path-walk -- topic >out && | ||
cat >expect <<-EOF && | ||
TREE::$(git rev-parse topic^{tree}) | ||
TREE::$(git rev-parse base~1^{tree}) | ||
TREE::$(git rev-parse base~2^{tree}) | ||
TREE:left/:$(git rev-parse base~2:left) | ||
TREE:right/:$(git rev-parse topic:right) | ||
TREE:right/:$(git rev-parse base~1:right) | ||
TREE:right/:$(git rev-parse base~2:right) | ||
trees:7 | ||
BLOB:a:$(git rev-parse base~2:a) | ||
BLOB:left/b:$(git rev-parse base~2:left/b) | ||
BLOB:right/c:$(git rev-parse base~2:right/c) | ||
BLOB:right/c:$(git rev-parse topic:right/c) | ||
BLOB:right/d:$(git rev-parse base~1:right/d) | ||
blobs:5 | ||
EOF | ||
sort expect >expect.sorted && | ||
sort out >out.sorted && | ||
test_cmp expect.sorted out.sorted | ||
' | ||
|
||
test_expect_success 'topic, not base' ' | ||
test-tool path-walk -- topic --not base >out && | ||
cat >expect <<-EOF && | ||
TREE::$(git rev-parse topic^{tree}) | ||
TREE:left/:$(git rev-parse topic:left) | ||
TREE:right/:$(git rev-parse topic:right) | ||
trees:3 | ||
BLOB:a:$(git rev-parse topic:a) | ||
BLOB:left/b:$(git rev-parse topic:left/b) | ||
BLOB:right/c:$(git rev-parse topic:right/c) | ||
BLOB:right/d:$(git rev-parse topic:right/d) | ||
blobs:4 | ||
EOF | ||
sort expect >expect.sorted && | ||
sort out >out.sorted && | ||
test_cmp expect.sorted out.sorted | ||
' | ||
|
||
test_expect_success 'topic, not base, boundary' ' | ||
test-tool path-walk -- --boundary topic --not base >out && | ||
cat >expect <<-EOF && | ||
TREE::$(git rev-parse topic^{tree}) | ||
TREE::$(git rev-parse base~1^{tree}) | ||
TREE:left/:$(git rev-parse base~1:left) | ||
TREE:right/:$(git rev-parse topic:right) | ||
TREE:right/:$(git rev-parse base~1:right) | ||
trees:5 | ||
BLOB:a:$(git rev-parse base~1:a) | ||
BLOB:left/b:$(git rev-parse base~1:left/b) | ||
BLOB:right/c:$(git rev-parse base~1:right/c) | ||
BLOB:right/c:$(git rev-parse topic:right/c) | ||
BLOB:right/d:$(git rev-parse base~1:right/d) | ||
blobs:5 | ||
EOF | ||
sort expect >expect.sorted && | ||
sort out >out.sorted && | ||
test_cmp expect.sorted out.sorted | ||
' | ||
|
||
test_done |