Currently, Diffusion allows you to enter an optional "Clone/Checkout As" name for repositories. This is used when constructing clone commands and clone URIs to make it easier to get a clone with a name you expect.
Historically, there was no meaningful validation on these names and you could enter garbage like `../..`. This garbage was never dangerous, but some garbage values did not work. T7938 has details.
After D14986, these names must adhere to a reasonable grammar and must be unique.
The associated migration will preserve valid, unique names, but discard duplicate or invalid names and emit a notification to the console.
Here are some valid names:
```
phabricator
sensible-repository
AReasonableRepositoryName
node.io
```
Here are some invalid names:
```counterexample
1
ABC
../../etc/passwd
$$O___O$$
''; SELECT * FROM passwords; /*
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
```
Here are some examples of the notifications that may be emitted to the console when the migration runs:
> **Invalid Name**: Repository `rHGTESTX` has a "Clone/Checkout As" name which is no longer valid ("../.."). You can edit the repository to give it a new, valid short name.
> **Duplicate Name**: Repository `rHGTEST` has a duplicate "Clone/Checkout As" name ("DOG1"). Each name must now be unique. You can edit the repository to give it a new, unique short name.
If a repository with an invalid or duplicate name is dropped in the migration, use {nav Diffusion > (Choose a Repository) > Edit Repository > Edit Basic Information} to select a new, sensible, unique name.
This is a step toward making repository callsigns optional. See T4245 for discussion.