Código de validación práctico
Implementación de validación en Python
Función de validación de URL integral
import re
import subprocess
def validate_git_repository_url(url):
"""
Validate Git repository URL with multiple checks
Args:
url (str): Git repository URL
Returns:
dict: Validation result
"""
## Regex validation patterns
patterns = {
'https': r'^https://.*\.git$',
'ssh': r'^git@.*:.*\.git$',
'git': r'^git://.*\.git$'
}
## Validation result structure
result = {
'is_valid': False,
'protocol': None,
'errors': []
}
## Check URL format
if not url:
result['errors'].append('Empty URL')
return result
## Regex validation
for protocol, pattern in patterns.items():
if re.match(pattern, url):
result['protocol'] = protocol
break
if not result['protocol']:
result['errors'].append('Invalid URL format')
return result
## Network accessibility check
try:
subprocess.run(
['git', 'ls-remote', url],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
timeout=10,
check=True
)
result['is_valid'] = True
except subprocess.CalledProcessError:
result['errors'].append('Repository inaccessible')
except subprocess.TimeoutExpired:
result['errors'].append('Connection timeout')
return result
## Example usage
def main():
test_urls = [
'https://github.com/labex/demo.git',
'git@github.com:labex/example.git',
'invalid-url'
]
for url in test_urls:
validation = validate_git_repository_url(url)
print(f"URL: {url}")
print(f"Valid: {validation['is_valid']}")
print(f"Protocol: {validation['protocol']}")
print(f"Errors: {validation['errors']}\n")
if __name__ == '__main__':
main()
Script de validación en Bash
#!/bin/bash
validate_git_url() {
local url="$1"
## URL validation regex
local https_pattern="^https://.*\.git$"
local ssh_pattern="^git@.*:.*\.git$"
## Check URL format
if [[ $url =~ $https_pattern ]] || [[ $url =~ $ssh_pattern ]]; then
## Attempt to access repository
git ls-remote "$url" &> /dev/null
if [ $? -eq 0 ]; then
echo "Valid repository URL"
return 0
else
echo "Repository inaccessible"
return 1
fi
else
echo "Invalid URL format"
return 1
fi
}
## Example usage
validate_git_url "https://github.com/labex/demo.git"
validate_git_url "invalid-url"
Diagrama de flujo de la estrategia de validación
graph TD
A[Git Repository URL] --> B{Regex Validation}
B -->|Valid Format| C{Network Accessibility}
B -->|Invalid Format| D[Reject URL]
C -->|Accessible| E[Validate Success]
C -->|Inaccessible| F[Reject URL]
Consideraciones de validación
Comprobación |
Descripción |
Impacto |
Validación por expresiones regulares (Regex) |
Verificar la estructura de la URL |
Evita URLs mal formadas |
Comprobación de red |
Probar la accesibilidad del repositorio |
Asegura que los repositorios estén en línea y sean alcanzables |
Manejo de tiempo de espera (Timeout) |
Evitar esperas indefinidas |
Mejorar el rendimiento |
Al implementar estas técnicas de validación, los desarrolladores pueden manejar de manera sólida las URL de los repositorios Git en diferentes escenarios y plataformas.