Merge branch 'kn/for-each-ref-skip-updates'
Code clean-up. * kn/for-each-ref-skip-updates: ref-filter: use REF_ITERATOR_SEEK_SET_PREFIX instead of '1' t6302: add test combining '--start-after' with '--exclude' for-each-ref: reword the documentation for '--start-after' for-each-ref: fix documentation argument ordering ref-cache: use 'size_t' instead of int for lengthmaint
commit
10be1c41bc
|
|
@ -7,14 +7,14 @@ git-for-each-ref - Output information on each ref
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[synopsis]
|
||||||
'git for-each-ref' [--count=<count>] [--shell|--perl|--python|--tcl]
|
git for-each-ref [--count=<count>] [--shell|--perl|--python|--tcl]
|
||||||
[(--sort=<key>)...] [--format=<format>]
|
[(--sort=<key>)...] [--format=<format>]
|
||||||
[--include-root-refs] [ --stdin | <pattern>... ]
|
[--include-root-refs] [--points-at=<object>]
|
||||||
[--points-at=<object>]
|
|
||||||
[--merged[=<object>]] [--no-merged[=<object>]]
|
[--merged[=<object>]] [--no-merged[=<object>]]
|
||||||
[--contains[=<object>]] [--no-contains[=<object>]]
|
[--contains[=<object>]] [--no-contains[=<object>]]
|
||||||
[--exclude=<pattern> ...] [--start-after=<marker>]
|
[(--exclude=<pattern>)...] [--start-after=<marker>]
|
||||||
|
[ --stdin | <pattern>... ]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
|
|
@ -114,7 +114,8 @@ TAB %(refname)`.
|
||||||
deleted, modified or added between invocations. Output will only yield those
|
deleted, modified or added between invocations. Output will only yield those
|
||||||
references which follow the marker lexicographically. Output begins from the
|
references which follow the marker lexicographically. Output begins from the
|
||||||
first reference that would come after the marker alphabetically. Cannot be
|
first reference that would come after the marker alphabetically. Cannot be
|
||||||
used with general pattern matching or custom sort options.
|
used with `--sort=<key>` or `--stdin` options, or the _<pattern>_ argument(s)
|
||||||
|
to limit the refs.
|
||||||
|
|
||||||
FIELD NAMES
|
FIELD NAMES
|
||||||
-----------
|
-----------
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ int cmd_for_each_ref(int argc,
|
||||||
OPT_GROUP(""),
|
OPT_GROUP(""),
|
||||||
OPT_INTEGER( 0 , "count", &format.array_opts.max_count, N_("show only <n> matched refs")),
|
OPT_INTEGER( 0 , "count", &format.array_opts.max_count, N_("show only <n> matched refs")),
|
||||||
OPT_STRING( 0 , "format", &format.format, N_("format"), N_("format to use for the output")),
|
OPT_STRING( 0 , "format", &format.format, N_("format"), N_("format to use for the output")),
|
||||||
OPT_STRING( 0 , "start-after", &filter.start_after, N_("start-start"), N_("start iteration after the provided marker")),
|
OPT_STRING( 0 , "start-after", &filter.start_after, N_("start-after"), N_("start iteration after the provided marker")),
|
||||||
OPT__COLOR(&format.use_color, N_("respect format colors")),
|
OPT__COLOR(&format.use_color, N_("respect format colors")),
|
||||||
OPT_REF_FILTER_EXCLUDE(&filter),
|
OPT_REF_FILTER_EXCLUDE(&filter),
|
||||||
OPT_REF_SORT(&sorting_options),
|
OPT_REF_SORT(&sorting_options),
|
||||||
|
|
|
||||||
|
|
@ -3254,8 +3254,9 @@ static int do_filter_refs(struct ref_filter *filter, unsigned int type, each_ref
|
||||||
|
|
||||||
if (filter->start_after)
|
if (filter->start_after)
|
||||||
ret = start_ref_iterator_after(iter, filter->start_after);
|
ret = start_ref_iterator_after(iter, filter->start_after);
|
||||||
else if (prefix)
|
else
|
||||||
ret = ref_iterator_seek(iter, prefix, 1);
|
ret = ref_iterator_seek(iter, prefix,
|
||||||
|
REF_ITERATOR_SEEK_SET_PREFIX);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = do_for_each_ref_iterator(iter, fn, cb_data);
|
ret = do_for_each_ref_iterator(iter, fn, cb_data);
|
||||||
|
|
|
||||||
|
|
@ -498,13 +498,14 @@ static int cache_ref_iterator_seek(struct ref_iterator *ref_iterator,
|
||||||
* indexing to each level as needed.
|
* indexing to each level as needed.
|
||||||
*/
|
*/
|
||||||
do {
|
do {
|
||||||
int len, idx;
|
int idx;
|
||||||
|
size_t len;
|
||||||
int cmp = 0;
|
int cmp = 0;
|
||||||
|
|
||||||
sort_ref_dir(dir);
|
sort_ref_dir(dir);
|
||||||
|
|
||||||
slash = strchr(slash, '/');
|
slash = strchr(slash, '/');
|
||||||
len = slash ? slash - refname : (int)strlen(refname);
|
len = slash ? (size_t)(slash - refname) : strlen(refname);
|
||||||
|
|
||||||
for (idx = 0; idx < dir->nr; idx++) {
|
for (idx = 0; idx < dir->nr; idx++) {
|
||||||
cmp = strncmp(refname, dir->entries[idx]->name, len);
|
cmp = strncmp(refname, dir->entries[idx]->name, len);
|
||||||
|
|
|
||||||
|
|
@ -712,6 +712,25 @@ test_expect_success 'start after, overflow specific reference path' '
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'start after, with exclude pattern' '
|
||||||
|
cat >expect <<-\EOF &&
|
||||||
|
refs/tags/annotated-tag
|
||||||
|
refs/tags/doubly-annotated-tag
|
||||||
|
refs/tags/doubly-signed-tag
|
||||||
|
refs/tags/foo1.10
|
||||||
|
refs/tags/foo1.3
|
||||||
|
refs/tags/foo1.6
|
||||||
|
refs/tags/four
|
||||||
|
refs/tags/one
|
||||||
|
refs/tags/signed-tag
|
||||||
|
refs/tags/three
|
||||||
|
refs/tags/two
|
||||||
|
EOF
|
||||||
|
git for-each-ref --format="%(refname)" --start-after=refs/odd/spot \
|
||||||
|
--exclude=refs/tags/foo >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'start after, last reference' '
|
test_expect_success 'start after, last reference' '
|
||||||
cat >expect <<-\EOF &&
|
cat >expect <<-\EOF &&
|
||||||
EOF
|
EOF
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue