Subject: Re: [PATCH] teach fast-export an --anonymize option

From: Junio C Hamano <[email-masked]>
Date: Thu, 21 Aug 2014 13:15:10 -0700

Jeff King <[email-masked]> writes:

> +/*
> + * We anonymize each component of a path individually,
> + * so that paths a/b and a/c will share a common root.
> + * The paths are cached via anonymize_mem so that repeated
> + * lookups for "a" will yield the same value.
> + */
> +static void anonymize_path(struct strbuf *out, const char *path,
> +			   struct hashmap *map,
> +			   char *(*generate)(const char *, size_t *))
> +{
> +	while (*path) {
> +		const char *end_of_component = strchrnul(path, '/');
> +		size_t len = end_of_component - path;
> +		const char *c = anonymize_mem(map, generate, path, &len);
> +		strbuf_add(out, c, len);
> +		path = end_of_component;
> +		if (*path)
> +			strbuf_addch(out, *path++);
> +	}
> +}

Do two paths sort the same way before and after anonymisation?  For
example, if generate() works as a simple substitution, it should map
a character that sorts before (or after) '/' with another that also
sorts before (or after) '/' for us to be able to diagnose an error
that comes from D/F sort order confusion.