public static bool IsValidRefName(string refName)
{
int len = refName.Length;
if (len == 0) return false;
if (refName.EndsWith(".lock")) return false;
int components = 1;
char p = '\0';
for (int i = 0; i < len; i++)
{
char c = refName[i];
if (c <= ' ') return false;
switch (c)
{
case '.':
switch (p)
{
case '\0':
case '/':
case '.':
return false;
}
if (i == len - 1) return false;
break;
case '/':
if (i == 0 || i == len - 1) return false;
components++;
break;
case '{':
if (p == '@') return false;
break;
case '~':
case '^':
case ':':
case '?':
case '[':
case '*':
case '\\':
return false;
}
p = c;
}
return components > 1;
}