Browse Source

string_list_longest_prefix(): remove function

This function was added in f103f95b11 in
the erroneous expectation that it would be used in the
reimplementation of longest_ancestor_length().  But it turned out to
be easier to use a function specialized for comparing path prefixes
(i.e., one that knows about slashes and root paths) than to prepare
the paths in such a way that a generic string prefix comparison
function can be used.  So delete string_list_longest_prefix() and its
documentation and test cases.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Jeff King <peff@peff.net>
maint
Michael Haggerty 13 years ago committed by Jeff King
parent
commit
059b37934c
  1. 8
      Documentation/technical/api-string-list.txt
  2. 20
      string-list.c
  3. 8
      string-list.h
  4. 30
      t/t0063-string-list.sh
  5. 20
      test-string-list.c

8
Documentation/technical/api-string-list.txt

@ -75,14 +75,6 @@ Functions @@ -75,14 +75,6 @@ Functions
to be deleted. Preserve the order of the items that are
retained.

`string_list_longest_prefix`::

Return the longest string within a string_list that is a
prefix (in the sense of prefixcmp()) of the specified string,
or NULL if no such prefix exists. This function does not
require the string_list to be sorted (it does a linear
search).

`print_string_list`::

Dump a string_list to stdout, useful mainly for debugging purposes. It

20
string-list.c

@ -136,26 +136,6 @@ void filter_string_list(struct string_list *list, int free_util, @@ -136,26 +136,6 @@ void filter_string_list(struct string_list *list, int free_util,
list->nr = dst;
}

char *string_list_longest_prefix(const struct string_list *prefixes,
const char *string)
{
int i, max_len = -1;
char *retval = NULL;

for (i = 0; i < prefixes->nr; i++) {
char *prefix = prefixes->items[i].string;
if (!prefixcmp(string, prefix)) {
int len = strlen(prefix);
if (len > max_len) {
retval = prefix;
max_len = len;
}
}
}

return retval;
}

void string_list_clear(struct string_list *list, int free_util)
{
if (list->items) {

8
string-list.h

@ -38,14 +38,6 @@ int for_each_string_list(struct string_list *list, @@ -38,14 +38,6 @@ int for_each_string_list(struct string_list *list,
void filter_string_list(struct string_list *list, int free_util,
string_list_each_func_t want, void *cb_data);

/*
* Return the longest string in prefixes that is a prefix (in the
* sense of prefixcmp()) of string, or NULL if no such prefix exists.
* This function does not require the string_list to be sorted (it
* does a linear search).
*/
char *string_list_longest_prefix(const struct string_list *prefixes, const char *string);


/* Use these functions only on sorted lists: */
int string_list_has_string(const struct string_list *list, const char *string);

30
t/t0063-string-list.sh

@ -17,14 +17,6 @@ test_split () { @@ -17,14 +17,6 @@ test_split () {
"
}

test_longest_prefix () {
test "$(test-string-list longest_prefix "$1" "$2")" = "$3"
}

test_no_longest_prefix () {
test_must_fail test-string-list longest_prefix "$1" "$2"
}

test_split "foo:bar:baz" ":" "-1" <<EOF
3
[0]: "foo"
@ -96,26 +88,4 @@ test_expect_success "test remove_duplicates" ' @@ -96,26 +88,4 @@ test_expect_success "test remove_duplicates" '
test a:b:c = "$(test-string-list remove_duplicates a:a:a:b:b:b:c:c:c)"
'

test_expect_success "test longest_prefix" '
test_no_longest_prefix - '' &&
test_no_longest_prefix - x &&
test_longest_prefix "" x "" &&
test_longest_prefix x x x &&
test_longest_prefix "" foo "" &&
test_longest_prefix : foo "" &&
test_longest_prefix f foo f &&
test_longest_prefix foo foobar foo &&
test_longest_prefix foo foo foo &&
test_no_longest_prefix bar foo &&
test_no_longest_prefix bar:bar foo &&
test_no_longest_prefix foobar foo &&
test_longest_prefix foo:bar foo foo &&
test_longest_prefix foo:bar bar bar &&
test_longest_prefix foo::bar foo foo &&
test_longest_prefix foo:foobar foo foo &&
test_longest_prefix foobar:foo foo foo &&
test_longest_prefix foo: bar "" &&
test_longest_prefix :foo bar ""
'

test_done

20
test-string-list.c

@ -97,26 +97,6 @@ int main(int argc, char **argv) @@ -97,26 +97,6 @@ int main(int argc, char **argv)
return 0;
}

if (argc == 4 && !strcmp(argv[1], "longest_prefix")) {
/* arguments: <colon-separated-prefixes>|- <string> */
struct string_list prefixes = STRING_LIST_INIT_DUP;
int retval;
const char *prefix_string = argv[2];
const char *string = argv[3];
const char *match;

parse_string_list(&prefixes, prefix_string);
match = string_list_longest_prefix(&prefixes, string);
if (match) {
printf("%s\n", match);
retval = 0;
}
else
retval = 1;
string_list_clear(&prefixes, 0);
return retval;
}

fprintf(stderr, "%s: unknown function name: %s\n", argv[0],
argv[1] ? argv[1] : "(there was none)");
return 1;

Loading…
Cancel
Save