- my ($bn) = ($key =~ m{/([a-z0-9_,;=!\+\{\}\|][^/]*)(?:\.git)?\z}i);
- my $rn = "$bn-".substr(sha256_hex($key), 0, 16);
+ my $rn = $key;
+ $rn =~ s!\A[\./]+!!s;
+ $rn =~ s/\.*?(?:\.git)?\.*?\z//s;
+ $rn =~ s![\@\{\}/:\?\[\]\^~\s\f[:cntrl:]\*]!_!isg;
+ $rn .= '-'.substr(sha256_hex($key), 0, 16);